mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-28 17:12:32 +00:00
93_Log2Syslog: contrib 5.8.0
git-svn-id: https://svn.fhem.de/fhem/trunk@19887 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
efa4b13287
commit
bfdfa65176
@ -439,17 +439,18 @@ return;
|
|||||||
sub Log2Syslog_Read($@) {
|
sub Log2Syslog_Read($@) {
|
||||||
my ($hash,$reread) = @_;
|
my ($hash,$reread) = @_;
|
||||||
my $socket = $hash->{SERVERSOCKET};
|
my $socket = $hash->{SERVERSOCKET};
|
||||||
my ($err,$sev,$data,$ts,$phost,$pl,$ignore,$st,$len,$evt,$pen);
|
my ($err,$sev,$data,$ts,$phost,$pl,$ignore,$st,$len,$mlen,$evt,$pen);
|
||||||
|
|
||||||
return if($init_done != 1);
|
return if($init_done != 1);
|
||||||
|
|
||||||
# maximale Länge des Syslog-Frames als Begrenzung falls kein EOF
|
# maximale Länge des Syslog-Frames als Begrenzung falls kein EOF
|
||||||
# vom Sender initiiert wird (Endlosschleife vermeiden)
|
# vom Sender initiiert wird (Endlosschleife vermeiden)
|
||||||
$len = 16384;
|
$mlen = 16384;
|
||||||
|
$len = 8192;
|
||||||
|
|
||||||
if($hash->{TEMPORARY}) {
|
if($hash->{TEMPORARY}) {
|
||||||
# temporäre Instanz angelegt durch TcpServer_Accept
|
# temporäre Instanz angelegt durch TcpServer_Accept
|
||||||
($st,$data,$hash) = Log2Syslog_getifdata($hash,$len,$reread);
|
($st,$data,$hash) = Log2Syslog_getifdata($hash,$len,$mlen,$reread);
|
||||||
}
|
}
|
||||||
|
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
@ -469,7 +470,7 @@ sub Log2Syslog_Read($@) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if($socket) {
|
if($socket) {
|
||||||
($st,$data,$hash) = Log2Syslog_getifdata($hash,$len,$reread);
|
($st,$data,$hash) = Log2Syslog_getifdata($hash,$len,$mlen,$reread);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($data) {
|
if($data) {
|
||||||
@ -554,11 +555,11 @@ return;
|
|||||||
#
|
#
|
||||||
###############################################################################
|
###############################################################################
|
||||||
sub Log2Syslog_getifdata($$@) {
|
sub Log2Syslog_getifdata($$@) {
|
||||||
my ($hash,$len,$reread) = @_;
|
my ($hash,$len,$mlen,$reread) = @_;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
my $socket = $hash->{SERVERSOCKET};
|
my $socket = $hash->{SERVERSOCKET};
|
||||||
my $protocol = lc(AttrVal($name, "protocol", "udp"));
|
my $protocol = lc(AttrVal($name, "protocol", "udp"));
|
||||||
my $eof = 0;
|
my ($eof,$buforun) = (0,0);
|
||||||
|
|
||||||
if($hash->{TEMPORARY}) {
|
if($hash->{TEMPORARY}) {
|
||||||
# temporäre Instanz abgelegt durch TcpServer_Accept
|
# temporäre Instanz abgelegt durch TcpServer_Accept
|
||||||
@ -568,6 +569,7 @@ sub Log2Syslog_getifdata($$@) {
|
|||||||
my $st = ReadingsVal($name,"state","active");
|
my $st = ReadingsVal($name,"state","active");
|
||||||
my ($data,$ret);
|
my ($data,$ret);
|
||||||
|
|
||||||
|
if(!$reread) {
|
||||||
if($socket && $protocol =~ /udp/) {
|
if($socket && $protocol =~ /udp/) {
|
||||||
# UDP Datagramm empfangen
|
# UDP Datagramm empfangen
|
||||||
Log2Syslog_Log3slog ($hash, 4, "Log2Syslog $name - ####################################################### ");
|
Log2Syslog_Log3slog ($hash, 4, "Log2Syslog $name - ####################################################### ");
|
||||||
@ -609,14 +611,13 @@ sub Log2Syslog_getifdata($$@) {
|
|||||||
Log2Syslog_Log3slog ($shash, 4, "Log2Syslog $sname - ####################################################### ");
|
Log2Syslog_Log3slog ($shash, 4, "Log2Syslog $sname - ####################################################### ");
|
||||||
Log2Syslog_Log3slog ($shash, 4, "Log2Syslog $sname - ######### new Syslog TCP Receive ######### ");
|
Log2Syslog_Log3slog ($shash, 4, "Log2Syslog $sname - ######### new Syslog TCP Receive ######### ");
|
||||||
Log2Syslog_Log3slog ($shash, 4, "Log2Syslog $sname - ####################################################### ");
|
Log2Syslog_Log3slog ($shash, 4, "Log2Syslog $sname - ####################################################### ");
|
||||||
Log2Syslog_Log3slog ($shash, 4, "Log2Syslog $sname - wait for EOF: $waitEOF, SSL: $tlsv");
|
Log2Syslog_Log3slog ($shash, 4, "Log2Syslog $sname - await EOF: $waitEOF, SSL: $tlsv");
|
||||||
Log2Syslog_Log3slog ($shash, 4, "Log2Syslog $sname - childname: $cname");
|
Log2Syslog_Log3slog ($shash, 4, "Log2Syslog $sname - childname: $cname");
|
||||||
|
|
||||||
$st = ReadingsVal($sname,"state","active");
|
$st = ReadingsVal($sname,"state","active");
|
||||||
my $c = $hash->{CD};
|
my $c = $hash->{CD};
|
||||||
if($c) {
|
if($c) {
|
||||||
$shash->{HELPER}{TCPPADDR} = $hash->{PEER};
|
$shash->{HELPER}{TCPPADDR} = $hash->{PEER};
|
||||||
if(!$reread) {
|
|
||||||
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.
|
||||||
@ -656,13 +657,16 @@ sub Log2Syslog_getifdata($$@) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$waitEOF || $hash->{SSL}) {
|
$buforun = (length($hash->{BUF}) >= $mlen)?1:0;
|
||||||
|
|
||||||
|
if(!$waitEOF || $hash->{SSL} || $buforun) {
|
||||||
$data = $hash->{BUF};
|
$data = $hash->{BUF};
|
||||||
delete $hash->{BUF};
|
delete $hash->{BUF};
|
||||||
$hash = $shash;
|
$hash = $shash;
|
||||||
if($data) {
|
if($data) {
|
||||||
my $dl = length($data);
|
my $dl = length($data);
|
||||||
chomp $data;
|
chomp $data;
|
||||||
|
Log2Syslog_Log3slog ($shash, 2, "Log2Syslog $sname - WARNING - Buffer overrun ! Enforce parse data.") if($buforun);
|
||||||
Log2Syslog_Log3slog ($shash, 5, "Log2Syslog $sname - Buffer $dl chars ready to parse:\n$data");
|
Log2Syslog_Log3slog ($shash, 5, "Log2Syslog $sname - Buffer $dl chars ready to parse:\n$data");
|
||||||
}
|
}
|
||||||
return ($st,$data,$hash);
|
return ($st,$data,$hash);
|
||||||
@ -676,13 +680,13 @@ sub Log2Syslog_getifdata($$@) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$st = "error - no socket opened";
|
$st = "error - no socket opened";
|
||||||
$data = '';
|
$data = '';
|
||||||
return ($st,$data,$hash);
|
return ($st,$data,$hash);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return ($st,undef,$hash);
|
return ($st,undef,$hash);
|
||||||
}
|
}
|
||||||
@ -754,8 +758,7 @@ sub Log2Syslog_parsePayload($$) {
|
|||||||
$hash->{PROFILE} = "Automatic - detected format: $pp";
|
$hash->{PROFILE} = "Automatic - detected format: $pp";
|
||||||
Log2Syslog_Log3slog($name, 4, "Log2Syslog $name - Message format \"$pp\" detected. Try Parsing ... ");
|
Log2Syslog_Log3slog($name, 4, "Log2Syslog $name - Message format \"$pp\" detected. Try Parsing ... ");
|
||||||
} else {
|
} else {
|
||||||
Log2Syslog_Log3slog($name, 2, "Log2Syslog $name - ERROR - no message format detected by automatic mode. Please specify the correct one by attribute \"parseProfile\" !");
|
Log2Syslog_Log3slog($name, 2, "Log2Syslog $name - WARNING - no message format is detected, \"raw\" is used instead. You can specify the correct profile by attribute \"parseProfile\" !");
|
||||||
Log2Syslog_Log3slog($name, 4, "Log2Syslog $name - Use raw profile ... ");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2685,7 +2688,9 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
|
|||||||
<a name="parseProfile"></a>
|
<a name="parseProfile"></a>
|
||||||
<li><b>parseProfile [ Automatic | BSD | IETF | ... | ParseFn | raw ] </b><br>
|
<li><b>parseProfile [ Automatic | BSD | IETF | ... | ParseFn | raw ] </b><br>
|
||||||
<br>
|
<br>
|
||||||
Selection of a parse profile. The attribute is only usable for device type "Collector".
|
Selection of a parse profile. The attribute is only usable for device type "Collector". <br>
|
||||||
|
In mode "Automatic" the module attempts to recognize, if the received data are from type "BSD" or "IEFT".
|
||||||
|
If the type is not recognized, the "raw" format is used instead and a warning is generated in the FHEM log.
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
@ -2908,7 +2913,8 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
|
|||||||
<br>
|
<br>
|
||||||
|
|
||||||
<b>Note:</b><br>
|
<b>Note:</b><br>
|
||||||
Please use ist with care! It can cause a loop if the sender don't send an EOF at any time.
|
If the sender don't use EOF signal, the data parsing is enforced after exceeding a buffer use threshold
|
||||||
|
and the warning "Buffer overrun" is issued in the FHEM Logfile.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
@ -3423,7 +3429,9 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
|
|||||||
<a name="parseProfile"></a>
|
<a name="parseProfile"></a>
|
||||||
<li><b>parseProfile [ Automatic | BSD | IETF | ... | ParseFn | raw ] </b><br>
|
<li><b>parseProfile [ Automatic | BSD | IETF | ... | ParseFn | raw ] </b><br>
|
||||||
<br>
|
<br>
|
||||||
Auswahl eines Parsing-Profiles. Das Attribut ist nur für Device-Model "Collector" verwendbar.
|
Auswahl eines Parsing-Profiles. Das Attribut ist nur für Device-Model "Collector" verwendbar. <br>
|
||||||
|
Im Modus "Automatic" versucht das Modul zu erkennen, ob die empfangenen Daten vom Typ "BSD" oder "IEFT" sind.
|
||||||
|
Konnte der Typ nicht erkannt werden, wird das "raw" Format genutzt und im Log eine Warnung generiert.
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
@ -3648,7 +3656,8 @@ $CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
|
|||||||
<br>
|
<br>
|
||||||
|
|
||||||
<b>Hinweis:</b><br>
|
<b>Hinweis:</b><br>
|
||||||
Bitte mit Vorsicht verwenden! Es kann zu einer Schleife führen wenn der Sender kein EOF verwendet.
|
Wenn der Sender kein EOF verwendet, wird nach Überschreiten eines Puffer-Schwellenwertes das Parsing der Daten erzwungen
|
||||||
|
und die Warnung "Buffer overrun" im FHEM Log ausgegeben.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user