Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > Проблема с регулярными выражениями


Автор: Зюзе 27.2.2009, 13:44
Всем привет. Сразу скажу я не программист, с перлом имел дело постольку-поскольку  smile 
Сейчас настраиваю приблуду к софтине (nagiosgraph) которая отрисовывает графики. 
В доках нарисован такой пример:
# INSTRUCTIONS:
# This file contains several example of service types. Edit this file to
# add more service types. The data string from Nagios is in $_ . Use
# regular expressions to identify and extract data like the examples below
# below.  Match on either output: or perfdata: . The code is pure perl,
# that will be run inside an eval{}. Results are expected in @s. The
# general format is:
# /output|perfdata:<servicetype> <key>=<value> <key2=value2> .../
# and push @s, [ <databasename>,
#                [ <key>,  GAUGE|DERIVE, <value>  ],
#                [ <key2>, GAUGE|DERIVE, <value2> ],
#                [ .       .              .        ],
#                [ .       .              .        ] ];
# But more advanced code is possible, as long as the resulting
# data structure is correct.

По примеру сделал график отрисовки загрузки процессора, 
#   Service type: ntload
#   check command: check_nt -H Address -v CPULOAD -l5,70,90,30,70,90
#   output: CPU Load 9% (5 min average)
#   perfdata:5 min avg Load=9%;80;90;0;100
/perfdata:.*5 min avg load=(\d+)%;(\d+);(\d+);(\d+);(\d+)/
and push @s, [ ntload,
  [ avg05min, GAUGE, $1 ] ];

но видимо где-то косяк с регекспами, потому что график не строится,
в логах пишет что 
insert.pl,v $ $Revision: 1.25 $ info - Input servicedescr:ntload
insert.pl,v $ $Revision: 1.25 $ info - Input output:CPU Load 0% (5 min average)
insert.pl,v $ $Revision: 1.25 $ warn - perfdata not recognized

Я уже перелом мозга получил с этими регекспами, не могу понять почему не воспринимает данные  smile  smile  smile 


Автор: amg 27.2.2009, 15:01
Цитата(Зюзе @  27.2.2009,  13:44 Найти цитируемый пост)
#   perfdata:5 min avg Load=9%;80;90;0;100
/perfdata:.*5 min avg load=(\d+)%;(\d+);(\d+);(\d+);(\d+)/
Все правильно приведенной строке это рег. выражение не подходит. Нужно 
/perfdata:.*5 min avg Load=(\d+)%;(\d+);(\d+);(\d+);(\d+)/ либо
/perfdata:.*5 min avg load=(\d+)%;(\d+);(\d+);(\d+);(\d+)/i

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)