Вдогонку, если текст сообщения эвента содержит кавычки то результат будет такой.
Отправляем
`1` '2' "3"
Получаем
'2' 3
то есть пропадает полностью 1 с кавычками и парные кавычки вокруг 3
Вдогонку, если текст сообщения эвента содержит кавычки то результат будет такой.
Отправляем
`1` '2' "3"
Получаем
'2' 3
то есть пропадает полностью 1 с кавычками и парные кавычки вокруг 3
В моем случае файл вообще не создается если в команде есть кириллица
/bin/echo "Текст Аларма: %t [%S] %n (%a): %m" > $(mktemp /path/to/file-XXXXXXX)
Без кириллицы создается нормально.
В шелле работает и так и так.
Локаль ru_RU.UTF-8
@victor said in NetXMS 2.0.3 released:
- Text2reach SMS driver improved
Hi Viktor!
It's by design now that driver doing 3 posts to service?
I using this driver for my selfwritten local SMS service (not for the real Text2reach service), and I see now each SMS coming at 3 times.
PS Nevermind, I have checked driver sources and adapted my SMS service according to.
JFYI: nxmc 'Send SMS' tool always returns 'SMS sent successfully' response, even when driver has detected an error from service.
Ага, спасибо, так и выкрутился!
Есть DCI у которого в порогах прописан скрипт который высчитывает % между предыдущим и новым значением и в зависимости от полученного значения возвращает маркер для создания эвента когда это необходимо. Все нормально работает. Но вот хотелось бы как-то еще передавать предыдущее значение в сообщение эвента. Не нашел ничего похожего на что-то типа GetEventObjectByName чтобы в скрипте нужному эвенту подменить сообщение через SetEventParameter.
Пороговый скрипт такой:
mbytes = $1;
inst = $dci->instance;
previous_mbytes = GetDCIValueByDescription($node,"MSSQL database mbytes size (".inst.")");
if(previous_mbytes == null)
return 0;
diffpercent = ((mbytes*100)/previous_mbytes)-100;
if(diffpercent <=-10)
return -1;
return 0;
@kozlov_ao said in Непонятки в dbquery.nsm:
.. если надо % вычисять, то создавай еще один DCI, который будет получать общий размер БД и потом работай с ним через GetDCIValueByName и ему подобных (https://wiki.netxms.org/wiki/NXSL_Function_Reference).
так и сделал - 2 DCi с одинаковыми запросами вытягивающие размер БД. В одном из них скрипт пересчитывает в процентный diff вытягивая из другого предыдущий размер. Очередность пулинга DCI задал жестко через шедулер. Вот такой получился костыль.
@alk said in Непонятки в dbquery.nsm:
Самый простой способ – использовать Encrypted password (на самом деле он obfuscated, конечно):
Точно, что-то я про него и забыл. Спасибо!
Попутно еще один вопрос.
В DCI складываю текущий размер какой-либо базы данных в MBytes. Необходимо установить diff threshold который бы отслеживал порог увеличения в процентах от предыдущего значения. Как лучше это сделать?
Есть ли в Transformation возможность получить предыдущее значение?
Разобрался с проблемой 2 - в реале значение mypassword (см выше) содержало символ решетки #, и видать поэтому пароль обрезался при чтении такого полиси, поскольку тут это знак коммента.
Отсюда вопрос - как экранировать такой символ в полиси?
Проблема 1 (mysql) ушла на 2.0.2.
Проблема 2 без изменений.
Имеем 2.0.1 сервер и агент. Оба виндовые( сервер win2003, агент win7sp1).
Задача - складывать в DCI размер определенной базы данных.
SubAgent = dbquery.nsm
*DBQUERY
Database = id=mystat;driver=mysql.ddr;server=10.10.0.1;dbname=mystat;login=mylogin;password=mypassword
В результате в логе имеем:
[25-Jan-2016 14:44:39.922] [ERROR] DB Library: Unable to load database driver module "mysql.ddr": The specified module could not be found.
При этом <папка агента>\bin\mysql.ddr на месте.
Почемуто - не видит этот модуль.
SubAgent = dbquery.nsm
*DBQUERY
Database = id=master;driver=mssql.ddr;server=10.10.0.2;dbname=master;login=newlogin;password=newpass
В логе получаем
[25-Jan-2016 14:40:47.505] [WARN ] DBQUERY: cannot connect to database master ([Microsoft][SQL Server Native Client 10.0][SQL Server]Login failed for user 'newlogin'.)
при этом такой юзер в базе прописан и без проблем доступается через студио.
Спасибо, работает!
А как при такой формуле определить делту в минутах?
Чего-то у меня значения дельты получаются не верны.
Скрипт такой
rawdatetime = string($1);
if(length(rawdatetime) >= 14)
{
starttime_year = format(substr(rawdatetime,1,4),1,0);
starttime_mon = format(substr(rawdatetime,5,2),1,0);
starttime_mday = format(substr(rawdatetime,7,2),1,0);
starttime_hour = format(substr(rawdatetime,9,2),1,0);
starttime_min = format(substr(rawdatetime,11,2),1,0);
trace(0,"PHP start time is " . starttime_year . "-" . string(starttime_mon) . "-" . starttime_mday . " " . starttime_hour . ":" . starttime_min);
starttime_ts = starttime_min+(starttime_hour*60)+(starttime_mday*starttime_hour*60)+(starttime_mon*starttime_mday*starttime_hour*60)+(starttime_year*starttime_mon*starttime_mday*starttime_hour*60);
trace(0,"starttime_ts is " . starttime_ts);
now = localtime();
now_year = now->year;
now_mon = now->mon+1;
now_mday = now->mday;
now_hour = now->hour;
now_min = now->min;
trace(0,"Now time is " . now_year . "-" . now_mon . "-" . now_mday . " " . now_hour . ":" . now_min);
now_ts = now_min+(now_hour*60)+(now_mday*now_hour*60)+(now_mon*now_mday*now_hour*60)+(now_year*now_mon*now_mday*now_hour*60);
trace(0,"now_ts is " . now_ts);
delta_min = now_ts - starttime_ts;
trace(0,"delta_min is " . delta_min);
return delta_min;
}
return false;
Результат:
[03-Jan-2016 12:52:39.587] [INFO ] PHP start time is 2016-1-3 10:30
[03-Jan-2016 12:52:39.587] [INFO ] starttime_ts is 3633030
[03-Jan-2016 12:52:39.587] [INFO ] Now time is 2016-1-3 12:52
[03-Jan-2016 12:52:39.587] [INFO ] now_ts is 4359652
[03-Jan-2016 12:52:39.587] [INFO ] delta_min is 726622
Или это абстрактная величина, которая будет едина для интервала? К примеру мне нужно генерить эвент когда дельта больше 60 реальных минут.
@alk said in перевод строки в time:
Одна из проблем в синтаксисе:
tm_datetime<-year = int32(substr(rawdatetime,1,4));
должно быть
tm_datetime->year = int32(substr(rawdatetime,1,4));
Так тоже ругался
Error 15 in line 3: Unknown object's attribute
@alk said in перевод строки в time:
Но основная проблема – в nxsl сейчас нет поддержки функции mktime.
точно, получается тогда пока никак. 
Задача отлавливать подвисшие CLI php скрипты работающих на Win2003.
Process.CPUTime не подошел - если скрипт подвис и ничего не делает, то возвращаются значения 0.
Решил попробовать через
WMI.Query(root\CIMV2,\"select * FROM Win32_Process WHERE Name = 'php.exe'\", CreationDate)
Столкнулся с проблемой как сконвертировать значения этого запроса в объект time чтобы потом просчитать количество секунд которое прошло с начала старта? Значения приходят в виде 20160101235959.123123
Пробовал парсить как строку
rawdatetime = string($1);
tm_datetime = localtime();
tm_datetime<-year = int32(substr(rawdatetime,1,4));
tm_datetime<-mon = int32(substr(rawdatetime,5,2));
tm_datetime<-mday = int32(substr(rawdatetime,7,2));
tm_datetime<-hour = int32(substr(rawdatetime,9,2));
tm_datetime<-min = int32(substr(rawdatetime,11,2));
tm_datetime<-sec = int32(substr(rawdatetime,13,2));
но ругается на
Error 4 in line 3: Bad arithmetic conversion
No, thank you! Happy New Year!
@victor said in How to find out the event parameters?:
...so for example you can replace %4 with %{currentValue} in threshold violation event processing.
just some clarification - correct format is %<currentValue>
missed kannel.sms driver on Windows installation. Checked fresh install on windows7 and windows 2003
No such file in bin directory
upd: dummy.sms is absent too
upd2: Can anyone attach missed files here?