diff --git a/fhem/CHANGED b/fhem/CHANGED index ac472f25f..037051a2f 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,7 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - feature: 93_DbRep: V2.6.0, new get-command "procinfo" (MySQL), default + timeout changed to 86400 - bugfix: 93_DbRep: minor bugfixes (thanks to Omega) - feature: 49_TBot_List: configure also add with attr confirmUnsolicited - feature: 49_TBot_List: configure confirm delete as attribute confirmDelete diff --git a/fhem/FHEM/93_DbRep.pm b/fhem/FHEM/93_DbRep.pm index 92c2a90ca..8a56e6d57 100644 --- a/fhem/FHEM/93_DbRep.pm +++ b/fhem/FHEM/93_DbRep.pm @@ -41,6 +41,7 @@ ########################################################################################################################### # Versions History: # +# 5.6.0 17.07.2017 default timeout changed to 86400, new get-command "procinfo" (MySQL) # 5.5.2 16.07.2017 dbmeta_DoParse -> show variables (no global) # 5.5.1 16.07.2017 wrong text output in state when restoreMySQL was aborted by timeout # 5.5.0 10.07.2017 replace $hash->{dbloghash}{DBMODEL} by $hash->{dbloghash}{MODEL} (DbLog was changed) @@ -233,7 +234,7 @@ use Encode qw(encode_utf8); sub DbRep_Main($$;$); -my $DbRepVersion = "5.5.2"; +my $DbRepVersion = "5.6.0"; my %dbrep_col = ("DEVICE" => 64, "TYPE" => 64, @@ -572,18 +573,19 @@ sub DbRep_Get($@) { my $dblogdevice = $hash->{HELPER}{DBLOGDEVICE}; $hash->{dbloghash} = $defs{$dblogdevice}; my $dbmodel = $hash->{dbloghash}{MODEL}; - my $to = AttrVal($name, "timeout", "60"); + my $to = AttrVal($name, "timeout", "86400"); my $getlist = "Unknown argument $opt, choose one of ". "svrinfo:noArg ". (($dbmodel eq "MYSQL")?"dbstatus:noArg ":""). (($dbmodel eq "MYSQL")?"tableinfo:noArg ":""). + (($dbmodel eq "MYSQL")?"procinfo:noArg ":""). (($dbmodel eq "MYSQL")?"dbvars:noArg ":"") ; return if(IsDisabled($name)); - if ($opt eq "dbvars" || $opt eq "dbstatus" || $opt eq "tableinfo") { + if ($opt =~ /dbvars|dbstatus|tableinfo|procinfo/) { return "The operation \"$opt\" isn't available with database type $dbmodel" if ($dbmodel ne 'MYSQL'); return "Dump is running - try again later !" if($hash->{HELPER}{RUNNING_BACKUP_CLIENT}); ReadingsSingleUpdateValue ($hash, "state", "running", 1); @@ -952,7 +954,7 @@ sub DbRep_Connect($) { sub DbRep_Main($$;$) { my ($hash,$opt,$cmd) = @_; my $name = $hash->{NAME}; - my $to = AttrVal($name, "timeout", "60"); + my $to = AttrVal($name, "timeout", "86400"); my $reading = AttrVal($name, "reading", "%"); my $aggregation = AttrVal($name, "aggregation", "no"); # wichtig !! aggregation niemals "undef" my $device = AttrVal($name, "device", "%"); @@ -1351,11 +1353,11 @@ sub averval_DoParse($) { Log3 ($name, 5, "DbRep $name - Timestamp-Array: \n@ts"); #vorbereiten der DB-Abfrage, DB-Modell-abhaengig - if ($dbloghash->{DBMODEL} eq "POSTGRESQL") { + if ($dbloghash->{MODEL} eq "POSTGRESQL") { $selspec = "AVG(VALUE::numeric)"; - } elsif ($dbloghash->{DBMODEL} eq "MYSQL") { + } elsif ($dbloghash->{MODEL} eq "MYSQL") { $selspec = "AVG(VALUE)"; - } elsif ($dbloghash->{DBMODEL} eq "SQLITE") { + } elsif ($dbloghash->{MODEL} eq "SQLITE") { $selspec = "AVG(VALUE)"; } else { $selspec = "AVG(VALUE)"; @@ -2127,7 +2129,7 @@ sub diffval_DoParse($) { my $dbconn = $dbloghash->{dbconn}; my $dbuser = $dbloghash->{dbuser}; my $dblogname = $dbloghash->{NAME}; - my $dbmodel = $dbloghash->{DBMODEL}; + my $dbmodel = $dbloghash->{MODEL}; my $dbpassword = $attr{"sec$dblogname"}{secret}; my ($dbh,$sql,$sth,$err); @@ -2516,11 +2518,11 @@ sub sumval_DoParse($) { Log3 ($name, 5, "DbRep $name - Timestamp-Array: \n@ts"); #vorbereiten der DB-Abfrage, DB-Modell-abhaengig - if ($dbloghash->{DBMODEL} eq "POSTGRESQL") { + if ($dbloghash->{MODEL} eq "POSTGRESQL") { $selspec = "SUM(VALUE::numeric)"; - } elsif ($dbloghash->{DBMODEL} eq "MYSQL") { + } elsif ($dbloghash->{MODEL} eq "MYSQL") { $selspec = "SUM(VALUE)"; - } elsif ($dbloghash->{DBMODEL} eq "SQLITE") { + } elsif ($dbloghash->{MODEL} eq "SQLITE") { $selspec = "SUM(VALUE)"; } else { $selspec = "SUM(VALUE)"; @@ -2840,11 +2842,11 @@ sub insert_Push($) { my $st = [gettimeofday]; # insert history mit/ohne primary key - if ($usepkh && $dbloghash->{DBMODEL} eq 'MYSQL') { + if ($usepkh && $dbloghash->{MODEL} eq 'MYSQL') { eval { $sth = $dbh->prepare("INSERT IGNORE INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)"); }; - } elsif ($usepkh && $dbloghash->{DBMODEL} eq 'SQLITE') { + } elsif ($usepkh && $dbloghash->{MODEL} eq 'SQLITE') { eval { $sth = $dbh->prepare("INSERT OR IGNORE INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)"); }; - } elsif ($usepkh && $dbloghash->{DBMODEL} eq 'POSTGRESQL') { + } elsif ($usepkh && $dbloghash->{MODEL} eq 'POSTGRESQL') { eval { $sth = $dbh->prepare("INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?) ON CONFLICT DO NOTHING"); }; } else { eval { $sth = $dbh->prepare("INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)"); }; @@ -3359,7 +3361,7 @@ sub expfile_ParseDone($) { readingsEndUpdate($hash, 1); my $rows = $ds.$rds.$nrows; - Log3 ($name, 3, "DbRep $name - Number of exported datasets from $hash->{DATABASE} to file ".AttrVal($name, "expimpfile", undef).": $rows"); + Log3 ($name, 3, "DbRep $name - Number of exported datasets from $hash->{DATABASE} to file ".AttrVal($name, "expimpfile", undef).": $rows."); delete($hash->{HELPER}{RUNNING_PID}); @@ -3423,11 +3425,11 @@ sub impfile_Push($) { # "2016-09-25 08:53:56","STP_5000","SMAUTILS","etotal: 11859.573","etotal","11859.573","" # insert history mit/ohne primary key - if ($usepkh && $dbloghash->{DBMODEL} eq 'MYSQL') { + if ($usepkh && $dbloghash->{MODEL} eq 'MYSQL') { eval { $sth = $dbh->prepare_cached("INSERT IGNORE INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)"); }; - } elsif ($usepkh && $dbloghash->{DBMODEL} eq 'SQLITE') { + } elsif ($usepkh && $dbloghash->{MODEL} eq 'SQLITE') { eval { $sth = $dbh->prepare_cached("INSERT OR IGNORE INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)"); }; - } elsif ($usepkh && $dbloghash->{DBMODEL} eq 'POSTGRESQL') { + } elsif ($usepkh && $dbloghash->{MODEL} eq 'POSTGRESQL') { eval { $sth = $dbh->prepare_cached("INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?) ON CONFLICT DO NOTHING"); }; } else { eval { $sth = $dbh->prepare_cached("INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)"); }; @@ -3803,7 +3805,7 @@ sub dbmeta_DoParse($) { my $dbuser = $dbloghash->{dbuser}; my $dblogname = $dbloghash->{NAME}; my $dbpassword = $attr{"sec$dblogname"}{secret}; - my $dbmodel = $dbloghash->{DBMODEL}; + my $dbmodel = $dbloghash->{MODEL}; my $utf8 = defined($hash->{UTF8})?$hash->{UTF8}:0; my ($dbh,$sth,$sql); my $err; @@ -3829,7 +3831,7 @@ sub dbmeta_DoParse($) { my $param = AttrVal($name, "showVariables", "%") if($opt eq "dbvars"); $param = AttrVal($name, "showSvrInfo", "[A-Z_]") if($opt eq "svrinfo"); $param = AttrVal($name, "showStatus", "%") if($opt eq "dbstatus"); - $param = "1" if($opt eq "tableinfo"); # Dummy-Eintrag für einen Schleifendurchlauf + $param = "1" if($opt =~ /tableinfo|procinfo/); # Dummy-Eintrag für einen Schleifendurchlauf my @parlist = split(",",$param); # SQL-Startzeit @@ -3857,6 +3859,8 @@ sub dbmeta_DoParse($) { $sql = "show global status like '$ple';"; } elsif ($opt eq "tableinfo") { $sql = "show Table Status from $db;"; + } elsif ($opt eq "procinfo") { + $sql = "show processlist;"; } Log3($name, 4, "DbRep $name - SQL execute: $sql"); @@ -3903,7 +3907,27 @@ sub dbmeta_DoParse($) { push(@row_array, $line->{Name}.".comment ".$line->{Comment}) if($line->{Comment}); } } - } else { + } elsif ($opt eq "procinfo") { + my $res = "
| ID | "; + $res .= "USER | "; + $res .= "HOST | "; + $res .= "DB | "; + $res .= "CMD | "; + $res .= "TIME_Sec | "; + $res .= "STATE | "; + $res .= "INFO | "; + $res .= "PROGRESS | /g; + $res .= " |
| ".$row." |