2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-04 05:16:45 +00:00

93_Log2Syslog: V4.5.1

git-svn-id: https://svn.fhem.de/fhem/trunk@17101 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2018-08-07 20:54:44 +00:00
parent 7a48c452cd
commit 6282e9cefd

View File

@ -30,6 +30,7 @@
######################################################################################################################
# Versions History:
#
# 4.5.1 07.08.2018 BSD Regex changed, setpayload of BSD changed
# 4.5.0 06.08.2018 Regex capture groups used in parsePayload to set variables, parsing of BSD changed,
# Attribute "makeMsgEvent" added
# 4.4.0 04.08.2018 Attribute "outputFields" added
@ -75,7 +76,7 @@ eval "use Net::Domain qw(hostname hostfqdn hostdomain domainname);1" or my $Mis
#
sub Log2Syslog_Log3slog($$$);
my $Log2SyslogVn = "4.5.0";
my $Log2SyslogVn = "4.5.1";
# Mappinghash BSD-Formatierung Monat
my %Log2Syslog_BSDMonth = (
@ -431,7 +432,7 @@ sub Log2Syslog_parsePayload($$) {
my $severity = "";
my $facility = "";
my @evf = split(",",AttrVal($name, "outputFields", "FAC,SEV,ID,CONT")); # auszugebene Felder im Event/Reading
my ($Mmm,$dd,$delimiter,$day,$ietf,$err,$pl);
my ($Mmm,$dd,$delimiter,$day,$ietf,$err,$pl,$tail);
# Hash zur Umwandlung Felder in deren Variablen
my ($prival,$ts,$host,$date,$time,$id,$pid,$mid,$sdfield,$cont);
@ -471,25 +472,36 @@ sub Log2Syslog_parsePayload($$) {
} elsif ($pp eq "BSD") {
# BSD Protokollformat https://tools.ietf.org/html/rfc3164
# Beispiel data "<$prival>$month $day $time $myhost $id: : $otp"
$data =~ /^<(?<prival>\d{1,3})>(((((\s*(?<month>\w{3})\s*)?(?<day>\d{1,2})\s*)?(?<time>\d{2}:\d{2}:\d{2})\s*)?(?<host>\S+)\s*)?(?<id>[a-zA-Z_0-9.]*))?(?<delimiter>\W*)(?<cont>.*)$/;
$data =~ /^<(?<prival>\d{1,3})>(?<tail>.*)$/;
$prival = $+{prival}; # must
$tail = $+{tail};
$tail =~ /^((?<month>\w{3})\s+(?<day>\d{1,2})\s+(?<time>\d{2}:\d{2}:\d{2}))?\s+(?<tail>.*)$/;
$Mmm = $+{month}; # should
$dd = $+{day}; # should
$time = $+{time}; # should
$tail = $+{tail};
if( $Mmm && $dd && $time ) {
my $month = $Log2Syslog_BSDMonth{$Mmm};
$day = (length($dd) == 1)?("0".$dd):$dd;
$ts = "$year-$month-$day $time";
}
if($ts) {
# Annahme: wenn Timestamp gesetzt, wird der Rest der Message ebenfalls dem Standard entsprechen
$tail =~ /^(?<host>[^\s]*)?\s(?<tail>.*)$/;
$host = $+{host}; # should
$tail = $+{tail};
$tail =~ /^(?<id>\w{1,32}\W:?)?(?<cont>.*)$/;
$id = $+{id}; # should
$delimiter = $+{delimiter}; # should
$cont = $+{cont}; # should
} else {
# andernfalls eher kein Standardaufbau
$cont = $tail;
}
if(!$prival) {
$err = 1;
Log2Syslog_Log3slog ($hash, 1, "Log2Syslog $name - error parse msg -> $data");
} else {
if( $Mmm && $dd && $time =~ /(d{2}:\d{2}:\d{2})/ ) {
my $month = $Log2Syslog_BSDMonth{$Mmm};
$day = (length($dd) == 1)?("0".$dd):$dd;
$ts = "$year-$month-$day $time";
}
if(looks_like_number($prival)) {
$facility = int($prival/8) if($prival >= 0 && $prival <= 191);
@ -501,7 +513,7 @@ sub Log2Syslog_parsePayload($$) {
Log2Syslog_Log3slog ($hash, 1, "Log2Syslog $name - error parse msg -> $data");
}
Log2Syslog_Log3slog($name, 4, "$name - parsed message -> FAC: $fac, SEV: $sev, TS: $ts, HOST: $host, ID: $id, CONT: $cont");
Log2Syslog_Log3slog($name, 4, "$name - parsed message -> FAC: $fac, SEV: $sev, MM: $Mmm, Day: $dd, TIME: $time, TS: $ts, HOST: $host, ID: $id, CONT: $cont");
$host = "" if($host eq "-");
$phost = $host?$host:$phost;
@ -1173,7 +1185,7 @@ sub Log2Syslog_setpayload ($$$$$$) {
$day =~ s/0/ / if($day =~ m/^0.*$/); # in Tagen < 10 muss 0 durch Space ersetzt werden
$ident = substr($ident,0, $RFC3164len{TAG}); # Länge TAG Feld begrenzen
no warnings 'uninitialized';
$data = "<$prival>$month $day $time $myhost $ident: : $otp";
$data = "<$prival>$month $day $time $myhost $ident :$otp";
use warnings;
$data = substr($data,0, ($RFC3164len{DL}-1)); # Länge Total begrenzen
}