Здравствуйте NetXMS Users - Russian!
21 сентября 2006 г. вы писали.
>> Возникло желание иметь еще одну хотелку.
>> Не знаю правда как это согласуется с концепцией программы.
>> Интересует обработка нескольких параметров. К примеру скрипт
>> выдает строчку: param1, param2, param3 Трешольд хочется
>> строить по param1, а param2 и param3 передавать в тело сообщения.
>>
>> Пример использования:
>> select a, b, c
>> ...
>> where ...
>> group by a, b
>>
>> Можно конечно на каждый a * b поставить DCI, но ... уж больно
>> их дохрена будет.
VK> Ja vrode primerno ponjal ideju, no hotelos' bi utochnenij. Kak
VK> mogli bi vigljadet' opisanie parametra I konfiguracija DCI dlja takoj shemi?
Хм. Ну например, что-то типа того:
DCI: External.Script.MysqlSelectTopSpamer
Возвращает 16384000, vasya.pupkin_at_mail.ru
где 16384000 (к примеру размер отправленных писем за n времени)
vasya.pupkin_at_mail.ru - некий email, для трешольда не нужный, но нужный
для уведомления
Трешольд: if $1 >= 8192000 then MAIL_LIMIT_OVERDRAFT
Event: message = "User %s1 over mail limit. Hi's mail traffic %4 bytes"
Event Policy: send mail %m to coolzizop
Набросал простой пример, могу придумать позаковыристей.
=)
>>
>>
>> P.S. А как себя ведет DCI при получении от скрипта результата
>> не в одной строке, а в нескольких разделенных возвратами
>> кареток? line-1 line-2 ... line-n
VK> Vozmet tol'ko pervuju strochku, ostal'nie vikinet.
Было бы интересно обрабатывать многострочные ответы. Типа как
LogScan.FindString
Каждая из передаваемых строчек обрабатывается отдельно.
Если применительно к предыдущему примеру, то возьмем вариант когда
получаем несколько строчек и по каждой генерируем уведомление.
Могу более развернутый, реальный пример:
Есть у меня скрипт, пускаемый раз в 15 минут из под крона.
Смысл скрипта - смотреть в БД (MySQL), выбирать оттуда недошедшие
сообщения и на каждуй из полученных строчек генерировать письмо.
Вот SQL запрос:
"select left(oq.activation_date, 10) ll, oq.operator_id, oq.delivery_status, count(*)
from outgoing_sms_queue oq, operators o
where oq.operator_id = o.operator_id
and o.status = 'ALIVE'
and oq.activation_date between DATE_ADD('$date_now',INTERVAL - $check_period) AND '$date_now'
AND NOT (oq.delivery_status IN ('DELIVERED', 'SUBMIT ACKNOWLEDGED', 'NEW'))
GROUP BY ll, oq.operator_id, oq.delivery_status"
Вторым SQL запросом мы выбираем total_count по каждому из операторов и
в случае превышения некоего порогового значения (к примеру 20%) отсылаем письмо.
Что мог бы выдавать External.Script.
$operator_id, $delivery_status, $ratio_undelivered, $count_undelivered, $total_count (1,REJECTED,20,5,100)
В таком случае имеем несколько трешольдов.
Пример простого трешольда по одному из операторов:
if ($operator_id = 1 and $status = 'REJECTED' and $ratio_undelivered > 20.0)
then
generate Alarm: Operator: 1, Delivery Status: REJECTED, Count: 5, Total Count: 100, Ratio: 20
send e_mail: -------------//------------
fi
----------------
С уважением.
Lobahin Ilya
Received on Fri Sep 22 2006 - 00:01:44 EEST
This archive was generated by hypermail 2.2.0 : Fri Sep 22 2006 - 00:04:00 EEST