Добрый день!
Имеется скрипт
subnets = [];
for (p : $node.parents) if (classof(p) == "Subnet") subnets.append(p.alias);
$event.addParameter("subnets", subnets.join(", "));
return true;Прицепляющий alias подсети к ивенту SYS_NODE_ADDED
В EPP созданы 2 правила на тот же ивент, отличающиеся действием и Filter скриптами
1-ый вроде как должен фильтровать ивенты, где в alias нет dc и ts
sub main() {
subnet = tolower($event->subnets);
// Быстрая проверка по ключевым словам
if(contains(subnet, "dc") ||
contains(subnet, "ts")) {
nxlog(4, "FILTER: Blocked DC subnet - " . $event->subnets);
return false;
}
return true;
}2-ой - где alias содержит dc и ts
sub main() {
subnet = tolower($event->subnets);
// Быстрая проверка по ключевым словам
if(contains(subnet, "dc") ||
contains(subnet, "ts")) {
return true;
}
nxlog(4, "FILTER: Blocked Users subnet - " . $event->subnets);
return false;
}
Если в ивенте действительно ЕСТЬ dc или ts - приходит 1 ивент в нужный топик. Но если в alias нет dc\ts - алармы сыпятся в оба топика, что на 1-ый фильтр, что на второй
Вот пример такого ивента
{
"id": 180591103,
"rootId": 0,
"code": 1,
"name": "SYS_NODE_ADDED",
"timestamp": 1769568582,
"originTimestamp": 1769568582,
"origin": 0,
"source": 1051263,
"zone": 0,
"dci": 0,
"severity": 0,
"message": "Node added",
"lastAlarmKey": "",
"lastAlarmMessage": "",
"tags": [
"NewObject"
],
"parameters": [
{
"name": "nodeOrigin",
"value": "1"
},
{
"name": "subnets",
"value": "KRS_Gaydashovka_UC"
}
]
}Что я сделал не так с этими фильтрами? ::)
contains это метод строки. Функции с таким именем нет. По идее в лог сервера должны сыпаться ошибки "Function not found" и создаваться ивенты SYS_SCRIPT_ERROR.
А надо так:
subnet.contains("dc")
А он давал такую ошибку, да. Но на линию 2, сейчас там
subnet = toLowerCase($event.subnets);Собственно в таком виде
sub main() {
subnet_dc = toLowerCase($event.subnets);
// Быстрая проверка по ключевым словам
if(subnet_dc.contains("dc") ||
subnet_dc.contains("ts")) {
return true;
}
return false;
}Все равно не работает корректно - уведомления продолжают идти в оба топика. Ошибки видел на линию 2 Function not found
Если верить https://netxms.org/documentation/nxsl-latest/#class-event parameterNames существует в виде array - поиск по нему в таком виде вообще возможен? Или я изначально накосячил
Референсом было вот это
sub main() {
packageName = toLowerCase($alarm.key);
// Быстрая проверка по ключевым словам
if(packageName.contains("7-zip") ||
packageName.contains("adobe reader")) {
nxlog(4, "FILTER: Blocked package - " . $alarm->key);
return false;
}
return true;
}Как оказалось по логам - оно так же не работает, жалуясь Function or operation argument is not an object на линию
packageName = toLowerCase($alarm.key);