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 - slako

#1
Вдогонку, если текст сообщения эвента содержит кавычки то результат будет такой.

Отправляем
`1` '2' "3"
Получаем
'2' 3
то есть пропадает полностью 1 с кавычками и парные кавычки вокруг 3
#2
В моем случае файл вообще не создается если в команде есть кириллица
Quote/bin/echo "Текст Аларма: %t [%S] %n (%a): %m" > $(mktemp /path/to/file-XXXXXXX)
Без кириллицы создается нормально.
В шелле работает и так и так.
Локаль ru_RU.UTF-8
#3
Announcements / Re: NetXMS 2.0.3 released
May 25, 2016, 06:57:34 AM
Quote from: Victor Kirhenshtein on March 30, 2016, 06:43:10 PM
- 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.
#4
Ага, спасибо, так и выкрутился!
#5
Есть 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;
#6
Quote from: kozlov_ao on February 08, 2016, 10:14:06 AM
.. если надо % вычисять, то создавай еще один DCI, который будет получать общий размер БД и потом работай с ним через GetDCIValueByName и ему подобных (https://wiki.netxms.org/wiki/NXSL_Function_Reference).
так и сделал - 2 DCi с одинаковыми запросами вытягивающие размер БД. В одном из них скрипт пересчитывает в процентный diff вытягивая из другого предыдущий размер. Очередность пулинга DCI задал жестко через шедулер. Вот такой получился костыль.

Quote from: Alex Kirhenshtein on February 08, 2016, 10:40:25 AM
Самый простой способ – использовать Encrypted password (на самом деле он obfuscated, конечно):
Точно, что-то я про него и забыл. Спасибо!
#7
Попутно еще один вопрос.
В DCI складываю текущий размер какой-либо базы данных в MBytes. Необходимо установить diff threshold который бы отслеживал порог увеличения в процентах от предыдущего значения. Как лучше это сделать?
Есть ли в Transformation возможность получить предыдущее значение?
#8
Разобрался с проблемой 2 - в реале значение mypassword (см выше) содержало символ решетки #, и видать поэтому пароль обрезался при чтении такого полиси, поскольку тут это знак коммента.
Отсюда вопрос - как экранировать такой символ в полиси?
#9
Проблема 1 (mysql) ушла на 2.0.2.
Проблема 2 без изменений.
#10
Имеем 2.0.1 сервер и агент. Оба виндовые( сервер win2003, агент win7sp1).
Задача - складывать в DCI размер определенной базы данных.
1. Конфиг агента подгружаем с сервера плюс добавляем полиси подгрузки нужного субагента:
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 на месте.
Почемуто - не видит этот модуль.

2. Эксперимент с другой (MSSQL 2005) базой через другой полиси:
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'.)

при этом такой юзер в базе прописан и без проблем доступается через студио.
#11
Спасибо, работает!
#12
А как при такой формуле определить делту в минутах?
Чего-то у меня значения дельты получаются не верны.
Скрипт такой
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 реальных минут.
#13
Quote from: Alex Kirhenshtein on January 01, 2016, 01:23:56 PM
Одна из проблем в синтаксисе:

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


Quote from: Alex Kirhenshtein on January 01, 2016, 01:23:56 PM
Но основная проблема – в nxsl сейчас нет поддержки функции mktime.
точно, получается тогда пока никак.  :(
#14
Задача отлавливать подвисшие 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
#15
Announcements / Re: NetXMS 2.0-RC2 released
December 31, 2015, 10:20:46 AM
No, thank you! Happy New Year!