2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-04 17:36:39 +00:00

93_DbRep: more code refacturing, minor fixes

git-svn-id: https://svn.fhem.de/fhem/trunk@25411 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2022-01-02 22:27:20 +00:00
parent e6d0388c75
commit d96f71e738

View File

@ -57,6 +57,7 @@ no if $] >= 5.017011, warnings => 'experimental::smartmatch';
# Version History intern
my %DbRep_vNotesIntern = (
"8.46.10" => "02.01.2022 more code refacturing, minor fixes ",
"8.46.9" => "01.01.2022 some more code refacturing, minor fixes ",
"8.46.8" => "30.12.2021 some code refacturing and minor bug fixing ",
"8.46.7" => "27.12.2021 some code improvements, insert accept a multiline string ",
@ -792,7 +793,7 @@ sub DbRep_Set {
}
}
DbRep_beforeproc ($hash, "$hash->{LASTCMD}");
DbRep_beforeproc ($hash, $hash->{LASTCMD});
DbRep_Main ($hash,$opt,$prop);
}
elsif ($opt =~ m/delEntries|tableCurrentPurge/ && $hash->{ROLE} ne "Agent") {
@ -2271,7 +2272,7 @@ sub DbRep_Main {
reading => $reading,
ts => $ts,
};
$hash->{HELPER}{RUNNING_PID} = BlockingCall("count_DoParse", $params, "count_ParseDone", $to, "DbRep_ParseAborted", $hash);
$hash->{HELPER}{RUNNING_PID} = BlockingCall("DbRep_count_DoParse", $params, "DbRep_count_ParseDone", $to, "DbRep_ParseAborted", $hash);
}
elsif ($opt eq "averageValue") {
$params = {
@ -2284,7 +2285,7 @@ sub DbRep_Main {
ts => $ts,
};
$hash->{HELPER}{RUNNING_PID} = BlockingCall("averval_DoParse", $params, "averval_ParseDone", $to, "DbRep_ParseAborted", $hash);
$hash->{HELPER}{RUNNING_PID} = BlockingCall("DbRep_averval_DoParse", $params, "DbRep_averval_ParseDone", $to, "DbRep_ParseAborted", $hash);
}
elsif ($opt eq "fetchrows") {
$params = {
@ -3249,7 +3250,7 @@ return ($runtime,$runtime_string,$runtime_string_first,$runtime_string_next,$ll)
####################################################################################################
# nichtblockierende DB-Abfrage averageValue
####################################################################################################
sub averval_DoParse {
sub DbRep_averval_DoParse {
my $paref = shift;
my $hash = $paref->{hash};
my $name = $paref->{name};
@ -3264,7 +3265,7 @@ sub averval_DoParse {
my ($gts,$gtsstr) = (0,q{}); # Variablen für Grünlandtemperatursumme GTS
my ($sql,$sth,$selspec,$addon,$gtsreached);
my ($sql,$sth,$ret,$selspec,$addon,$gtsreached);
my $bst = [gettimeofday]; # Background-Startzeit
@ -3333,15 +3334,9 @@ sub averval_DoParse {
$sql = DbRep_createSelectSql($hash,$table,$selspec,$device,$reading,undef,undef,$addon);
}
Log3 ($name, 4, "DbRep $name - SQL execute: $sql");
eval { $sth = $dbh->prepare($sql);
$sth->execute();
}
or do { $err = encode_base64($@, "");
Log3 ($name, 2, "DbRep $name - $@");
$dbh->disconnect;
return "$name|$err";
};
($ret, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, $sql);
return $ret if ($ret);
my @line = $sth->fetchrow_array();
@ -3388,14 +3383,8 @@ sub averval_DoParse {
$sql = DbRep_createSelectSql($hash,$table,$selspec,$device,$reading,"'$bsel'","'$esel'",$addon);
Log3 ($name, 4, "DbRep $name - SQL execute: $sql");
eval { $sth = $dbh->prepare($sql);
$sth->execute();
}
or do { $err = encode_base64($@,"");
Log3 ($name, 2, "DbRep $name - $@");
$dbh->disconnect;
return "$name|$err";
};
($ret, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, $sql);
return $ret if ($ret);
my $val = $sth->fetchrow_array();
@ -3513,14 +3502,8 @@ sub averval_DoParse {
}
Log3 ($name, 4, "DbRep $name - SQL execute: $sql");
eval { $sth = $dbh->prepare($sql);
$sth->execute();
}
or do { $err = encode_base64($@,"");
Log3 ($name, 2, "DbRep $name - $@");
$dbh->disconnect;
return "$name|$err";
};
($ret, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, $sql);
return $ret if ($ret);
my @twm_array = map { $_->[0]."_ESC_".$_->[1] } @{$sth->fetchall_arrayref()};
@ -3577,7 +3560,7 @@ sub averval_DoParse {
my ($wrt,$irowdone);
if($prop =~ /writeToDB/) { # Ergebnisse in Datenbank schreiben
($wrt,$irowdone,$err) = DbRep_OutputWriteToDB($name,$device,$reading,$wrstr,$qlf);
($wrt,$irowdone,$err) = DbRep_OutputWriteToDB ($name,$device,$reading,$wrstr,$qlf);
if ($err) {
Log3 ($hash->{NAME}, 2, "DbRep $name - $err");
@ -3595,25 +3578,23 @@ sub averval_DoParse {
my $brt = tv_interval($bst); # Background-Laufzeit ermitteln
$rt = $rt.",".$brt;
return "$name|''|$arrstr|$device|$reading|$rt|$irowdone|$gtsstr|$gtsreached";
return "$name|0|$arrstr|$device|$reading|$rt|$irowdone|$gtsstr|$gtsreached";
}
####################################################################################################
# Auswertungsroutine der nichtblockierenden DB-Abfrage averageValue
####################################################################################################
sub averval_ParseDone {
sub DbRep_averval_ParseDone {
my $string = shift;
my @a = split "\\|", $string;
my $name = $a[0];
my $err = $a[1] ? decode_base64($a[1]) : undef;
my $arrstr = decode_base64($a[2]);
my $device = decode_base64($a[3]);
$device =~ s/[^A-Za-z\/\d_\.-]/\//g;
my $arrstr = $a[2] ? decode_base64($a[2]) : undef;
my $device = $a[3] ? decode_base64($a[3]) : undef;
my $reading = $a[4];
$reading =~ s/[^A-Za-z\/\d_\.-]/\//g;
my $bt = $a[5];
my $irowdone = $a[6];
my $gtsstr = $a[7] ? decode_base64($a[8]) : undef;
my $gtsstr = $a[7] ? decode_base64($a[7]) : undef;
my $gtsreached = $a[8];
my $hash = $defs{$name};
@ -3625,7 +3606,7 @@ sub averval_ParseDone {
delete($hash->{HELPER}{RUNNING_PID});
my ($erread, $state) = DbRep_afterproc ($hash, "$hash->{LASTCMD}"); # Befehl nach Procedure ausführen
my ($erread, $state) = DbRep_afterproc ($hash, $hash->{LASTCMD}); # Befehl nach Procedure ausführen
if ($err) {
ReadingsSingleUpdateValue ($hash, "errortext", $err, 1);
@ -3633,7 +3614,9 @@ sub averval_ParseDone {
return;
}
my ($rt,$brt) = split ",", $bt;
my ($rt,$brt) = split ",", $bt;
$device =~ s/[^A-Za-z\/\d_\.-]/\//g;
$reading =~ s/[^A-Za-z\/\d_\.-]/\//g;
no warnings 'uninitialized';
@ -3688,6 +3671,7 @@ sub averval_ParseDone {
$rds = $reading."__" if ($reading);
$reading_runtime_string = $rsf.$ds.$rds."AVG".$acf."__".$runtime_string;
}
if($acf eq "DMGWS") {
ReadingsBulkUpdateValue ($hash, $reading_runtime_string, looks_like_number $c ? sprintf "%.1f",$c : $c);
}
@ -3706,7 +3690,7 @@ return;
####################################################################################################
# nichtblockierende DB-Abfrage count
####################################################################################################
sub count_DoParse {
sub DbRep_count_DoParse {
my $paref = shift;
my $hash = $paref->{hash};
my $name = $paref->{name};
@ -3718,15 +3702,15 @@ sub count_DoParse {
my $ced = AttrVal($name, "countEntriesDetail", 0);
my $vf = AttrVal($name, "valueFilter", "");
my ($dbh,$sql,$sth,$err);
my ($sql,$sth,$ret);
my $bst = [gettimeofday]; # Background-Startzeit
my $bst = [gettimeofday]; # Background-Startzeit
($err,$dbh) = DbRep_dbConnect($name, 0);
my ($err,$dbh,$dbmodel) = DbRep_dbConnect($name, 0);
if ($err) {
$err = encode_base64($@,"");
Log3 ($name, 2, "DbRep $name - $@");
return "$name|''|$device|''|$err|$table";
return "$name|$err";
}
no warnings 'uninitialized';
@ -3739,8 +3723,7 @@ sub count_DoParse {
my @ts = split("\\|", $ts);
Log3 ($name, 5, "DbRep $name - Timestamp-Array: \n@ts");
# SQL-Startzeit
my $st = [gettimeofday];
my $st = [gettimeofday]; # SQL-Startzeit
my ($arrstr,@rsf,$ttail);
my $addon = '';
@ -3775,15 +3758,8 @@ sub count_DoParse {
}
Log3 ($name, 4, "DbRep $name - SQL execute: $sql");
eval{ $sth = $dbh->prepare($sql);
$sth->execute();
};
if ($@) {
$err = encode_base64($@,"");
Log3 ($name, 2, "DbRep $name - $@");
$dbh->disconnect;
return "$name|''|$device|''|$err|$table";
}
($ret, $sth) = DbRep_prepareExecuteQuery ($name, $dbh, $sql);
return $ret if ($ret);
if($ced) { # detaillierter Readings-Count
while (my @line = $sth->fetchrow_array()) {
@ -3815,31 +3791,31 @@ sub count_DoParse {
$rt = $rt.",".$brt;
return "$name|$arrstr|$device|$rt|0|$table";
return "$name|0|$arrstr|$device|$rt|$table";
}
####################################################################################################
# Auswertungsroutine der nichtblockierenden DB-Abfrage count
####################################################################################################
sub count_ParseDone {
sub DbRep_count_ParseDone {
my $string = shift;
my @a = split("\\|",$string);
my $hash = $defs{$a[0]};
my $name = $hash->{NAME};
my $arrstr = decode_base64($a[1]);
my $device = decode_base64($a[2]);
$device =~ s/[^A-Za-z\/\d_\.-]/\//g;
my $bt = $a[3];
my ($rt,$brt) = split(",", $bt);
my $err = $a[4]?decode_base64($a[4]):undef;
my $name = $a[0];
my $err = $a[1] ? decode_base64($a[1]) : undef;
my $arrstr = $a[2] ? decode_base64($a[2]) : undef;
my $device = $a[3] ? decode_base64($a[3]) : undef;
my $bt = $a[4];
my $table = $a[5];
my $hash = $defs{$name};
my $reading_runtime_string;
Log3 ($name, 5, qq{DbRep $name - BlockingCall finished PID "$hash->{HELPER}{RUNNING_PID}{pid}"});
delete($hash->{HELPER}{RUNNING_PID});
my ($erread, $state) = DbRep_afterproc ($hash, "$hash->{LASTCMD}"); # Befehl nach Procedure ausführen
my ($erread, $state) = DbRep_afterproc ($hash, $hash->{LASTCMD}); # Befehl nach Procedure ausführen
if ($err) {
ReadingsSingleUpdateValue ($hash, "errortext", $err, 1);
@ -3847,16 +3823,17 @@ sub count_ParseDone {
return;
}
my ($rt,$brt) = split ",", $bt;
$device =~ s/[^A-Za-z\/\d_\.-]/\//g;
Log3 ($name, 5, "DbRep $name - SQL result decoded: $arrstr") if($arrstr);
# only for this block because of warnings if details of readings are not set
no warnings 'uninitialized';
# Readingaufbereitung
readingsBeginUpdate($hash);
my @arr = split("\\|", $arrstr);
foreach my $row (@arr) {
for my $row (@arr) {
my @a = split("#", $row);
my $runtime_string = $a[0];
my $reading = $a[1];
@ -3871,10 +3848,12 @@ sub count_ParseDone {
my ($ds,$rds) = ("","");
$ds = $device."__" if ($device);
$rds = $reading."__" if ($reading);
if(AttrVal($name,"countEntriesDetail",0)) {
# $reading_runtime_string = $rsf.$ds.$rds."COUNT_".$table."__".$runtime_string;
$reading_runtime_string = $rsf.$rds."COUNT_".$table."__".$runtime_string;
} else {
}
else {
$reading_runtime_string = $rsf."COUNT_".$table."__".$runtime_string;
}
}
@ -3882,8 +3861,8 @@ sub count_ParseDone {
ReadingsBulkUpdateValue ($hash, $reading_runtime_string, $c ? $c : "-");
}
ReadingsBulkUpdateTimeState($hash,$brt,$rt,$state);
readingsEndUpdate ($hash, 1);
ReadingsBulkUpdateTimeState ($hash,$brt,$rt,$state);
readingsEndUpdate ($hash, 1);
return;
}
@ -4094,7 +4073,7 @@ sub maxval_ParseDone {
delete($hash->{HELPER}{RUNNING_PID});
my ($erread, $state) = DbRep_afterproc ($hash, "$hash->{LASTCMD}"); # Befehl nach Procedure ausführen
my ($erread, $state) = DbRep_afterproc ($hash, $hash->{LASTCMD}); # Befehl nach Procedure ausführen
if ($err) {
ReadingsSingleUpdateValue ($hash, "errortext", $err, 1);
@ -4343,7 +4322,7 @@ sub minval_ParseDone {
delete($hash->{HELPER}{RUNNING_PID});
my ($erread, $state) = DbRep_afterproc ($hash, "$hash->{LASTCMD}"); # Befehl nach Procedure ausführen
my ($erread, $state) = DbRep_afterproc ($hash, $hash->{LASTCMD}); # Befehl nach Procedure ausführen
if ($err) {
ReadingsSingleUpdateValue ($hash, "errortext", $err, 1);
@ -4694,7 +4673,7 @@ sub diffval_ParseDone {
delete($hash->{HELPER}{RUNNING_PID});
my ($erread, $state) = DbRep_afterproc ($hash, "$hash->{LASTCMD}"); # Befehl nach Procedure ausführen
my ($erread, $state) = DbRep_afterproc ($hash, $hash->{LASTCMD}); # Befehl nach Procedure ausführen
if ($err) {
ReadingsSingleUpdateValue ($hash, "errortext", $err, 1);
@ -4901,7 +4880,7 @@ sub sumval_ParseDone {
delete($hash->{HELPER}{RUNNING_PID});
my ($erread, $state) = DbRep_afterproc ($hash, "$hash->{LASTCMD}"); # Befehl nach Procedure ausführen
my ($erread, $state) = DbRep_afterproc ($hash, $hash->{LASTCMD}); # Befehl nach Procedure ausführen
if ($err) {
ReadingsSingleUpdateValue ($hash, "errortext", $err, 1);
@ -5026,7 +5005,7 @@ sub del_ParseDone {
delete($hash->{HELPER}{RUNNING_PID});
my ($erread, $state) = DbRep_afterproc ($hash, "$hash->{LASTCMD}"); # Befehl nach Procedure ausführen
my ($erread, $state) = DbRep_afterproc ($hash, $hash->{LASTCMD}); # Befehl nach Procedure ausführen
if ($err) {
ReadingsSingleUpdateValue ($hash, "errortext", $err, 1);
@ -5305,7 +5284,7 @@ sub currentfillup_Done {
Log3 ($name, 5, qq{DbRep $name - BlockingCall finished PID "$hash->{HELPER}{RUNNING_PID}{pid}"});
my ($erread, $state) = DbRep_afterproc ($hash, "$hash->{LASTCMD}"); # Befehl nach Procedure ausführen
my ($erread, $state) = DbRep_afterproc ($hash, $hash->{LASTCMD}); # Befehl nach Procedure ausführen
delete($hash->{HELPER}{RUNNING_PID});
@ -5789,7 +5768,7 @@ sub fetchrows_ParseDone {
delete($hash->{HELPER}{RUNNING_PID});
my ($erread, $state) = DbRep_afterproc($hash, "$hash->{LASTCMD}"); # Befehl nach Procedure ausführen
my ($erread, $state) = DbRep_afterproc($hash, $hash->{LASTCMD}); # Befehl nach Procedure ausführen
if ($err) {
ReadingsSingleUpdateValue ($hash, "errortext", $err, 1);