Filtering scripts в EPP

Started by Argonauts, January 28, 2026, 05:19:35 AM

Previous topic - Next topic

Argonauts

Добрый день!
Имеется скрипт
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"
    }
  ]
}
Что я сделал не так с этими фильтрами? ::)

Filipp Sudanov

contains это метод строки. Функции с таким именем нет. По идее в лог сервера должны сыпаться ошибки "Function not found" и создаваться ивенты SYS_SCRIPT_ERROR.

А надо так:

subnet.contains("dc")