News:

We really need your input in this questionnaire

Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - VSS

#16
Windows / Re: Agent development - best-practice
May 24, 2016, 06:39:48 PM
Quote from: Victor Kirhenshtein on May 24, 2016, 05:38:16 PM
Hi,

you best bet is to take any existing subagent as an example and ask questions here (src/agent/subagents/ecs for example - it is very simple subagent and structure should be easy to understand). You can also purchase training and/or support for your developers from Raden Solutions if you need premium support.

Best regards,
Victor

Thank you! We will start and look at it!
#17
Windows / Agent development - best-practice
May 24, 2016, 05:28:17 PM
Hello Dear NetXMS community!

We would like to develop agent with special functions for our needs. Is there any best-practice for such task?

As we can see there a few questions without answer on a forum...
#18
Quote from: Victor Kirhenshtein on August 18, 2015, 09:21:15 AM
Ставить знак вопроса. Первый параметр подставится в первый знак вопроса, второй во второй, и т.д. Например:

SELECT STUFF ( (SELECT top 5 ';' + objid + ',' + action + ',' + CONVERT(varchar(10),DATEDIFF(s,'1970-01-01', DATEADD(second, DATEDIFF(second, GETDATE(), GETUTCDATE()), date))) FROM .... WHERE ... condition_column=?

Спасибо за подсказку. Попробовали, но из наблюдений параметр не передается в запрос.

изменили запрос на:
Quote
SELECT STUFF ( (SELECT top 5 ';' + objid + ',' + action + ',' + CONVERT(varchar(10),DATEDIFF(s,'1970-01-01', DATEADD(second, DATEDIFF(second, GETDATE(), GETUTCDATE()), date))) FROM ... where ... and objid in (?) ORDER BY ...

в Data Collection вызываем его как  checksensor(1)

но в журнале появляется ошибка:
Quote
[ERROR] SQL query failed (Query = "SELECT STUFF ( (SELECT top 5 ';' + objid + ',' + action + ',' + CONVERT(varchar(10),DATEDIFF(s,'1970-01-01', DATEADD(second, DATEDIFF(second, GETDATE(), GETUTCDATE()), date))) FROM ... where ... and objid in (?) ORDER BY ... "): [Microsoft][SQL Server Native Client 10.0]COUNT field incorrect or syntax error

В конфиги он создается как:

QuoteConfigurableQuery = checksensor:testdb:test query:SELECT STUFF ( (SELECT top 5 ';' + objid + ',' + action + ',' + CONVERT(varchar(10),DATEDIFF(s,'1970-01-01', DATEADD(second, DATEDIFF(second, GETDATE(), GETUTCDATE()), date))) FROM ... where ... and objid in (?) ORDER BY ....'')

Версия: 1.2.14.
#19
Quote from: Victor Kirhenshtein on August 06, 2015, 01:19:27 PM
Попробуйте прописать в конфиге агента как ConfigurableQuery - должен появится новый параметр checksensor к которому можно будет обратится как checksensor(1)

Спасибо за подсказку, изменили тип запроса на ConfigurableQuery. Теперь запрос можно вызвать как checksensor(1).

Но каким образом описать ПАРАМЕТР в самом запросе, такой вариант не сработал:

QuoteSELECT STUFF ( (SELECT top 5 ';' + objid + ',' + action + ',' + CONVERT(varchar(10),DATEDIFF(s,'1970-01-01', DATEADD(second, DATEDIFF(second, GETDATE(), GETUTCDATE()), date))) FROM .... where ... param1

Т.е. непонятно как в запросе описать сам параметр?
#20
Коллеги, у кого есть идеи ??? Спасибо!
#21
Всем привет!

Попробовали оптимизировать работу с запросами и добавить параметр как описано в анонсе и документации:
https://www.netxms.org/forum/announcements/netxms-1-2-14-released/msg13923/#msg13923

Но что-то не получилось в логе:

Quote[18-Jun-2015 17:50:42.538] [DEBUG] [session:0] Received message CMD_GET_PARAMETER
[18-Jun-2015 17:50:42.538] [DEBUG] [session:0] Requesting parameter "DB.QueryResult(checksensor(1))"
[18-Jun-2015 17:50:42.538] [DEBUG] [session:0] GetParameterValue(): result is 404 (UNKNOWN_PARAMETER)
[18-Jun-2015 17:50:42.538] [DEBUG] [session:0] Sending message CMD_REQUEST_COMPLETED (size 32)
[18-Jun-2015 17:50:43.569] [DEBUG] [session:0] Message dump:
  ** 000300000000001000000A2D00000000
  ** code=0x0003 (CMD_KEEPALIVE) flags=0x0000 id=2605 size=16 numFields=0

Запрос задан как:

QuoteQuery = checksensor:dbname:check the status of sensor:SELECT STUFF ( (SELECT top 5 ';' + objid + ',' + action + ',' + CONVERT(varchar(10),DATEDIFF(s,'1970-01-01', DATEADD(second, DATEDIFF(second, GETDATE(), GETUTCDATE()), date))) FROM .... where ... param1

Вызывается как:

QuoteDB.QueryResult(checksensor(1))

Версия 1.2.14. Подскажите, пожалуйста, что может быть не так?
#22
Quote from: Victor Kirhenshtein on June 18, 2015, 03:18:43 PM
Параметр ConfigurableQuery создает запрос который выполняется только по запросу с сервера. Обычно он используется для создания новых метрик с параметрами. Если вам нужен запрос, который выполняется агентом в фоне, то надо использовать Query.

Понял, спасибо! А случайно в версии 1.2.17 не снято ограничение на длину запросу в DB.Query?
#23
Всем привет!

Решая одну из задач был создан

QuoteConfigurableQuery = checksensor:dbname:check the status of sensor:SELECT STUFF ( (SELECT top 5 ';' + objid + ',' + action + ',' + CONVERT(varchar(10),DATEDIFF(s,'1970-01-01', DATEADD(second, DATEDIFF(second, GETDATE(), GETUTCDATE()), date))) FROM ....

для работы с результатом был также сделан Transformation script.

Проблема в том, что DB.QueryResult(checksensor) не работает. В журнале следующая ошибка:

Quote[18-Jun-2015 16:41:52.497] [DEBUG] [session:0] Received message CMD_GET_PARAMETER
[18-Jun-2015 16:41:52.497] [DEBUG] [session:0] Requesting parameter "DB.QueryResult(checksensor)"
[18-Jun-2015 16:41:52.497] [DEBUG] [session:0] GetParameterValue(): result is 500 (INTERNAL_ERROR)
[18-Jun-2015 16:41:52.497] [DEBUG] [session:0] Sending message CMD_REQUEST_COMPLETED (size 32)
[18-Jun-2015 16:41:52.513] [DEBUG] [session:0] Message dump:
  ** 00410000000000580000010200000001
  ** 00000055016500730000003600440042
  ** 002E0051007500650072007900520065
  ** 00730075006C00740028006300680065
  ** 0063006B00730065006E0073006F0072
  ** 0029006300290029
  ** code=0x0041 (CMD_GET_PARAMETER) flags=0x0000 id=258 size=88 numFields=1
  ** [    85] STRING "DB.QueryResult(checksensor)"

DCI в списке остается зеленым. Длинна запроса 287 символов. Версия 1.2.14.

Спасибо за помощь!
#24
Quote from: Victor Kirhenshtein on June 18, 2015, 02:33:45 PM
Только если использовать какую-то внешнюю утилиту для отсылки писем вместо встроенного SMTP клиента.

Понятно, спасибо. Осталось теперь придумать как еще к этому всему привязать вложение картинки, которая берется с сервера...
#25
Quote from: kozlov_ao on June 18, 2015, 10:58:38 AM
ну тогда тебе 2 DCI надо:
1. получает последнее значение для ON
2. получает последнее значение для OFF и в Transformation Script вычислять разницу между $1 и значением из п.1

Спасибо, будем пробовать!

Я же правильно понял что из DBQuery невозможно вернуть несколько результатов, т.е. в скрипте есть только $1?
#26
Quote from: kozlov_ao on June 18, 2015, 09:38:00 AM
ну.. интервал Х = периоду опроса, делаешь запрос.. если последняя запись старее чем "интервал Х" - выплевываем аларм. Такой вариант не подходит? или нужно сравнение делать именно между существующими записями?

да, сравнение нужно делать именно между существующими записями и получается что опрос нужно делать для записей у которых разное поле значение = "ON" и значение = "OFF".

Появилась идея сделать запрос в котором объединить несколько полей в один результат а потом как-то выкрутить при помощи Transformation скрипта .... ?
#27
Quote from: kozlov_ao on June 18, 2015, 09:10:04 AM
Возможно я не до конца понял, что ты хочешь...
Данный запрос вернет время добавления записи в секундах. Их и смотришь. Куда точнее и реальнее то? :)

Попробую расписать поподробнее. Есть таблица журнала в нее постоянно сыпятся события. Для событий есть поля Тип, Номер объекта, Значение события, Время возникновения . Задача стоит в том, что надо проверить что между двумя последними событиями в таблице для тип = "..." и номера = "..." и значение = "..." разница во времени возникновения не превысила интервал Х.
#28
Quote from: kozlov_ao on June 18, 2015, 08:52:51 AM
Quoteorder by record_timestamp desc
сортирует по дате

Quotelimit 1
вернет только одну запись

вот и получается последняя добавленная запись.

По поводу частоты. Реши для себя, какой промежуток между добавлениями для тебя критичен, с такой частотой и дергай.

Спасибо с частотой понятно, тут надо искать оптимальное значение, но похоже придется брать 1 секунда ведь чаще нельзя..

А по поводу последней записи я имел ввиду реальную последнюю запись, т.е. при выборке проверить что с прошлого раза это запись точно последняя, например, по индексу. Но похоже этого сделать не получится. Пока не нашел как вообще вернуть несколько результатов в одном DBQuery.
#29
Всем привет!

Есть ли возможность добавить определенное вложение при рассылке уведомления по почте?

P.S. планируем реализовать посылку вместе с уведомлением картинки, переданной с сервера.
#30
Quote from: Alex Kirhenshtein on June 17, 2015, 03:30:50 PM
В данных, которые лежат в таблице – в них есть время добавления записи?

Да специально добавили дату, но вопрос в том как определить, что DBQuery вернул именно последнюю запись. Т.е. получается надо где-то хранить или время последнего получения или номер или количество объектов.

И еще не понятно как часто организовать опрос... ведь данные сыпятся в БД достаточно часто!