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