вопрос по отчётам и макросам

Started by semi-liquid, April 07, 2022, 10:54:48 AM

Previous topic - Next topic

semi-liquid

Добрый день, подскажите пожалуйста два момента
1 настроил отправку сообщений по разным событиям, но не нашёл какой надо макрос использовать чтобы в отчете присылалось ещё и имя пользователя под которым произошла беда. Кто-нибудь может подсказать?
2 Не работают отчёты, выдает ошибку (в приложении)
netXMS 4.0.227, на виндовом сервере 2012

Filipp Sudanov

1) А о каких, например, событиях идет речь? Просто большинство событий никак не связано с тем, залогинен ли кто-нибудь в NetXMS. Может быть, что в данный момент вообще никто не залогинен, может быть что залогинено несколько юзеров.

2) В Services в Windows должен быть сервис NetXMS Reporting Server. Как он себя чувствует, стартует ли? Ему для работы нужна Java, 11 версии или старше.

semi-liquid

1 о любых, мне нужен логин не пользователя нетхмс, а пользака компа. То есть идет перенагрузка на цп, мне приходит письмо мол на таком компе в такое время такая беда. И вот надо ещё чтобы было имя пользователя того компьютера приходило. Агент же передаёт эту инфу, значит и в отчёт это как-то закинуть можно, да?

2нет такой службы, она как-то отдельно ставится? я чет не нашел под винду, видел что под убунту ставится отдельная какая-то штука.

Filipp Sudanov

1) Для начала нужно как-то собирать это значение. Например, сделаем DCI, Origin "Internal", Parameter "Dummy". А в трансформационном скрипте этого DCI сделаем все что нужно (то же самое можно было сделать с помощью DCI c origin "script"):

list = $node->readAgentList("System.ActiveUserSessions");
currentlyLoggedUser = SplitString(list[0], "\"")[1];
$node->setCustomAttribute("currentlyLoggedUser", currentlyLoggedUser);
return currentlyLoggedUser;


Для простоты скрипт сохраняет имя юзера в custom attribute на ноде - поэтому историю этого DCI можно даже не хранить.
И теперь можно пользоваться макросом %{currentlyLoggedUser} - там будет имя юзера.


Альтернативный путь - макрос %[script_name] и в этом скрипте можно находить нужный DCI и брать его последнее значение.

2) Репортинг на windows ставится инсталлятором сервера, там есть отдельная галочка.


semi-liquid

1 так система же уже сама имя пользака забирает, в user session
Неужто чтобы оттуда вытащить инфу в отчёт надо скрипт использовать? (Я просто половину слов не понял что было в вашем ответе, поэтому ищу лёгкие пути)

2 видимо проглядел, завтра попробую сверху накатить, спасибо)

semi-liquid

поставил репорт сервер, в конфигураторе он включен, в службах работает, но при переходе в отчёты - ничего(

Filipp Sudanov

Все так и должно быть. Механизм репортинга - это лишь интеграция с Jasper Reports. А для Jasper Reports нужны .jar файлы с описанием отчетов, там есть какая-то Jasper Studio в которой можно эти .jar файлы создавать.

semi-liquid

хорошо, это посмотрю, так а пользователя из user sessions без использования скриптов и вот этого всего можно как-то по простому вытащить?

Filipp Sudanov


semi-liquid

тогда видимо последний вопрос по вашему ответу в теме #3
есть где-то это в картинках и более подробно? Я из всего что там написано нашёл только DCI Summary Tables и это мало что мне дало :(

Nem0


Для России тема с JasperStudio можно  сказать закрыта - они не работают больше здесь и нас блочат

Access Denied

You don't have permission to access "http://www.jaspersoft.com/" on this server.
Reference #18.df8e655f.1650666488.118285b4


Грузил и пробовал его в октябре-ноябре прошлого года когда вопрос вставал. Пробная версия на 30 дней.  Результат не получился ни вразумительным ни вообще каким бы то ни было. Плюнул и забыл про него.

В итоге под себя и своих боссов писал на связке Python + Matplot + WeasyPrint + Pandas
Можно забирать данные из webapi но я предпочел напрямую из базы. Сложностей никаких нет. Ну кроме случаев когда хочется запрос в базу сделать с хитрыми группировками и прочими плюшками.  Работает на той же машине что и сервер. Меня устраивает. Если потрудиться то можно сделать все достаточно быстро и добротно. Можно еще и отдельный веб интерфейс прикрутить .... дальше полет фантазии безграничен. 

semi-liquid

даф иг с ними с отчётами, в целом и каспер в отчёты умеет) но спасибо за инфу)
мне бы понять таки как в письмо воткнуть имя пользователя)

Victor Kirhenshtein

Quote from: semi-liquid on April 25, 2022, 09:11:58 AM
мне бы понять таки как в письмо воткнуть имя пользователя)

Там выше предлагался вариант со скриптом. Его можно даже еще упростить и просто вставлять результат в сообщение, без дополнительных атрибутов:


list = $node->readAgentList("System.ActiveUserSessions");
return SplitString(list[0], "\"")[1];


и в сообщении использовать макрос %{script}, где script - это имя скрипта в библиотеке.

semi-liquid

проблема в том что я в этом предложении понимаю отдельные буквы) а куда лезть и что делать так и не понял.
Можете пожалуйста мне разжевать что здесь сказано? Дальше обещаю что разберусь сам)
"Например, сделаем DCI, Origin "Internal", Parameter "Dummy". " - где делать DCI (куда заходить, что нажимать) и все эти параметры и ориджины, сам скрипт всё в одном месте делается?
То есть я понимаю что дальше реагирование прописывается отдельно. Но всё что я нашёл с подписью DCI не похоже на то что надо.

Filipp Sudanov

Давайте начнем потихнечку. Судя по скриншотам ноды в системе у вас уже заведены (ну там SRV003 и все остальные).
На ноде нажимаем правую кнопку мыши, там есть Data Collection Configuration. Заходим. Это место, где конфигурируется сбор данных с ноды. Там список, каждая строка в этом списке это Data Collection Item - элемент сбора данных.
На списке правую кнопку мыши - New parameter. Там-то и ставим Origin "Internal", Parameter "Dummy". Dummy - это просто штука, которая всегда возвращает 0 - здесь значение нам не нужно, потому что мы его будет в transformation script добывать.
Слева в этом диалоге выбираем Transformation (третий пункт сверху). Там пишем код:

list = $node->readAgentList("System.ActiveUserSessions");
currentlyLoggedUser = SplitString(list[0], "\"")[1];
$node->setCustomAttribute("currentlyLoggedUser", currentlyLoggedUser);

Код получает с агента на ноде список залогиненных юзеров. Из этого списка мы просто берем первого. И сохраняем в custom attribute на ноде.
Нажимаем Apply and Close. Ждем пока данные соберутся.
На ноде нажимаем правую кнопку мыши, Properties, там слева Custom attributes. Если все хорошо, то там в списке должен быть currentlyLoggedUser с именем юзера.

Пишите, что получилось, что нет.