From 0e84ce3ebdf55f1178c44a841ccb68af5c46cbbc Mon Sep 17 00:00:00 2001 From: nasseeder1 Date: Sat, 7 Jan 2023 20:31:12 +0000 Subject: [PATCH] 93_DbLog: contrib 5.5.10 git-svn-id: https://svn.fhem.de/fhem/trunk@26995 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/contrib/DS_Starter/93_DbLog.pm | 53 +++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/fhem/contrib/DS_Starter/93_DbLog.pm b/fhem/contrib/DS_Starter/93_DbLog.pm index 0701f7fa2..4286a9615 100644 --- a/fhem/contrib/DS_Starter/93_DbLog.pm +++ b/fhem/contrib/DS_Starter/93_DbLog.pm @@ -495,6 +495,9 @@ return; sub DbLog_Undef { my $hash = shift; my $name = shift; + + my $dbh = $hash->{DBHU}; + __DbLog_SBP_disconnectOnly ($name, $dbh); delete $hash->{HELPER}{LONGRUN_PID}; @@ -648,6 +651,9 @@ sub DbLog_Attr { } if($aName eq "commitMode") { + my $dbh = $hash->{DBHU}; + __DbLog_SBP_disconnectOnly ($name, $dbh); + if ($init_done == 1) { DbLog_SBP_sendDbDisconnect ($hash, 1); # DB Verbindung und Verbindungsdaten im SubProzess löschen @@ -933,8 +939,11 @@ sub _DbLog_setreopen { ## no critic "not used" my $prop = $paref->{prop}; my $ret; + + my $dbh = $hash->{DBHU}; + __DbLog_SBP_disconnectOnly ($name, $dbh); # lokal - DbLog_SBP_sendDbDisconnect ($hash); + DbLog_SBP_sendDbDisconnect ($hash); # an SBP if (!$prop) { Log3 ($name, 3, "DbLog $name - Reopen requested"); @@ -982,6 +991,9 @@ sub _DbLog_setrereadcfg { ## no critic "not used" my $ret = DbLog_readCfg($hash); return $ret if $ret; + + my $dbh = $hash->{DBHU}; + __DbLog_SBP_disconnectOnly ($name, $dbh); # lokal DbLog_SBP_sendDbDisconnect ($hash, 1); # DB Verbindung und Verbindungsdaten im SubProzess löschen @@ -5073,6 +5085,7 @@ sub DbLog_Get { my $utf8 = defined($hash->{UTF8})?$hash->{UTF8}:0; my $history = $hash->{HELPER}{TH}; my $current = $hash->{HELPER}{TC}; + my ($dbh,$err); if ($a[1] =~ m/^Readings/) { @@ -5158,7 +5171,7 @@ sub DbLog_Get { # extract the Device:Reading arguments into @readings array # Ausgangspunkt ist z.B.: KS300:temperature KS300:rain::delta-h KS300:rain::delta-d - for(my $i = 0; $i < int(@a); $i++) { + for (my $i = 0; $i < int(@a); $i++) { @fld = split(":", $a[$i], 5); $readings[$i][0] = $fld[0]; # Device $readings[$i][1] = $fld[1]; # Reading @@ -5174,8 +5187,33 @@ sub DbLog_Get { Log3 $name, 4, "DbLog $name - ################################################################"; Log3($name, 4, "DbLog $name - main PID: $hash->{PID}, secondary PID: $$"); - $dbh = _DbLog_ConnectNewDBH($hash) || return "Can't connect to database."; - #return "Can't connect to database." if(!$dbh); + my $samePID = $hash->{PID} == $$ ? 1 : 0; + + if ($samePID) { + if (defined $hash->{DBHU}) { + $dbh = $hash->{DBHU}; + my $bool = _DbLog_SBP_pingDB ($name, $dbh); + + if (!$bool) { + delete $hash->{DBHU}; + $dbh = _DbLog_ConnectNewDBH($hash) || return "Can't connect to database."; + $hash->{DBHU} = $dbh; + + Log3 ($name, 4, "DbLog $name - Created new DBHU for PID: $$"); + } + } + else { + $dbh = _DbLog_ConnectNewDBH($hash) || return "Can't connect to database."; + $hash->{DBHU} = $dbh; + + Log3 ($name, 4, "DbLog $name - Created new DBHU for PID: $$"); + } + } + else { + $dbh = _DbLog_ConnectNewDBH($hash) || return "Can't connect to database."; + + Log3 ($name, 4, "DbLog $name - Created new DBHU for PID: $$"); + } # vorbereiten der DB-Abfrage, DB-Modell-abhaengig if ($hash->{MODEL} eq "POSTGRESQL") { @@ -5679,7 +5717,10 @@ sub DbLog_Get { $data{"maxdate$k"} = $maxd[$j]; } - __DbLog_SBP_disconnectOnly ($name, $dbh); + if (!$samePID) { + __DbLog_SBP_disconnectOnly ($name, $dbh); + delete $hash->{DBHU}; + } if($internal) { $internal_data = \$retval; @@ -5898,7 +5939,7 @@ sub DbLog_configcheck { if (!$err && @ce && @se) { $check .= "Connection to database $dbname successfully done.
"; - $check .= "The time required to establish the connection was $ct seconds
"; + $check .= "The time required to establish the connection was $ct seconds.
"; if ($ct > 5.0) { $check .= "Recommendation: The time to establish a connection is much too long. There are performance problems that hinder operation.

";