EDIT: Mein Fehler - ich hatte eine veraltete Version des wiregated.pl. Diesen Thread bitte ignorieren, die Patches sind bereits in der Elabnet-Version drin!
Hallo zusammen,
ich habe mir mal die Mühe gemacht, mein angestaubtes Wiregate-Paket zu aktualisieren (ich halte mein WG nicht mehr aktuell, seit ich es auf Debian Wheezy umgestellt habe).
Bei weitem nicht alle Plugins liefen danach problemlos - auch der Logikprozessor nicht - und die Ursache liegt m.E. in der unvollständigen Übernahme meines "COMPILE_PLUGIN"-Patches.
In aller Kürze hier ein Patch, der den wiregated.pl heilt und dabei noch ein paar andere Problemchen beheben sollte. EXPERIMENTAL - ich gehöre nicht zu ElabNet, es gibt keinen Support!
Zu den einzelnen Hunks:
1. SIG{HUP} - führt dazu, dass nach einem Logrotate des eib.log-Files der wiregated.pl ins neue File schreibt. Dazu muss im /etc/logrotate.d/eib.log die Zeile
stehen.
2. %msg=()... dient dazu, dass ein Plugin zuverlässig erkennen kann, ob es zyklisch oder vom Bus her aufgerufen wurde
3. update_rrd... das ist einfach doppelt im wiregated.pl drin. Kostet nix außer Performance.
4. my %msg... DER IST GANZ WESENTLICH - ohne den funktionieren "kompilierte" Plugins nicht richtig, vor allem in Kombination mit Punkt 2 oben.
5. val[2]: Bugfix - eine Uhrzeit kann auch 0 im Sekundenfeld haben, ohne dass das irgendwie falsch wäre...
6. Die Datumsübersetzung etwas flexibler.
VG, Fry
Hallo zusammen,
ich habe mir mal die Mühe gemacht, mein angestaubtes Wiregate-Paket zu aktualisieren (ich halte mein WG nicht mehr aktuell, seit ich es auf Debian Wheezy umgestellt habe).
Bei weitem nicht alle Plugins liefen danach problemlos - auch der Logikprozessor nicht - und die Ursache liegt m.E. in der unvollständigen Übernahme meines "COMPILE_PLUGIN"-Patches.
In aller Kürze hier ein Patch, der den wiregated.pl heilt und dabei noch ein paar andere Problemchen beheben sollte. EXPERIMENTAL - ich gehöre nicht zu ElabNet, es gibt keinen Support!
Code:
--- wiregated.pl.ORIG 2015-02-12 19:42:49.869803962 +0100 +++ wiregated.pl 2015-02-12 20:13:57.754372098 +0100 @@ -255,6 +255,12 @@ `cp /tmp/wiregate_plugin.db $plugin_infofile`; exit(); }; +$SIG{HUP} = sub { + # Logrotate -> Logfile neu oeffnen + close FILE_EIBLOG; + open FILE_EIBLOG, ">>$eiblogfile"; +}; + #FIXME: add plugin-timeout again with SIGALRM, currently we rely on monit (1 minute) if($wg_config{''}{'eib_logging'}) { @@ -390,21 +396,23 @@ # check plugins if (time()-$lastplugintime > 1) { # at most every 1secs for now $thr_eiblisten_timeout = time(); # set timeout + %msg=(); $fh=undef; check_generic_plugins(); $lastplugintime = time(); # case update rrds check_global_rrd_update(); #Cleanup %plugin_subscribe from deleted!!! } - if ($rrd_syslastupdate + $wg_config{''}{'rrd_interval'} < time()) { - my @statinfo = get_stat_info($$); - update_rrd("wiregated_mem","",$statinfo[5]); - update_rrd("wiregated_stime","",$statinfo[0],"COUNTER"); - update_rrd("wiregated_utime","",$statinfo[1],"COUNTER"); - update_rrd("wiregated_cutime","",$statinfo[2],"COUNTER"); - update_rrd("wiregated_cstime","",$statinfo[3],"COUNTER"); - $rrd_syslastupdate = time(); - } +# Doublette - dies hier steht nochmal in check_global_rrd_update +# if ($rrd_syslastupdate + $wg_config{''}{'rrd_interval'} < time()) { +# my @statinfo = get_stat_info($$); +# update_rrd("wiregated_mem","",$statinfo[5]); +# update_rrd("wiregated_stime","",$statinfo[0],"COUNTER"); +# update_rrd("wiregated_utime","",$statinfo[1],"COUNTER"); +# update_rrd("wiregated_cutime","",$statinfo[2],"COUNTER"); +# update_rrd("wiregated_cstime","",$statinfo[3],"COUNTER"); +# $rrd_syslastupdate = time(); +# } # Check if socket-handle is in select - or do this in plugin? if (my @sock_ready = $socksel->can_read(.1)) { # process sockets ready to read @@ -440,11 +448,7 @@ sub check_generic_plugins { my $runname = $_[0]; - my %msg; - my $fh; my $plugin_max_errors = 5; - if (defined $_[1]) { %msg = %{$_[1]}; } else { %msg = (); } - if (defined $_[2]) { $fh = $_[2]; } else { $fh = undef; } $thr_eiblisten_cause = "checking plugins"; my @plugins = grep !/[\~\#]$/ && !-d $_, </etc/wiregate/plugin/generic/*>; # ignore backup-files and subdirectories for my $plugfile (@plugins) @@ -839,7 +843,7 @@ $val[0] = hex($val[0]); $val[1] = hex($val[1]); $val[2] = hex($val[2]); - unless ($val[2]) { return; } +# unless ($val[2]) { return; } my $day = ($val[0] & 0xE0) >> 5; my $hour = $val[0] & 0x1F; my $minute = $val[1]; @@ -1083,7 +1087,7 @@ $dpt = $eibgaconf{$dst}{'DPTSubId'} unless $dpt; # read dpt from eibgaconf if existing given ($dpt) { when (/^10/) { - my %wd=(Mo=>1, Di=>2, Mi=>3, Do=>4, Fr=>5, Sa=>6, So=>7); + my %wd=(Mo=>1, Di=>2, Mi=>3, Do=>4, Fr=>5, Sa=>6, So=>7, Mon=>1, Tue=>2, Wed=>3, Thu=>4, Fri=>5, Sat=>6, Sun=>7); my $wdpat=join('|',keys %wd); my ($w,$h,$m,$s); return unless ($w,$h,$m,$s)=($value=~/^($wdpat)?\s*([0-2][0-9])\:([0-5][0-9])\:?([0-5][0-9])?\s*/si);
1. SIG{HUP} - führt dazu, dass nach einem Logrotate des eib.log-Files der wiregated.pl ins neue File schreibt. Dazu muss im /etc/logrotate.d/eib.log die Zeile
Code:
[ -f /var/run/wiregated.pl.pid ] && /bin/kill -HUP `cat /var/run/wiregated.pl.pid`
2. %msg=()... dient dazu, dass ein Plugin zuverlässig erkennen kann, ob es zyklisch oder vom Bus her aufgerufen wurde
3. update_rrd... das ist einfach doppelt im wiregated.pl drin. Kostet nix außer Performance.
4. my %msg... DER IST GANZ WESENTLICH - ohne den funktionieren "kompilierte" Plugins nicht richtig, vor allem in Kombination mit Punkt 2 oben.
5. val[2]: Bugfix - eine Uhrzeit kann auch 0 im Sekundenfeld haben, ohne dass das irgendwie falsch wäre...
6. Die Datumsübersetzung etwas flexibler.
VG, Fry
Kommentar