|
Статистика работы пользователей | ☑ | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0
sunson
20.03.13
✎
14:27
|
Дорогие друзья! Извините, что к вам обращаюсь. Сами мы не местные)))
Мне надо собрать статистику по работе пользователей в течение дня. Т.е. определить в какое время дня сколько пользователей не просто сидят в базе, но реально в ней что-то делают. Сама база находится на SQL. Отсюда вопрос: Можно ли это сделать средствами SQL? Если да, то как это сделать? И конечно хотелось бы получить эти данные в форме какой либо диаграммы для простоты анализа. Помогите, кто чем может. Посоветуйте, не проходите мимо.) |
|||||||||||||
1
Бледно Золотистый
20.03.13
✎
14:29
|
Отчет по ЖР подойдет?
|
|||||||||||||
2
andreymongol82
20.03.13
✎
14:30
|
Реально что-то делают это как? Фигачат кучу документов? Клепают отчеты? У некоторых например реальная работа заключается сформировать отчет и думать-думать-думать...
|
|||||||||||||
3
Wobland
20.03.13
✎
14:30
|
||||||||||||||
4
GANR
20.03.13
✎
14:31
|
Соединение (IInfoBaseConnectionInfo)
Соединение (IInfoBaseConnectionInfo) Свойства: AppID (AppID) blockedByDBMS (blockedByDBMS) bytesAll (bytesAll) bytesLast5Min (bytesLast5Min) callsAll (callsAll) callsLast5Min (callsLast5Min) ConnectedAt (ConnectedAt) ConnID (ConnID) dbConnMode (dbConnMode) dbmsBytesAll (dbmsBytesAll) dbmsBytesLast5Min (dbmsBytesLast5Min) dbProcInfo (dbProcInfo) dbProcTook (dbProcTook) dbProcTookAt (dbProcTookAt) durationAll (durationAll) durationAllDBMS (durationAllDBMS) durationCurrent (durationCurrent) durationCurrentDBMS (durationCurrentDBMS) durationLast5Min (durationLast5Min) durationLast5MinDBMS (durationLast5MinDBMS) HostName (HostName) IBConnMode (IBConnMode) ThreadMode (ThreadMode) UserName (UserName) Описание: Содержит параметры одного соединения клиентского приложения с информационной базой на кластере серверов 1С:Предприятия. Представляет собой объект с интерфейсом IInfoBaseConnectionInfo. Доступность: Интеграция. Пример: Rem Пример удаления всех соединений (фрагмент на VBScript): Set connector = CreateObject("V82.COMConnector") Set ragent = connector.ConnectAgent("CentralServer") ragent.AuthenticateAgent "CentralAdminName", "Password" clusters = ragent.GetClusters() Set cluster = clusters(0) ragent.Authenticate cluster, "ClusterAdminName", "Password" processes = ragent.GetWorkingProcesses(cluster) Set process0 = processes(0) WorkingAddress = process0.HostName ":" process0.MainPort Set server = connector.ConnectWorkingProcess(WorkingAddress) server.AddAuthentication "InfoBaseUserName", "Password" Set ibDesc = server.CreateInfoBaseInfo() ibDesc.Name = "InfoBaseName" connections = server.GetInfoBaseConnections(ibDesc) Dim i For i = LBound(connections) To UBound(connections) set connection = connections(i) server.Disconnect connection Next См. также: Соединение с рабочим процессом, метод Disconnect -------------------------------------------------------------------------------- © ООО "1С", 1996-2012. Все права защищены. Можно средствами 1С |
|||||||||||||
5
GANR
20.03.13
✎
14:33
|
Можно-можно... Лично выгонялку неактивных писал.
|
|||||||||||||
6
sunson
20.03.13
✎
14:33
|
(2) Формирование отчетов - это тоже реально что-то делают. Т.е. у них не просто открыта база, а они рубятся в косынку, у них идет обмен данными с сервером.
|
|||||||||||||
7
GANR
20.03.13
✎
14:34
|
callsLast5Min - ключевое слово в (4)
|
|||||||||||||
8
sunson
20.03.13
✎
14:35
|
(4) Это я так понимаю методы консоли кластера?
|
|||||||||||||
9
mistеr
20.03.13
✎
14:36
|
(0) Статистика с прокси надежнее. :) Подкиньте руководству идею, пусть админ отдувается.
|
|||||||||||||
10
GANR
20.03.13
✎
14:36
|
(8) можно сказать так, только языком 1С
|
|||||||||||||
11
sunson
20.03.13
✎
14:36
|
Вообщем-то вопрос не по каждому пользователю, а исключительно в целом по базе. Т.е. суммарный поток обращений пользователя к серверу в течение дня.
|
|||||||||||||
12
sunson
20.03.13
✎
14:37
|
(9) хороший вариант)))
|
|||||||||||||
13
GANR
20.03.13
✎
14:39
|
СерверКластер = СокрЛП(ВыборкаКластер.ИмяСервераКластер);
ПортКластер = СокрЛП(ВыборкаКластер.ПортКластер); ПользовательКластер = СокрЛП(ВыборкаКластер.ПользовательКластер); ПарольКластер = СокрЛП(ВыборкаКластер.ПарольКластер); Агент = Коннектор.ConnectAgent(СерверКластер + ":" + ПортКластер); Выборка = ВыборкаКластер.Выбрать(); Кластеры = Агент.GetClusters(); Для Каждого Кластер Из Кластеры Цикл // получим и переберем процессы кластера Агент.Authenticate(Кластер, ПользовательКластер, ПарольКластер); Сеансы = Агент.GetSessions(Кластер); Для Каждого Сеанс Из Сеансы Цикл ОтборБазы.База = Сеанс.InfoBase.Name; Выборка.Сбросить(); Если Выборка.НайтиСледующий(ОтборБазы) Тогда Если Сеанс.userName = Выборка.ПользовательБазы И Сеанс.AppID = "1CV8" Тогда ОписаниеСоединения = Сеанс.Connection; ConnID = ОписаниеСоединения.ConnID; ConnectedAt = ОписаниеСоединения.ConnectedAt; callsLast5Min = Сеанс.callsLast5Min; СинхронизацияНачалаСеансов.Вставить(ConnID, ConnectedAt); МинимальноеЧислоПерекличек = ?(ЗначениеЗаполнено(Выборка.ПерекличекЗа5Минут), Выборка.ПерекличекЗа5Минут, 25); СоединениеНужноОтключить = callsLast5Min <= МинимальноеЧислоПерекличек; Если СоединениеНужноОтключить = Истина Тогда ИндексДС = 0; Пока СоединениеНужноОтключить = Истина И ИндексДС <= ВсеПятиминуткиСеансовСервер.Количество() - 1 Цикл ПятиминуткаСеансов = ВсеПятиминуткиСеансовСервер[ИндексДС]; ИндексТС = 0; Пока СоединениеНужноОтключить = Истина И ИндексТС <= ПятиминуткаСеансов.Количество() - 1 Цикл СоединениеНужноОтключить = ConnID <> ПятиминуткаСеансов[ИндексТС]; ИндексТС = ИндексТС + 1; КонецЦикла; ИндексДС = ИндексДС + 1; КонецЦикла; Иначе ПоследняяПятиминутка.Добавить(ConnID); КонецЕсли; Если СоединениеНужноОтключить = Истина Тогда ОписаниеПроцесса = Сеанс.Process; ПортПроцесса = СтрЗаменить(Строка(ОписаниеПроцесса.MainPort), Символы.НПП, ""); РабПроц = Коннектор.ConnectWorkingProcess(ОписаниеПроцесса.HostName + ":" + ПортПроцесса); // логин админа кластера РабПроц.AuthenticateAdmin(ПользовательКластер, ПарольКластер); // логин админа базы РабПроц.AddAuthentication(Выборка.ПользовательОтключение, Выборка.ПарольОтключение); ИнформационнаяБаза = РабПроц.CreateInfoBaseInfo(); ИнформационнаяБаза.Name = Сеанс.InfoBase.Name; НаборСоединений = РабПроц.GetInfoBaseConnections(ИнформационнаяБаза); Для Каждого Соединение Из НаборСоединений Цикл Если ConnID = Соединение.ConnID Тогда Попытка РабПроц.Disconnect(Соединение); ЗаписьЖурналаРегистрации("Обновление статистики активности сеансов", УровеньЖурналаРегистрации.Предупреждение, МД_РегламентноеЗадание, , "Сеанс " + ConnID + " принудительно отключен фоновым заданием"); Исключение ЗаписьЖурналаРегистрации("Обновление статистики активности сеансов", УровеньЖурналаРегистрации.Ошибка, МД_РегламентноеЗадание, , "Сеанс " + ConnID + " не удалось отключить фоновым заданием " + ОписаниеОшибки()); КонецПопытки; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; Это к (11) |
|||||||||||||
14
GANR
20.03.13
✎
14:41
|
+(13) это перестало работать после перехода на платформу где-то 8.2.14
|
|||||||||||||
15
sunson
20.03.13
✎
14:42
|
(14) А сколько в кластере серверов?
|
|||||||||||||
16
sunson
20.03.13
✎
14:43
|
(9) но в общем-то админ не дурак отбрыкается сто пудово)
|
|||||||||||||
17
GANR
20.03.13
✎
14:44
|
(15) дальше - справка
|
|||||||||||||
18
Kreont
20.03.13
✎
14:47
|
(9) в самую точку что надо анализировать :)
|
|||||||||||||
19
Kreont
20.03.13
✎
14:49
|
Но такой отчет очень зависит от "вида" бухгалтера. Если это бухгалтер-оператор, задание котрого внести N-документов, тогда есть смысл, для других "думающих" и смотрящих отчеты, звонящих там по актам сверок и т.п. этот отчет ниче не даст.
другое |
|||||||||||||
20
GANR
20.03.13
✎
14:50
|
(9) вряд ли подойдет, так как (6) и может с сетевыми папками работа идти
|
|||||||||||||
21
wowik
20.03.13
✎
14:58
|
Можно средствами 1С |
|||||||||||||
22
GANR
20.03.13
✎
15:22
|
(21) А если пользователь только формирует отчеты?
|
|||||||||||||
23
sunson
20.03.13
✎
15:32
|
(22) (21) да, тут скорее подходит считывать с кластера периодически количество данных которые получил пользователь, суммировать по пользователям и складывать в ТЗ
|
|||||||||||||
24
GANR
20.03.13
✎
15:36
|
(23) правильный вывод!
|
|||||||||||||
25
sunson
20.03.13
✎
15:42
|
(24) Наверняка можно средствами SQL получить это быстрее. Вот бы теперь придумать КАК)))
|
|||||||||||||
26
GANR
20.03.13
✎
16:53
|
(25) Многие 1С-вские данные в базе на MS SQL хранятся в формате image и binary и как их распаковывать - мало кто знает.
|
|||||||||||||
27
GANR
20.03.13
✎
16:55
|
(26) может стать затыком на пути (25)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |