mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-01-31 12:49:34 +00:00
93_DbRep: V2.6.0, new get-command "procinfo" (MySQL), default timeout changed to 86400
git-svn-id: https://svn.fhem.de/fhem/trunk@14738 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
321a881f6f
commit
0cc642744a
@ -1,5 +1,7 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
# 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.
|
# 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)
|
- bugfix: 93_DbRep: minor bugfixes (thanks to Omega)
|
||||||
- feature: 49_TBot_List: configure also add with attr confirmUnsolicited
|
- feature: 49_TBot_List: configure also add with attr confirmUnsolicited
|
||||||
- feature: 49_TBot_List: configure confirm delete as attribute confirmDelete
|
- feature: 49_TBot_List: configure confirm delete as attribute confirmDelete
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
###########################################################################################################################
|
###########################################################################################################################
|
||||||
# Versions History:
|
# 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.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.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)
|
# 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($$;$);
|
sub DbRep_Main($$;$);
|
||||||
|
|
||||||
my $DbRepVersion = "5.5.2";
|
my $DbRepVersion = "5.6.0";
|
||||||
|
|
||||||
my %dbrep_col = ("DEVICE" => 64,
|
my %dbrep_col = ("DEVICE" => 64,
|
||||||
"TYPE" => 64,
|
"TYPE" => 64,
|
||||||
@ -572,18 +573,19 @@ sub DbRep_Get($@) {
|
|||||||
my $dblogdevice = $hash->{HELPER}{DBLOGDEVICE};
|
my $dblogdevice = $hash->{HELPER}{DBLOGDEVICE};
|
||||||
$hash->{dbloghash} = $defs{$dblogdevice};
|
$hash->{dbloghash} = $defs{$dblogdevice};
|
||||||
my $dbmodel = $hash->{dbloghash}{MODEL};
|
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 ".
|
my $getlist = "Unknown argument $opt, choose one of ".
|
||||||
"svrinfo:noArg ".
|
"svrinfo:noArg ".
|
||||||
(($dbmodel eq "MYSQL")?"dbstatus:noArg ":"").
|
(($dbmodel eq "MYSQL")?"dbstatus:noArg ":"").
|
||||||
(($dbmodel eq "MYSQL")?"tableinfo:noArg ":"").
|
(($dbmodel eq "MYSQL")?"tableinfo:noArg ":"").
|
||||||
|
(($dbmodel eq "MYSQL")?"procinfo:noArg ":"").
|
||||||
(($dbmodel eq "MYSQL")?"dbvars:noArg ":"")
|
(($dbmodel eq "MYSQL")?"dbvars:noArg ":"")
|
||||||
;
|
;
|
||||||
|
|
||||||
return if(IsDisabled($name));
|
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 "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});
|
return "Dump is running - try again later !" if($hash->{HELPER}{RUNNING_BACKUP_CLIENT});
|
||||||
ReadingsSingleUpdateValue ($hash, "state", "running", 1);
|
ReadingsSingleUpdateValue ($hash, "state", "running", 1);
|
||||||
@ -952,7 +954,7 @@ sub DbRep_Connect($) {
|
|||||||
sub DbRep_Main($$;$) {
|
sub DbRep_Main($$;$) {
|
||||||
my ($hash,$opt,$cmd) = @_;
|
my ($hash,$opt,$cmd) = @_;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
my $to = AttrVal($name, "timeout", "60");
|
my $to = AttrVal($name, "timeout", "86400");
|
||||||
my $reading = AttrVal($name, "reading", "%");
|
my $reading = AttrVal($name, "reading", "%");
|
||||||
my $aggregation = AttrVal($name, "aggregation", "no"); # wichtig !! aggregation niemals "undef"
|
my $aggregation = AttrVal($name, "aggregation", "no"); # wichtig !! aggregation niemals "undef"
|
||||||
my $device = AttrVal($name, "device", "%");
|
my $device = AttrVal($name, "device", "%");
|
||||||
@ -1351,11 +1353,11 @@ sub averval_DoParse($) {
|
|||||||
Log3 ($name, 5, "DbRep $name - Timestamp-Array: \n@ts");
|
Log3 ($name, 5, "DbRep $name - Timestamp-Array: \n@ts");
|
||||||
|
|
||||||
#vorbereiten der DB-Abfrage, DB-Modell-abhaengig
|
#vorbereiten der DB-Abfrage, DB-Modell-abhaengig
|
||||||
if ($dbloghash->{DBMODEL} eq "POSTGRESQL") {
|
if ($dbloghash->{MODEL} eq "POSTGRESQL") {
|
||||||
$selspec = "AVG(VALUE::numeric)";
|
$selspec = "AVG(VALUE::numeric)";
|
||||||
} elsif ($dbloghash->{DBMODEL} eq "MYSQL") {
|
} elsif ($dbloghash->{MODEL} eq "MYSQL") {
|
||||||
$selspec = "AVG(VALUE)";
|
$selspec = "AVG(VALUE)";
|
||||||
} elsif ($dbloghash->{DBMODEL} eq "SQLITE") {
|
} elsif ($dbloghash->{MODEL} eq "SQLITE") {
|
||||||
$selspec = "AVG(VALUE)";
|
$selspec = "AVG(VALUE)";
|
||||||
} else {
|
} else {
|
||||||
$selspec = "AVG(VALUE)";
|
$selspec = "AVG(VALUE)";
|
||||||
@ -2127,7 +2129,7 @@ sub diffval_DoParse($) {
|
|||||||
my $dbconn = $dbloghash->{dbconn};
|
my $dbconn = $dbloghash->{dbconn};
|
||||||
my $dbuser = $dbloghash->{dbuser};
|
my $dbuser = $dbloghash->{dbuser};
|
||||||
my $dblogname = $dbloghash->{NAME};
|
my $dblogname = $dbloghash->{NAME};
|
||||||
my $dbmodel = $dbloghash->{DBMODEL};
|
my $dbmodel = $dbloghash->{MODEL};
|
||||||
my $dbpassword = $attr{"sec$dblogname"}{secret};
|
my $dbpassword = $attr{"sec$dblogname"}{secret};
|
||||||
my ($dbh,$sql,$sth,$err);
|
my ($dbh,$sql,$sth,$err);
|
||||||
|
|
||||||
@ -2516,11 +2518,11 @@ sub sumval_DoParse($) {
|
|||||||
Log3 ($name, 5, "DbRep $name - Timestamp-Array: \n@ts");
|
Log3 ($name, 5, "DbRep $name - Timestamp-Array: \n@ts");
|
||||||
|
|
||||||
#vorbereiten der DB-Abfrage, DB-Modell-abhaengig
|
#vorbereiten der DB-Abfrage, DB-Modell-abhaengig
|
||||||
if ($dbloghash->{DBMODEL} eq "POSTGRESQL") {
|
if ($dbloghash->{MODEL} eq "POSTGRESQL") {
|
||||||
$selspec = "SUM(VALUE::numeric)";
|
$selspec = "SUM(VALUE::numeric)";
|
||||||
} elsif ($dbloghash->{DBMODEL} eq "MYSQL") {
|
} elsif ($dbloghash->{MODEL} eq "MYSQL") {
|
||||||
$selspec = "SUM(VALUE)";
|
$selspec = "SUM(VALUE)";
|
||||||
} elsif ($dbloghash->{DBMODEL} eq "SQLITE") {
|
} elsif ($dbloghash->{MODEL} eq "SQLITE") {
|
||||||
$selspec = "SUM(VALUE)";
|
$selspec = "SUM(VALUE)";
|
||||||
} else {
|
} else {
|
||||||
$selspec = "SUM(VALUE)";
|
$selspec = "SUM(VALUE)";
|
||||||
@ -2840,11 +2842,11 @@ sub insert_Push($) {
|
|||||||
my $st = [gettimeofday];
|
my $st = [gettimeofday];
|
||||||
|
|
||||||
# insert history mit/ohne primary key
|
# 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 (?,?,?,?,?,?,?)"); };
|
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 (?,?,?,?,?,?,?)"); };
|
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"); };
|
eval { $sth = $dbh->prepare("INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?) ON CONFLICT DO NOTHING"); };
|
||||||
} else {
|
} else {
|
||||||
eval { $sth = $dbh->prepare("INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)"); };
|
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);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
my $rows = $ds.$rds.$nrows;
|
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});
|
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",""
|
# "2016-09-25 08:53:56","STP_5000","SMAUTILS","etotal: 11859.573","etotal","11859.573",""
|
||||||
|
|
||||||
# insert history mit/ohne primary key
|
# 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 (?,?,?,?,?,?,?)"); };
|
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 (?,?,?,?,?,?,?)"); };
|
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"); };
|
eval { $sth = $dbh->prepare_cached("INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?) ON CONFLICT DO NOTHING"); };
|
||||||
} else {
|
} else {
|
||||||
eval { $sth = $dbh->prepare_cached("INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)"); };
|
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 $dbuser = $dbloghash->{dbuser};
|
||||||
my $dblogname = $dbloghash->{NAME};
|
my $dblogname = $dbloghash->{NAME};
|
||||||
my $dbpassword = $attr{"sec$dblogname"}{secret};
|
my $dbpassword = $attr{"sec$dblogname"}{secret};
|
||||||
my $dbmodel = $dbloghash->{DBMODEL};
|
my $dbmodel = $dbloghash->{MODEL};
|
||||||
my $utf8 = defined($hash->{UTF8})?$hash->{UTF8}:0;
|
my $utf8 = defined($hash->{UTF8})?$hash->{UTF8}:0;
|
||||||
my ($dbh,$sth,$sql);
|
my ($dbh,$sth,$sql);
|
||||||
my $err;
|
my $err;
|
||||||
@ -3829,7 +3831,7 @@ sub dbmeta_DoParse($) {
|
|||||||
my $param = AttrVal($name, "showVariables", "%") if($opt eq "dbvars");
|
my $param = AttrVal($name, "showVariables", "%") if($opt eq "dbvars");
|
||||||
$param = AttrVal($name, "showSvrInfo", "[A-Z_]") if($opt eq "svrinfo");
|
$param = AttrVal($name, "showSvrInfo", "[A-Z_]") if($opt eq "svrinfo");
|
||||||
$param = AttrVal($name, "showStatus", "%") if($opt eq "dbstatus");
|
$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);
|
my @parlist = split(",",$param);
|
||||||
|
|
||||||
# SQL-Startzeit
|
# SQL-Startzeit
|
||||||
@ -3857,6 +3859,8 @@ sub dbmeta_DoParse($) {
|
|||||||
$sql = "show global status like '$ple';";
|
$sql = "show global status like '$ple';";
|
||||||
} elsif ($opt eq "tableinfo") {
|
} elsif ($opt eq "tableinfo") {
|
||||||
$sql = "show Table Status from $db;";
|
$sql = "show Table Status from $db;";
|
||||||
|
} elsif ($opt eq "procinfo") {
|
||||||
|
$sql = "show processlist;";
|
||||||
}
|
}
|
||||||
|
|
||||||
Log3($name, 4, "DbRep $name - SQL execute: $sql");
|
Log3($name, 4, "DbRep $name - SQL execute: $sql");
|
||||||
@ -3903,6 +3907,26 @@ sub dbmeta_DoParse($) {
|
|||||||
push(@row_array, $line->{Name}.".comment ".$line->{Comment}) if($line->{Comment});
|
push(@row_array, $line->{Name}.".comment ".$line->{Comment}) if($line->{Comment});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} elsif ($opt eq "procinfo") {
|
||||||
|
my $res = "<html><table border=2 bordercolor='darkgreen' cellspacing=0>";
|
||||||
|
$res .= "<tr><td style='padding-right:5px;padding-left:5px;font-weight:bold'>ID</td>";
|
||||||
|
$res .= "<td style='padding-right:5px;padding-left:5px;font-weight:bold'>USER</td>";
|
||||||
|
$res .= "<td style='padding-right:5px;padding-left:5px;font-weight:bold'>HOST</td>";
|
||||||
|
$res .= "<td style='padding-right:5px;padding-left:5px;font-weight:bold'>DB</td>";
|
||||||
|
$res .= "<td style='padding-right:5px;padding-left:5px;font-weight:bold'>CMD</td>";
|
||||||
|
$res .= "<td style='padding-right:5px;padding-left:5px;font-weight:bold'>TIME_Sec</td>";
|
||||||
|
$res .= "<td style='padding-right:5px;padding-left:5px;font-weight:bold'>STATE</td>";
|
||||||
|
$res .= "<td style='padding-right:5px;padding-left:5px;font-weight:bold'>INFO</td>";
|
||||||
|
$res .= "<td style='padding-right:5px;padding-left:5px;font-weight:bold'>PROGRESS</td></tr>";
|
||||||
|
while (my @line = $sth->fetchrow_array()) {
|
||||||
|
Log3 ($name, 4, "DbRep $name - SQL result: @line");
|
||||||
|
my $row = join("|", @line);
|
||||||
|
$row =~ s/\|/<\/td><td style='padding-right:5px;padding-left:5px'>/g;
|
||||||
|
$res .= "<tr><td style='padding-right:5px;padding-left:5px'>".$row."</td></tr>";
|
||||||
|
}
|
||||||
|
my $tab .= $res."</table></html>";
|
||||||
|
push(@row_array, "Test ".$tab);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
while (my @line = $sth->fetchrow_array()) {
|
while (my @line = $sth->fetchrow_array()) {
|
||||||
Log3 ($name, 4, "DbRep $name - SQL result: @line");
|
Log3 ($name, 4, "DbRep $name - SQL result: @line");
|
||||||
@ -4011,13 +4035,13 @@ sub dbmeta_ParseDone($) {
|
|||||||
my @row_array = split("§", $rowlist);
|
my @row_array = split("§", $rowlist);
|
||||||
Log3 ($name, 5, "DbRep $name - SQL result decoded: \n@row_array") if(@row_array);
|
Log3 ($name, 5, "DbRep $name - SQL result decoded: \n@row_array") if(@row_array);
|
||||||
|
|
||||||
my $pre = "VAR_" if($opt eq "dbvars");
|
my $pre = "";
|
||||||
|
$pre = "VAR_" if($opt eq "dbvars");
|
||||||
$pre = "STAT_" if($opt eq "dbstatus");
|
$pre = "STAT_" if($opt eq "dbstatus");
|
||||||
$pre = "INFO_" if($opt eq "tableinfo");
|
$pre = "INFO_" if($opt eq "tableinfo");
|
||||||
$pre = "" if($opt eq "svrinfo");
|
|
||||||
|
|
||||||
foreach my $row (@row_array) {
|
foreach my $row (@row_array) {
|
||||||
my @a = split(" ", $row);
|
my @a = split(" ", $row, 2);
|
||||||
my $k = $a[0];
|
my $k = $a[0];
|
||||||
my $v = $a[1];
|
my $v = $a[1];
|
||||||
ReadingsBulkUpdateValue ($hash, $pre.$k, $v);
|
ReadingsBulkUpdateValue ($hash, $pre.$k, $v);
|
||||||
@ -4044,7 +4068,7 @@ sub DbRep_optimizeTables($) {
|
|||||||
my $dbconn = $dbloghash->{dbconn};
|
my $dbconn = $dbloghash->{dbconn};
|
||||||
my $dbuser = $dbloghash->{dbuser};
|
my $dbuser = $dbloghash->{dbuser};
|
||||||
my $dblogname = $dbloghash->{NAME};
|
my $dblogname = $dbloghash->{NAME};
|
||||||
my $dbmodel = $dbloghash->{DBMODEL};
|
my $dbmodel = $dbloghash->{MODEL};
|
||||||
my $dbpassword = $attr{"sec$dblogname"}{secret};
|
my $dbpassword = $attr{"sec$dblogname"}{secret};
|
||||||
my $dbname = $hash->{DATABASE};
|
my $dbname = $hash->{DATABASE};
|
||||||
my $value = 0;
|
my $value = 0;
|
||||||
@ -4827,7 +4851,7 @@ sub mysql_DoDumpServerSide($) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Log3 ($name, 3, "DbRep $name - Starting dump of database '$dbname', table '$table'.");
|
Log3 ($name, 3, "DbRep $name - Starting dump of database '$dbname', table '$table'");
|
||||||
|
|
||||||
# Startzeit ermitteln
|
# Startzeit ermitteln
|
||||||
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
|
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
|
||||||
@ -4874,8 +4898,8 @@ sub mysql_DoDumpServerSide($) {
|
|||||||
|
|
||||||
$rt = $rt.",".$brt;
|
$rt = $rt.",".$brt;
|
||||||
|
|
||||||
Log3 ($name, 3, "DbRep $name - Finished backup of database $dbname - total time used: ".sprintf("%.0f",$brt)." sec.");
|
Log3 ($name, 3, "DbRep $name - Finished backup of database $dbname - total time used: ".sprintf("%.0f",$brt)." seconds");
|
||||||
Log3 ($name, 3, "DbRep $name - Number of exported datasets: $drh.");
|
Log3 ($name, 3, "DbRep $name - Number of exported datasets: $drh");
|
||||||
Log3 ($name, 3, "DbRep $name - Size of backupfile: ".byte_output($filesize));
|
Log3 ($name, 3, "DbRep $name - Size of backupfile: ".byte_output($filesize));
|
||||||
Log3 ($name, 4, "DbRep $name -> BlockingCall mysql_DoDumpServerSide finished");
|
Log3 ($name, 4, "DbRep $name -> BlockingCall mysql_DoDumpServerSide finished");
|
||||||
|
|
||||||
@ -6479,7 +6503,7 @@ sub bdump {
|
|||||||
86400, all datasets older than one day will be considered). The Timestamp calculation
|
86400, all datasets older than one day will be considered). The Timestamp calculation
|
||||||
will be done dynamically at execution time. </li> <br>
|
will be done dynamically at execution time. </li> <br>
|
||||||
|
|
||||||
<li><b>timeout </b> - set the timeout-value for Blocking-Call Routines in background (default 60 seconds) </li> <br>
|
<li><b>timeout </b> - set the timeout-value for Blocking-Call Routines in background (default 86400 seconds) </li> <br>
|
||||||
|
|
||||||
<li><b>userExitFn </b> - provides an interface to execute user specific program code. <br>
|
<li><b>userExitFn </b> - provides an interface to execute user specific program code. <br>
|
||||||
To activate the interfaace at first you should implement the subroutine which will be
|
To activate the interfaace at first you should implement the subroutine which will be
|
||||||
@ -6596,7 +6620,7 @@ sub bdump {
|
|||||||
</ul></ul>
|
</ul></ul>
|
||||||
|
|
||||||
All activities like database changes and changes of other DbRep-definitions will be logged in FHEM Logfile with verbose=3. In order that the renameDevice
|
All activities like database changes and changes of other DbRep-definitions will be logged in FHEM Logfile with verbose=3. In order that the renameDevice
|
||||||
function don't running to timeout set the timeout attribute to an appropriate value, especially if there are databases with huge datasets to evaluate.
|
function don't running into timeout set the timeout attribute to an appropriate value, especially if there are databases with huge datasets to evaluate.
|
||||||
As well as all the other database operations of this module, the autorename operation will be executed nonblocking. <br><br>
|
As well as all the other database operations of this module, the autorename operation will be executed nonblocking. <br><br>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
@ -6609,7 +6633,7 @@ sub bdump {
|
|||||||
attr Rep.Agent room DbLog <br>
|
attr Rep.Agent room DbLog <br>
|
||||||
attr Rep.Agent showproctime 1 <br>
|
attr Rep.Agent showproctime 1 <br>
|
||||||
attr Rep.Agent stateFormat { ReadingsVal("$name","state", undef) eq "running" ? "renaming" : ReadingsVal("$name","state", undef). " »; ProcTime: ".ReadingsVal("$name","sql_processing_time", undef)." sec"} <br>
|
attr Rep.Agent stateFormat { ReadingsVal("$name","state", undef) eq "running" ? "renaming" : ReadingsVal("$name","state", undef). " »; ProcTime: ".ReadingsVal("$name","sql_processing_time", undef)." sec"} <br>
|
||||||
attr Rep.Agent timeout 3600 <br>
|
attr Rep.Agent timeout 86400 <br>
|
||||||
</code>
|
</code>
|
||||||
<br>
|
<br>
|
||||||
</ul>
|
</ul>
|
||||||
@ -7398,7 +7422,7 @@ sub bdump {
|
|||||||
Datensätze die älter als ein Tag sind berücksichtigt). Die Timestampermittlung erfolgt
|
Datensätze die älter als ein Tag sind berücksichtigt). Die Timestampermittlung erfolgt
|
||||||
dynamisch zum Ausführungszeitpunkt. </li> <br>
|
dynamisch zum Ausführungszeitpunkt. </li> <br>
|
||||||
|
|
||||||
<li><b>timeout </b> - das Attribut setzt den Timeout-Wert für die Blocking-Call Routinen (Standard 60) in
|
<li><b>timeout </b> - das Attribut setzt den Timeout-Wert für die Blocking-Call Routinen (Standard 86400 Sekunden) in
|
||||||
Sekunden </li> <br>
|
Sekunden </li> <br>
|
||||||
<li><b>userExitFn </b> - stellt eine Schnittstelle zur Ausführung eigenen Usercodes zur Verfügung. <br>
|
<li><b>userExitFn </b> - stellt eine Schnittstelle zur Ausführung eigenen Usercodes zur Verfügung. <br>
|
||||||
Um die Schnittstelle zu aktivieren, wird zunächst die aufzurufende Subroutine in
|
Um die Schnittstelle zu aktivieren, wird zunächst die aufzurufende Subroutine in
|
||||||
@ -7530,7 +7554,7 @@ sub bdump {
|
|||||||
attr Rep.Agent room DbLog <br>
|
attr Rep.Agent room DbLog <br>
|
||||||
attr Rep.Agent showproctime 1 <br>
|
attr Rep.Agent showproctime 1 <br>
|
||||||
attr Rep.Agent stateFormat { ReadingsVal("$name","state", undef) eq "running" ? "renaming" : ReadingsVal("$name","state", undef). " »; ProcTime: ".ReadingsVal("$name","sql_processing_time", undef)." sec"} <br>
|
attr Rep.Agent stateFormat { ReadingsVal("$name","state", undef) eq "running" ? "renaming" : ReadingsVal("$name","state", undef). " »; ProcTime: ".ReadingsVal("$name","sql_processing_time", undef)." sec"} <br>
|
||||||
attr Rep.Agent timeout 3600 <br>
|
attr Rep.Agent timeout 86400 <br>
|
||||||
</code>
|
</code>
|
||||||
<br>
|
<br>
|
||||||
</ul>
|
</ul>
|
||||||
|
Loading…
Reference in New Issue
Block a user