powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Соединения, CSP-сессии, GraceTime и лицензии... нипаня-а-атна!!!
14 сообщений из 14, страница 1 из 1
Соединения, CSP-сессии, GraceTime и лицензии... нипаня-а-атна!!!
    #37460462
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил тут убедиться, что каше блюдет (извините за каламбур) бюджет лицензий.
Запустил от себя почти два десятка эекплореров (открыл, ввел пароль, убедился что вход выполнен, закрыл - так 17 раз, ну не лень мне было ;)

Появилось 2 вопроса:

1. С чего это лицензия как одна была занята, так одна занятой и осталась?

2. А что это с грейс-периодом??? Проверил и на рабочем - везде нолики.. но(!) по факту при закрытии сессий лицензии высвобождаются не сразу...
...
Рейтинг: 0 / 0
Соединения, CSP-сессии, GraceTime и лицензии... нипаня-а-атна!!!
    #37460489
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov,

До 25 коннектов на пользователя - это все еще одна лицензия.
26 Коннектов на пользователя и выше - количество лицензий=количество подключения, причем даже при уменьшении числа подключений ниже 25ти.

Grace период начинается после отключения сессии, сессия отключается по своему таймайту либо вручную.
Таймаут отключения сессии - 5 минут, время grace периода - 5 минут, хотя оно не строго соблюдается.
...
Рейтинг: 0 / 0
Соединения, CSP-сессии, GraceTime и лицензии... нипаня-а-атна!!!
    #37460543
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.До 25 коннектов на пользователя - это все еще одна лицензия.
Дополнение: Если стоит Cache 2010 или выше, то вместо пользователя используется связка (пользователь, ip-адрес).
...
Рейтинг: 0 / 0
Соединения, CSP-сессии, GraceTime и лицензии... нипаня-а-атна!!!
    #37460603
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.kolesov,

До 25 коннектов на пользователя - это все еще одна лицензия.
26 Коннектов на пользователя и выше - количество лицензий=количество подключения, причем даже при уменьшении числа подключений ниже 25ти.

Grace период начинается после отключения сессии, сессия отключается по своему таймайту либо вручную.
Таймаут отключения сессии - 5 минут, время grace периода - 5 минут, хотя оно не строго соблюдается.
Про 25 коннектов - это всех коннектов или только для цээспэ? Раньше помниться, было меньшее число соединений (11 или 12), после которого отъедалась уйма лицензий. Грейса кроме "0" я так и не добился.

Попробовал одним логином зайти с разных айпи - отъелись 2 лицензии. Опять я что-то не понял:
/csp/docbook/classmethod UserNameLicensing (OnOffState As %Integer) as %Integer
Modify how the License User Identifier is specified. By default, the client IP address is used to identify a user to the Cache license tracking subsystem . If the Cache is installed with the normal security level, each process will be have a user identity ($username). The $SYSTEM.License.UserNameLicensing system method can be called to make the Cache license subsystem use $username as the license user identifier .

$SYSTEM.License.UserNameLicensing modifies the system state. It can be called from SYSTEM^%ZSTART to enable user name licensing at instance startup.

$SYSTEM.License.UserNameLicensing(1) enables $username based licensing and returns the previous state.
$SYSTEM.License.UserNameLicensing(0) disables $username based licensing and returns the previous state.
$SYSTEM.License.UserNameLicensing() returns the current state.

$SYSTEM.License.UserNameLicensing() returns an error if called with an argument with RealTime or Web Add-On keys because these license types use special login rules.
Или мой Английский хромает?

При подобном отношении (25+) напрашиваются контрмеры - например, при входе пользователя выяснять, сколько у него соединений и сколько отъето лицензий - и если первых более 24, или вторых более 1-й, не открывать сессию вовсе.

Как подсмотреть эти цифры знаете? И еще - берет же откуда-то система инфу о том, какой грейс назначать, мне бы тоже хотелось знать, какой грейс будет назначен, если я стопаю сессию прямо сейчас.
...
Рейтинг: 0 / 0
Соединения, CSP-сессии, GraceTime и лицензии... нипаня-а-атна!!!
    #37460630
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d $SYSTEM.License.UserNameLicensing(1)
или
d $SYSTEM.License.UserNameLicensing(0)

Дает одинаковый результат - входишь одним юзером с разных хостов отъедается 2 лицензии (фича?)
...
Рейтинг: 0 / 0
Соединения, CSP-сессии, GraceTime и лицензии... нипаня-а-атна!!!
    #37460641
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grace период с того момента когда, вы сделали logout из сессии или она померла по TimeOut, и он 5 минут

25 коннектов считаются на обычный процесс, если это не CSP
и для CSP на 25 коннектов на пользователя, который указывается в %session.Login(), а

Для WebAddon, лицензии вообще не считаются пока не сделали Login

к имени пользователя стыкуется IP с которого он зашел и в итоге будут разные лицензии

можно посмотреть методы в $system.License (класс %SYSTEM.License), на предмет мониторинга расходования лицензий
...
Рейтинг: 0 / 0
Соединения, CSP-сессии, GraceTime и лицензии... нипаня-а-атна!!!
    #37460650
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все зависит от UserID, если вы сможете сделать подключения с разных IP как одно userid - это будет оддна лицензия, но каше с определенных версий туда вставляет IP адрес, так что вряд ли.

То же самое, если подключите терминал, одбс, csp или еще что с одним UserID, то будет считаться как одна лицензия.
...
Рейтинг: 0 / 0
Соединения, CSP-сессии, GraceTime и лицензии... нипаня-а-атна!!!
    #37460688
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kolesovвходишь одним юзером с разных хостов отъедается 2 лицензии (фича?)
Я писал выше про Cache 2010+. Вот ссылка на это обновление.

kolesovПри подобном отношении (25+) напрашиваются контрмеры - например, при входе пользователя выяснять, сколько у него соединений и сколько отъето лицензий - и если первых более 24, или вторых более 1-й, не открывать сессию вовсе.

Как подсмотреть эти цифры знаете?
Смотрите методы класса %SYSTEM.License, там все это есть.
Другой вопрос - когда нужно делать проверку. Здесь либо %ZSTART, либо переопределять страницу входа в csp-приложение.
...
Рейтинг: 0 / 0
Соединения, CSP-сессии, GraceTime и лицензии... нипаня-а-атна!!!
    #37460729
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TurkСмотрите методы класса %SYSTEM.License, там все это есть.
Другой вопрос - когда нужно делать проверку. Здесь либо %ZSTART, либо переопределять страницу входа в csp-приложение.
Туда именно и смотрю (где найти количество коннектов и грейс найти не могу пока).
А страница входа давно переопределена... именно оттуда и пробовал (безуспешно) вызывать

d $SYSTEM.License.UserNameLicensing(1/0)

Тут баловался - сделал цээспэ-приложение поверх рабочей базы, а в качестве страницы входа выложил рабочий интерфейс... кое-что даже можно заставить работать ;) этакий бесплатный полустатичный вебаддон... Жаль миме-дату не понимает...
...
Рейтинг: 0 / 0
Соединения, CSP-сессии, GraceTime и лицензии... нипаня-а-атна!!!
    #37461176
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в %SYSTEM.License несколько Query в частности есть UserList который отображает такую же информацию
...
Рейтинг: 0 / 0
Соединения, CSP-сессии, GraceTime и лицензии... нипаня-а-атна!!!
    #37461432
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kolesovТуда именно и смотрю (где найти количество коннектов и грейс найти не могу пока)
Код: plaintext
w $System.License.ConnectionCount(%CSP.Session.LicenseId)

У нас для экономии лицензии используется следующий метод:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
/// Логин по умолчанию
Parameter DefL = "_user";
/// Пароль по умолчанию
Parameter DefP = "sys";
/// Занимаем свободный слот лицензии
ClassMethod LoginFreeSlot(IsCSP As %Boolean = 0) As %Integer
{
	s $zt = "errLoginFreeSlot"
	s res = 1
	// выходим, если объявлена лишь одна лицензия
	s LicenceCapacity = $System.License.KeyLicenseUnits()
	g:(LicenceCapacity<=1) exitLoginFreeSlot
	// один слот должен быть всегда свободен, иначе не будут порождаться дочерние job-ы
	s MaxConnections = $System.License.MaxConnections() - 1
	// получаем идентификатор текущего пользователя
	s userId = $select(IsCSP:%CSP.Session.LicenseId, 1:$System.License.GetUserId())
	//
	l +^LoginFreeSlot
	s fLock = 1
	// получаем индекс лицензии, если она наша
	s indexUserId = 0
	if (userId [ ..#DefL)
	{
		s ConnectionCount = $System.License.ConnectionCount(userId)
		if (ConnectionCount <= MaxConnections)
		{
		#if 1
			// см. код ниже
			s indexUserId = +$e(userId,$l(..#DefL)+1,$l(userId))
		#else
			// не пересаживаем процесс, если еще есть свободные слоты в текущей лицензии
			s res = ConnectionCount
			g exitLoginFreeSlot
		#endif
		}
	}
	// получаем количество свободных лицензий
	s FreeCapacity = $System.License.LUAvailable() - $g(^Licence("Reserv"),0)
	s flag = $select((FreeCapacity<1):-1, 1:1)
	// ищем свободную лицензию (с минимальным индексом, чтобы пересаживаться на освободившиеся слоты)
	s indexFirstFree = 0
	s i = 1
	f {
		s ConnectionCount = $System.License.ConnectionCount(..#DefL_i)
		if (ConnectionCount < MaxConnections)
		{
			s indexFirstFree = i
			q
		}
		//
		q:($i(i) >= LicenceCapacity)
	}
	// восстанавливаем индекс лицензии, если не нашли более подходящую лицензию
	s:(indexUserId>0) indexFirstFree = $select((indexUserId<indexFirstFree):indexUserId, 1:indexFirstFree)
	// выходим, если не нашли свободную лицензию
	if (indexFirstFree <= 0)
	{
		s res = 0
		g exitLoginFreeSlot
	}
	// формируем идентификатор пользователя
	s userId = ..#DefL_indexFirstFree
	// перекидываем процесс на полученный идентификатор
	s res = $select(IsCSP:%CSP.Session.Login(userId,..#DefP,1), 1:$System.License.Login(userId,..#DefP))
	// возвращаем результат - число соединений на выбранной лицензии
	g exitLoginFreeSlot
	//
errLoginFreeSlot
	s $zt = ""
	s ^zErrorLoginFreeSlot($i(^zErrorLoginFreeSlot)) = $lb($zdt($h,3), $ze)
	s res = 0
	//
exitLoginFreeSlot
	l:($g(fLock,0)) -^LoginFreeSlot
	s fLock = 0
	//
	q res
}

Правда на CSP его не проверяли, т.к. обычно у заказчиков стоит Web-Addon. Также для Cache 2010+ возможно потребуется обновить код (пока работаем в 2009.1).
...
Рейтинг: 0 / 0
Соединения, CSP-сессии, GraceTime и лицензии... нипаня-а-атна!!!
    #37462177
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока разбираюсь, сделал несколько печальных наблюдений:

1. Можно в адресе любой странице добавить ?CacheUserName=имя&CachePassword=пароль-в-открытом-виде, и Каше преспокойно это проглатывает... Почувствовал себя в каменном веке прям ;)

2. Попытался унаследоваться от %ZEN.SessionEvents и подсунуть обработчик событий сессии моему интерфейсу - нихрена ни один метод не работает.

Вопросик возник: А как вообще поймать авторизацию?
- Допустим, я по каким-то причинам решил динамически высчитывать, пускать мне юзера или нет (например после 17 часов запретить работать).
- Простое решение - в прикладухе проверять и сессию закрывать. Но(!) соединение создастся и если юзер честно перезайдет 26 раз...
- Можно ли как-то не доводить до открытия сессии, есть ли место для перехвата и обработки логина пользователя до момента создания сессии и соединения???
...
Рейтинг: 0 / 0
Соединения, CSP-сессии, GraceTime и лицензии... нипаня-а-атна!!!
    #37462368
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovПока разбираюсь, сделал несколько печальных наблюдений:

1. Можно в адресе любой странице добавить ?CacheUserName=имя&CachePassword=пароль-в-открытом-виде, и Каше преспокойно это проглатывает... Почувствовал себя в каменном веке прям ;)

2. Попытался унаследоваться от %ZEN.SessionEvents и подсунуть обработчик событий сессии моему интерфейсу - нихрена ни один метод не работает.

Вопросик возник: А как вообще поймать авторизацию?
- Допустим, я по каким-то причинам решил динамически высчитывать, пускать мне юзера или нет (например после 17 часов запретить работать).
- Простое решение - в прикладухе проверять и сессию закрывать. Но(!) соединение создастся и если юзер честно перезайдет 26 раз...
- Можно ли как-то не доводить до открытия сессии, есть ли место для перехвата и обработки логина пользователя до момента создания сессии и соединения???

у нас до авторизации, автоматически авторизуется в учетку Гость, а после того как пользователь авторизовался, то меняется на его пользователя

а попасть до создания сессии никак не получится, ну если только влезть в %ZSTART и сразу прибивать процесс, то возможно и получится, но что то ведь нужно показать пользователю, а то он увидит ошибку CSPGateway об обрыве соединения и все
...
Рейтинг: 0 / 0
Соединения, CSP-сессии, GraceTime и лицензии... нипаня-а-атна!!!
    #37464603
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

Пока вроде получается так:
- на всей области csp задается класс событий сессии, унаследованный от %CSP.SessionEvents;
- в этом классе можно вполне управлять логином:

ClassMethod OnLogin() As %Status
{
s ^a = %session.Username
q $$$ERROR(10000,"!!!!!!!!!!!!!")
}

После этого нет ни соединения, ни отобранной лицензии. Ну а дальше дело техники ;)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Соединения, CSP-сессии, GraceTime и лицензии... нипаня-а-атна!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]