93_Log2Syslog: contrib 5.9.0
git-svn-id: https://svn.fhem.de/fhem/trunk@21581 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
@@ -93,10 +93,10 @@ our %Log2Syslog_vNotesIntern = (
|
|||||||
"2.4.1" => "21.08.2017 changes in Log2Syslog_charfilter, change PROCID to \$hash->{SEQNO} ".
|
"2.4.1" => "21.08.2017 changes in Log2Syslog_charfilter, change PROCID to \$hash->{SEQNO} ".
|
||||||
"switch to non-blocking in subs event/Log2Syslog_fhemlog",
|
"switch to non-blocking in subs event/Log2Syslog_fhemlog",
|
||||||
"2.4.0" => "20.08.2017 new sub Log2Syslog_Log3slog for entries in local fhemlog only -> verbose support",
|
"2.4.0" => "20.08.2017 new sub Log2Syslog_Log3slog for entries in local fhemlog only -> verbose support",
|
||||||
"2.3.1" => "19.08.2017 commandref revised",
|
"2.3.1" => "19.08.2017 commandref revised ",
|
||||||
"2.3.0" => "18.08.2017 new parameter 'ident' in DEF, sub setidex, Log2Syslog_charfilter",
|
"2.3.0" => "18.08.2017 new parameter 'ident' in DEF, sub setidex, Log2Syslog_charfilter",
|
||||||
"2.2.0" => "17.08.2017 set BSD data length, set only acceptable characters (USASCII) in payload,
|
"2.2.0" => "17.08.2017 set BSD data length, set only acceptable characters (USASCII) in payload ".
|
||||||
commandref revised",
|
"commandref revised ",
|
||||||
"2.1.0" => "17.08.2017 sub Log2Syslog_opensock created",
|
"2.1.0" => "17.08.2017 sub Log2Syslog_opensock created",
|
||||||
"2.0.0" => "16.08.2017 create syslog without SYS::SYSLOG",
|
"2.0.0" => "16.08.2017 create syslog without SYS::SYSLOG",
|
||||||
"1.1.1" => "13.08.2017 registrate Log2Syslog_fhemlog to %loginform in case of sending fhem-log ".
|
"1.1.1" => "13.08.2017 registrate Log2Syslog_fhemlog to %loginform in case of sending fhem-log ".
|
||||||
@@ -489,7 +489,7 @@ sub Log2Syslog_Read {
|
|||||||
# Syslog Sätze mit Octet Count -> Transmission of Syslog Messages over TCP https://tools.ietf.org/html/rfc6587
|
# Syslog Sätze mit Octet Count -> Transmission of Syslog Messages over TCP https://tools.ietf.org/html/rfc6587
|
||||||
my $i = 0;
|
my $i = 0;
|
||||||
$mlen = $+{mlen};
|
$mlen = $+{mlen};
|
||||||
$tail = $+{tail};
|
$tail = $+{tail};
|
||||||
$msg = substr($tail,0,$mlen);
|
$msg = substr($tail,0,$mlen);
|
||||||
chomp $msg;
|
chomp $msg;
|
||||||
push @load, $msg;
|
push @load, $msg;
|
||||||
@@ -499,7 +499,7 @@ sub Log2Syslog_Read {
|
|||||||
while($tail && $tail =~ /^(?<mlen>(\d+))\s(?<tail>.*)/s) {
|
while($tail && $tail =~ /^(?<mlen>(\d+))\s(?<tail>.*)/s) {
|
||||||
$i++;
|
$i++;
|
||||||
$mlen = $+{mlen};
|
$mlen = $+{mlen};
|
||||||
$tail = $+{tail};
|
$tail = $+{tail};
|
||||||
$msg = substr($tail,0,$mlen);
|
$msg = substr($tail,0,$mlen);
|
||||||
chomp $msg;
|
chomp $msg;
|
||||||
push @load, $msg;
|
push @load, $msg;
|
||||||
@@ -601,7 +601,7 @@ sub Log2Syslog_getifdata {
|
|||||||
my $sslver = $nhash->{CD}->get_sslversion();
|
my $sslver = $nhash->{CD}->get_sslversion();
|
||||||
my $sslalgo = $nhash->{CD}->get_fingerprint();
|
my $sslalgo = $nhash->{CD}->get_fingerprint();
|
||||||
readingsSingleUpdate($hash, "SSL_Version", $sslver, 1);
|
readingsSingleUpdate($hash, "SSL_Version", $sslver, 1);
|
||||||
readingsSingleUpdate($hash, "SSL_Algorithm", $sslalgo, 1);
|
readingsSingleUpdate($hash, "SSL_Algorithm", $sslalgo, 1);
|
||||||
}
|
}
|
||||||
return ($st,$data,$hash);
|
return ($st,$data,$hash);
|
||||||
}
|
}
|
||||||
@@ -623,7 +623,7 @@ sub Log2Syslog_getifdata {
|
|||||||
my $c = $hash->{CD};
|
my $c = $hash->{CD};
|
||||||
if($c) {
|
if($c) {
|
||||||
$shash->{HELPER}{TCPPADDR} = $hash->{PEER};
|
$shash->{HELPER}{TCPPADDR} = $hash->{PEER};
|
||||||
my $buf;
|
my $buf;
|
||||||
my $off = 0;
|
my $off = 0;
|
||||||
$ret = sysread($c, $buf, $len); # returns undef on error, 0 at end of file and Integer, number of bytes read on success.
|
$ret = sysread($c, $buf, $len); # returns undef on error, 0 at end of file and Integer, number of bytes read on success.
|
||||||
|
|
||||||
@@ -828,7 +828,7 @@ sub Log2Syslog_parsePayload {
|
|||||||
$pl .= "$f: ".${$fh{$f}};
|
$pl .= "$f: ".${$fh{$f}};
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} elsif ($pp eq "IETF") {
|
} elsif ($pp eq "IETF") {
|
||||||
@@ -1089,7 +1089,7 @@ sub Log2Syslog_parsePayload {
|
|||||||
Log2Syslog_Log3slog ($hash, 1, "Log2Syslog $name - no parseFn defined.");
|
Log2Syslog_Log3slog ($hash, 1, "Log2Syslog $name - no parseFn defined.");
|
||||||
}
|
}
|
||||||
|
|
||||||
} elsif ($pp eq "unknown") {
|
} elsif ($pp eq "unknown") {
|
||||||
$err = 1;
|
$err = 1;
|
||||||
Log2Syslog_Log3slog ($hash, 1, "Log2Syslog $name - Message format could not be detected automatically. PLease check and set attribute \"parseProfile\" manually.");
|
Log2Syslog_Log3slog ($hash, 1, "Log2Syslog $name - Message format could not be detected automatically. PLease check and set attribute \"parseProfile\" manually.");
|
||||||
}
|
}
|
||||||
@@ -1204,7 +1204,7 @@ sub Log2Syslog_Set {
|
|||||||
my $prop = $a[2];
|
my $prop = $a[2];
|
||||||
|
|
||||||
my $setlist = "Unknown argument $opt, choose one of ".
|
my $setlist = "Unknown argument $opt, choose one of ".
|
||||||
"reopen:noArg ".
|
"reopen:noArg ".
|
||||||
(($hash->{MODEL} =~ /Sender/)?"sendTestMessage ":"")
|
(($hash->{MODEL} =~ /Sender/)?"sendTestMessage ":"")
|
||||||
;
|
;
|
||||||
|
|
||||||
@@ -1223,11 +1223,11 @@ sub Log2Syslog_Set {
|
|||||||
$hash->{HELPER}{MEMLOCK} = 1;
|
$hash->{HELPER}{MEMLOCK} = 1;
|
||||||
InternalTimer(gettimeofday()+2, "Log2Syslog_deleteMemLock", $hash, 0);
|
InternalTimer(gettimeofday()+2, "Log2Syslog_deleteMemLock", $hash, 0);
|
||||||
|
|
||||||
Log2Syslog_closesock ($hash,1); # Clientsocket schließen
|
Log2Syslog_closesock ($hash,1); # Clientsocket schließen
|
||||||
Log2Syslog_downServer($hash,1); # Serversocket schließen
|
Log2Syslog_downServer($hash,1); # Serversocket schließen
|
||||||
if($hash->{MODEL} =~ /Collector/) { # Serversocket öffnen
|
if($hash->{MODEL} =~ /Collector/) { # Serversocket öffnen
|
||||||
InternalTimer(gettimeofday()+0.5, "Log2Syslog_initServer", "$name,global", 0);
|
InternalTimer(gettimeofday()+0.5, "Log2Syslog_initServer", "$name,global", 0);
|
||||||
readingsSingleUpdate ($hash, 'Parse_Err_No', 0, 1); # Fehlerzähler für Parse-Errors auf 0
|
readingsSingleUpdate ($hash, 'Parse_Err_No', 0, 1); # Fehlerzähler für Parse-Errors auf 0
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -1248,7 +1248,7 @@ sub Log2Syslog_Get {
|
|||||||
my $prop = $a[2];
|
my $prop = $a[2];
|
||||||
my $getlist = "Unknown argument $opt, choose one of ".
|
my $getlist = "Unknown argument $opt, choose one of ".
|
||||||
(($hash->{MODEL} !~ /Collector/)?"certInfo:noArg ":"").
|
(($hash->{MODEL} !~ /Collector/)?"certInfo:noArg ":"").
|
||||||
"versionNotes "
|
"versionNotes "
|
||||||
;
|
;
|
||||||
|
|
||||||
return if(AttrVal($name, "disable", "") eq "1");
|
return if(AttrVal($name, "disable", "") eq "1");
|
||||||
@@ -1366,11 +1366,11 @@ sub Log2Syslog_Attr {
|
|||||||
# aName and aVal are Attribute name and value
|
# aName and aVal are Attribute name and value
|
||||||
|
|
||||||
if ($cmd eq "set" && $hash->{MODEL} !~ /Collector/ && $aName =~ /parseProfile|parseFn|outputFields|makeEvent|useParsefilter/) {
|
if ($cmd eq "set" && $hash->{MODEL} !~ /Collector/ && $aName =~ /parseProfile|parseFn|outputFields|makeEvent|useParsefilter/) {
|
||||||
return qq{"$aName" is only valid for model "Collector"};
|
return qq{"$aName" is only valid for model "Collector"};
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($cmd eq "set" && $hash->{MODEL} =~ /Collector/ && $aName =~ /addTimestamp|contDelimiter|addStateEvent|logFormat|octetCount|ssldebug|timeout|exclErrCond/) {
|
if ($cmd eq "set" && $hash->{MODEL} =~ /Collector/ && $aName =~ /addTimestamp|contDelimiter|addStateEvent|logFormat|octetCount|ssldebug|timeout|exclErrCond/) {
|
||||||
return qq{"$aName" is only valid for model "Sender"};
|
return qq{"$aName" is only valid for model "Sender"};
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($aName eq "disable") {
|
if ($aName eq "disable") {
|
||||||
@@ -1401,7 +1401,7 @@ sub Log2Syslog_Attr {
|
|||||||
$do = ($aVal) ? 1 : 0;
|
$do = ($aVal) ? 1 : 0;
|
||||||
}
|
}
|
||||||
$do = 0 if($cmd eq "del");
|
$do = 0 if($cmd eq "del");
|
||||||
if ($do == 0) {
|
if ($do == 0) {
|
||||||
delete $hash->{SSL};
|
delete $hash->{SSL};
|
||||||
} else {
|
} else {
|
||||||
if($hash->{MODEL} =~ /Collector/) {
|
if($hash->{MODEL} =~ /Collector/) {
|
||||||
@@ -1416,7 +1416,7 @@ sub Log2Syslog_Attr {
|
|||||||
Log2Syslog_downServer($hash,1); # Serversocket schließen
|
Log2Syslog_downServer($hash,1); # Serversocket schließen
|
||||||
if($hash->{MODEL} =~ /Collector/) {
|
if($hash->{MODEL} =~ /Collector/) {
|
||||||
InternalTimer(gettimeofday()+0.5, "Log2Syslog_initServer", "$name,global", 0); # Serversocket öffnen
|
InternalTimer(gettimeofday()+0.5, "Log2Syslog_initServer", "$name,global", 0); # Serversocket öffnen
|
||||||
readingsSingleUpdate ($hash, 'Parse_Err_No', 0, 1); # Fehlerzähler für Parse-Errors auf 0
|
readingsSingleUpdate ($hash, 'Parse_Err_No', 0, 1); # Fehlerzähler für Parse-Errors auf 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1437,7 +1437,7 @@ sub Log2Syslog_Attr {
|
|||||||
return qq{$aName "$aVal" is not valid because off privileged ports are only usable by super users. Use a port number grater than 1023.} if($aVal < 1024);
|
return qq{$aName "$aVal" is not valid because off privileged ports are only usable by super users. Use a port number grater than 1023.} if($aVal < 1024);
|
||||||
Log2Syslog_downServer($hash,1); # Serversocket schließen
|
Log2Syslog_downServer($hash,1); # Serversocket schließen
|
||||||
InternalTimer(gettimeofday()+0.5, "Log2Syslog_initServer", "$name,global", 0);
|
InternalTimer(gettimeofday()+0.5, "Log2Syslog_initServer", "$name,global", 0);
|
||||||
readingsSingleUpdate ($hash, 'Parse_Err_No', 0, 1); # Fehlerzähler für Parse-Errors auf 0
|
readingsSingleUpdate ($hash, 'Parse_Err_No', 0, 1); # Fehlerzähler für Parse-Errors auf 0
|
||||||
} elsif ($aName =~ /port/ && $hash->{MODEL} !~ /Collector/) {
|
} elsif ($aName =~ /port/ && $hash->{MODEL} !~ /Collector/) {
|
||||||
Log2Syslog_closesock($hash,1); # Clientsocket schließen
|
Log2Syslog_closesock($hash,1); # Clientsocket schließen
|
||||||
}
|
}
|
||||||
@@ -1565,7 +1565,7 @@ sub Log2Syslog_eventlog {
|
|||||||
my $tim = (($ct && $ct->[$i]) ? $ct->[$i] : $tn);
|
my $tim = (($ct && $ct->[$i]) ? $ct->[$i] : $tn);
|
||||||
my ($date,$time) = split(" ",$tim);
|
my ($date,$time) = split(" ",$tim);
|
||||||
|
|
||||||
if($n =~ m/^$rex$/ || "$n:$txt" =~ m/^$rex$/ || "$tim:$n:$txt" =~ m/^$rex$/) {
|
if($n =~ m/^$rex$/ || "$n:$txt" =~ m/^$rex$/ || "$tim:$n:$txt" =~ m/^$rex$/) {
|
||||||
my $otp = "$n $txt";
|
my $otp = "$n $txt";
|
||||||
$otp = "$tim $otp" if AttrVal($name,'addTimestamp',0);
|
$otp = "$tim $otp" if AttrVal($name,'addTimestamp',0);
|
||||||
($prival,$sevAstxt) = Log2Syslog_setprival($hash,$txt);
|
($prival,$sevAstxt) = Log2Syslog_setprival($hash,$txt);
|
||||||
@@ -1575,15 +1575,15 @@ sub Log2Syslog_eventlog {
|
|||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
($data,$pid) = Log2Syslog_setpayload($hash,$prival,$date,$time,$otp,"event");
|
($data,$pid) = Log2Syslog_setpayload($hash,$prival,$date,$time,$otp,"event");
|
||||||
next if(!$data);
|
next if(!$data);
|
||||||
|
|
||||||
my $ret = syswrite ($sock,$data);
|
my $ret = syswrite ($sock,$data);
|
||||||
if($ret && $ret > 0) {
|
if($ret && $ret > 0) {
|
||||||
Log2Syslog_Log3slog($name, 4, "Log2Syslog $name - Payload sequence $pid sent\n");
|
Log2Syslog_Log3slog($name, 4, "Log2Syslog $name - Payload sequence $pid sent\n");
|
||||||
} else {
|
} else {
|
||||||
my $err = $!;
|
my $err = $!;
|
||||||
Log2Syslog_Log3slog($name, 3, "Log2Syslog $name - Warning - Payload sequence $pid NOT sent: $err\n");
|
Log2Syslog_Log3slog($name, 3, "Log2Syslog $name - Warning - Payload sequence $pid NOT sent: $err\n");
|
||||||
$st = "write error: $err";
|
$st = "write error: $err";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1629,7 +1629,7 @@ sub Log2Syslog_fhemlog {
|
|||||||
$date =~ s/\./-/g;
|
$date =~ s/\./-/g;
|
||||||
my $tim = $date." ".$time;
|
my $tim = $date." ".$time;
|
||||||
|
|
||||||
if($txt =~ m/^$rex$/ || "$vbose: $txt" =~ m/^$rex$/) {
|
if($txt =~ m/^$rex$/ || "$vbose: $txt" =~ m/^$rex$/) {
|
||||||
my $otp = "$vbose: $txt";
|
my $otp = "$vbose: $txt";
|
||||||
$otp = "$tim $otp" if AttrVal($name,'addTimestamp',0);
|
$otp = "$tim $otp" if AttrVal($name,'addTimestamp',0);
|
||||||
($prival,$sevAstxt) = Log2Syslog_setprival($hash,$txt,$vbose);
|
($prival,$sevAstxt) = Log2Syslog_setprival($hash,$txt,$vbose);
|
||||||
@@ -1639,7 +1639,7 @@ sub Log2Syslog_fhemlog {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
($data,$pid) = Log2Syslog_setpayload($hash,$prival,$date,$time,$otp,"fhem");
|
($data,$pid) = Log2Syslog_setpayload($hash,$prival,$date,$time,$otp,"fhem");
|
||||||
return if(!$data);
|
return if(!$data);
|
||||||
|
|
||||||
($sock,$st) = Log2Syslog_opensock($hash,0);
|
($sock,$st) = Log2Syslog_opensock($hash,0);
|
||||||
@@ -1647,11 +1647,11 @@ sub Log2Syslog_fhemlog {
|
|||||||
if ($sock) {
|
if ($sock) {
|
||||||
$ret = syswrite($sock,$data) if($data);
|
$ret = syswrite($sock,$data) if($data);
|
||||||
if($ret && $ret > 0) {
|
if($ret && $ret > 0) {
|
||||||
Log2Syslog_Log3slog($name, 4, "Log2Syslog $name - Payload sequence $pid sent\n");
|
Log2Syslog_Log3slog($name, 4, "Log2Syslog $name - Payload sequence $pid sent\n");
|
||||||
} else {
|
} else {
|
||||||
my $err = $!;
|
$err = $!;
|
||||||
Log2Syslog_Log3slog($name, 3, "Log2Syslog $name - Warning - Payload sequence $pid NOT sent: $err\n");
|
$st = "write error: $err";
|
||||||
$st = "write error: $err";
|
Log2Syslog_Log3slog($name, 3, "Log2Syslog $name - Warning - Payload sequence $pid NOT sent: $err\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
my $uef = AttrVal($name, "useEOF", 0);
|
my $uef = AttrVal($name, "useEOF", 0);
|
||||||
@@ -1691,8 +1691,8 @@ sub Log2Syslog_sendTestMsg {
|
|||||||
$otp = "$tim $otp" if AttrVal($name,'addTimestamp',0);
|
$otp = "$tim $otp" if AttrVal($name,'addTimestamp',0);
|
||||||
$prival = "14";
|
$prival = "14";
|
||||||
|
|
||||||
($data,$pid) = Log2Syslog_setpayload($hash,$prival,$date,$time,$otp,"fhem");
|
($data,$pid) = Log2Syslog_setpayload($hash,$prival,$date,$time,$otp,"fhem");
|
||||||
return if(!$data);
|
return if(!$data);
|
||||||
}
|
}
|
||||||
|
|
||||||
($sock,$st) = Log2Syslog_opensock($hash,0);
|
($sock,$st) = Log2Syslog_opensock($hash,0);
|
||||||
@@ -1703,9 +1703,9 @@ sub Log2Syslog_sendTestMsg {
|
|||||||
Log2Syslog_Log3slog($name, 4, "$name - Payload sequence $pid sent\n");
|
Log2Syslog_Log3slog($name, 4, "$name - Payload sequence $pid sent\n");
|
||||||
$st = "maintenance";
|
$st = "maintenance";
|
||||||
} else {
|
} else {
|
||||||
my $err = $!;
|
$err = $!;
|
||||||
Log2Syslog_Log3slog($name, 3, "$name - Warning - Payload sequence $pid NOT sent: $err\n");
|
$st = "write error: $err";
|
||||||
$st = "write error: $err";
|
Log2Syslog_Log3slog($name, 3, "$name - Warning - Payload sequence $pid NOT sent: $err\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
my $uef = AttrVal($name, "useEOF", 0);
|
my $uef = AttrVal($name, "useEOF", 0);
|
||||||
@@ -1923,13 +1923,11 @@ sub Log2Syslog_setprival {
|
|||||||
$sv = 7 if ($vbose == 5);
|
$sv = 7 if ($vbose == 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lc($txt) =~ m/error/) {
|
if (lc($txt) =~ m/error/) { # error condition und exludes anwenden
|
||||||
# error condition
|
|
||||||
$do = 1;
|
$do = 1;
|
||||||
my $ees = AttrVal($name, "exclErrCond", "");
|
my $ees = AttrVal($name, "exclErrCond", "");
|
||||||
if($ees) {
|
if($ees) {
|
||||||
$ees =~ m/^\s*(.*)\s*$/s;
|
$ees = Log2Syslog_trim($ees);
|
||||||
$ees = $1;
|
|
||||||
$ees =~ s/[\n]//g;
|
$ees =~ s/[\n]//g;
|
||||||
$ees =~ s/,,/_ESC_/g;
|
$ees =~ s/,,/_ESC_/g;
|
||||||
my @excl = split(",",$ees);
|
my @excl = split(",",$ees);
|
||||||
@@ -2264,7 +2262,7 @@ our %Log2Syslog_vHintsExt_de = (
|
|||||||
to receive Syslog-messages of other devices which are able to send Syslog. <br>
|
to receive Syslog-messages of other devices which are able to send Syslog. <br>
|
||||||
The syslog protocol has been implemented according the specifications of <a href="https://tools.ietf.org/html/rfc5424"> RFC5424 (IETF)</a>,
|
The syslog protocol has been implemented according the specifications of <a href="https://tools.ietf.org/html/rfc5424"> RFC5424 (IETF)</a>,
|
||||||
<a href="https://tools.ietf.org/html/rfc3164"> RFC3164 (BSD)</a> and the TLS transport protocol according to
|
<a href="https://tools.ietf.org/html/rfc3164"> RFC3164 (BSD)</a> and the TLS transport protocol according to
|
||||||
<a href="https://tools.ietf.org/pdf/rfc5425.pdf"> RFC5425</a>. <br>
|
<a href="https://tools.ietf.org/pdf/rfc5425.pdf"> RFC5425</a>. <br>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
<b>Prerequisits</b>
|
<b>Prerequisits</b>
|
||||||
|
|||||||
Reference in New Issue
Block a user