mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 09:16:53 +00:00
32_SYSSTAT.pm: try to use /proc/uptime instead of uptime first (by viegener)
git-svn-id: https://svn.fhem.de/fhem/trunk@8640 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
0469da297e
commit
47da593550
@ -596,21 +596,59 @@ SYSSTAT_getUptime($)
|
|||||||
return $uptime;
|
return $uptime;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $uptime = SYSSTAT_readCmd($hash,"uptime",0);
|
my $uptime = SYSSTAT_readFile($hash,"/proc/uptime","");
|
||||||
|
if($uptime) {
|
||||||
|
|
||||||
$uptime = $1 if( $uptime && $uptime =~ m/[[:alpha:]]{2}\s+(((\d+)\D+,?\s+)?(\d+):(\d+))/ );
|
$uptime = $1 if ( $uptime && $uptime =~ /^\s*([0-9.]+)\s+([0-9.]+)/ );
|
||||||
$uptime = "0 days, $uptime" if( $uptime && !$2);
|
|
||||||
|
|
||||||
if( AttrVal($name, "uptime", 0) == 2 ) {
|
if( AttrVal($name, "uptime", 0) != 2 ) {
|
||||||
my $days = $3?$3:0;
|
# cut off partial seconds
|
||||||
my $hours = $4;
|
$uptime = int( $uptime );
|
||||||
my $minutes = $5;
|
my $seconds = $uptime % 60;
|
||||||
|
$uptime = int($uptime / 60);
|
||||||
|
my $minutes = $uptime % 60;
|
||||||
|
$uptime = int($uptime / 60);
|
||||||
|
|
||||||
$uptime = $days * 24;
|
my $hours = $uptime % 24;
|
||||||
$uptime += $hours;
|
my $days = int($uptime / 24);
|
||||||
$uptime *= 60;
|
|
||||||
$uptime += $minutes;
|
$uptime = sprintf( "%d days, %d:%.2d", $days, $hours, $minutes);
|
||||||
$uptime *= 60;
|
Log3 $name, 4, "$name: uptime returned :$uptime: via proc-uptime file "; # JVI
|
||||||
|
}
|
||||||
|
|
||||||
|
# fallback if by any reason parsing /proc/uptime does not work
|
||||||
|
} else {
|
||||||
|
my $uptime = SYSSTAT_readCmd($hash,"uptime",0);
|
||||||
|
|
||||||
|
############# match uptime time statement with the different formats seen on linux
|
||||||
|
# examples
|
||||||
|
# 18:52:21 up 26 days, 21:08, 2 users, load average: 0.04, 0.03, 0.05
|
||||||
|
# 18:52:21 up 26 days, 55 min, 1 user, load average: 0.05, 0.05, 0.05
|
||||||
|
# 18:52:21 up 55 min, 1 user, load average: 0.05, 0.05, 0.05
|
||||||
|
# 18:52:21 up 21:08, 1 user, load average: 0.05, 0.05, 0.05
|
||||||
|
#
|
||||||
|
# complex expression to match only the time parts of the uptime result
|
||||||
|
# $1 is complete up time information of uptime result
|
||||||
|
# $2 is # days part of the uptime
|
||||||
|
# $3 just the # from the "# days"" part or nothing if no days are given
|
||||||
|
# $4 is complete hour/minutes or # min information
|
||||||
|
# $5 is hours part if hours:min are given
|
||||||
|
# $6 is minutes part if hours:min are given
|
||||||
|
# $7 is minutes if # min is given
|
||||||
|
$uptime = $1 if ( $uptime && $uptime =~ m/[[:alpha:]]{2}\s*(((\d*)\s*[[:alnum:]]*,?)?\s+((\d+):(\d+)|(\d+)\s+[[:alpha:]]+in[[:alpha:]]*)),?/ );
|
||||||
|
$uptime = "0 days, $uptime" if( $uptime && !$2);
|
||||||
|
if( AttrVal($name, "uptime", 0) == 2 ) {
|
||||||
|
my $days = $3?$3:0;
|
||||||
|
my $hours = $5?$5:0;
|
||||||
|
my $minutes = $6?$6:$7;
|
||||||
|
|
||||||
|
$uptime = $days * 24;
|
||||||
|
$uptime += $hours;
|
||||||
|
$uptime *= 60;
|
||||||
|
$uptime += $minutes;
|
||||||
|
$uptime *= 60;
|
||||||
|
}
|
||||||
|
Log3 $name, 4, "$name: uptime returned :$uptime: via cmdline "; # JVI
|
||||||
}
|
}
|
||||||
|
|
||||||
return $uptime;
|
return $uptime;
|
||||||
@ -776,14 +814,14 @@ SYSSTAT_getStat($)
|
|||||||
<a name="SYSSTAT"></a>
|
<a name="SYSSTAT"></a>
|
||||||
<h3>SYSSTAT</h3>
|
<h3>SYSSTAT</h3>
|
||||||
<ul>
|
<ul>
|
||||||
Das Modul stellt Systemstatistiken für den Rechner, auf dem FHEM läuft bzw.
|
Das Modul stellt Systemstatistiken für den Rechner, auf dem FHEM läuft bzw.
|
||||||
für ein entferntes Linux System, das per vorkonfiguriertem ssh Zugang ohne Passwort
|
für ein entferntes Linux System, das per vorkonfiguriertem ssh Zugang ohne Passwort
|
||||||
erreichbar ist, zur Vefügung.<br><br>
|
erreichbar ist, zur Vefügung.<br><br>
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
<ul>
|
<ul>
|
||||||
<li>Dieses Modul benötigt <code>Sys::Statistics::Linux</code> für Linux.<br>
|
<li>Dieses Modul benötigt <code>Sys::Statistics::Linux</code> für Linux.<br>
|
||||||
Es kann mit '<code>cpan install Sys::Statistics::Linux</code>'<br>
|
Es kann mit '<code>cpan install Sys::Statistics::Linux</code>'<br>
|
||||||
bzw. auf Debian mit '<code>apt-get install libsys-statistics-linux-perl</code>'
|
bzw. auf Debian mit '<code>apt-get install libsys-statistics-linux-perl</code>'
|
||||||
installiert werden.</li>
|
installiert werden.</li>
|
||||||
|
|
||||||
@ -813,9 +851,9 @@ SYSSTAT_getStat($)
|
|||||||
definiert ein SYSSTAT Device.<br><br>
|
definiert ein SYSSTAT Device.<br><br>
|
||||||
|
|
||||||
Die (Prozessor)last wird alle <interval> Sekunden aktualisiert. Standard bzw. Minimum ist 60.<br><br>
|
Die (Prozessor)last wird alle <interval> Sekunden aktualisiert. Standard bzw. Minimum ist 60.<br><br>
|
||||||
Die Plattennutzung wird alle <interval_fs> Sekunden aktualisiert. Standardwert ist <interval>*60
|
Die Plattennutzung wird alle <interval_fs> Sekunden aktualisiert. Standardwert ist <interval>*60
|
||||||
und Minimum ist 60.
|
und Minimum ist 60.
|
||||||
<interval_fs> wird nur angenähert und funktioniert am Besten, wenn <interval_fs>
|
<interval_fs> wird nur angenähert und funktioniert am Besten, wenn <interval_fs>
|
||||||
ein ganzzahliges Vielfaches von <interval> ist.<br><br>
|
ein ganzzahliges Vielfaches von <interval> ist.<br><br>
|
||||||
|
|
||||||
Wenn <host> angegeben wird, muss der Zugang per ssh ohne Passwort möglich sein.<br><br>
|
Wenn <host> angegeben wird, muss der Zugang per ssh ohne Passwort möglich sein.<br><br>
|
||||||
@ -832,10 +870,10 @@ SYSSTAT_getStat($)
|
|||||||
<b>Readings</b>
|
<b>Readings</b>
|
||||||
<ul>
|
<ul>
|
||||||
<li>load<br>
|
<li>load<br>
|
||||||
die durchschnittliche (Prozessor)last der letzten 1 Minute (für Windows Rechner mit
|
die durchschnittliche (Prozessor)last der letzten 1 Minute (für Windows Rechner mit
|
||||||
snmp angenähertem Wert)</li>
|
snmp angenähertem Wert)</li>
|
||||||
<li>state<br>
|
<li>state<br>
|
||||||
die durchschnittliche (Prozessor)last der letzten 1, 5 und 15 Minuten (für Windows
|
die durchschnittliche (Prozessor)last der letzten 1, 5 und 15 Minuten (für Windows
|
||||||
Rechner die Nutzung pro CPU via snmp ermittelt)</li>
|
Rechner die Nutzung pro CPU via snmp ermittelt)</li>
|
||||||
<li>user, system, idle, iowait<br>
|
<li>user, system, idle, iowait<br>
|
||||||
den Prozentsatz der entsprechenden Systemlast (nur für Linux Systeme)</li>
|
den Prozentsatz der entsprechenden Systemlast (nur für Linux Systeme)</li>
|
||||||
@ -874,7 +912,7 @@ SYSSTAT_getStat($)
|
|||||||
1 -> snmp wird verwendet, um Last, Einschaltzeit und Dateisysteme (inkl. physikalischem und
|
1 -> snmp wird verwendet, um Last, Einschaltzeit und Dateisysteme (inkl. physikalischem und
|
||||||
virtuellem Speicher) zu überwachen</li>
|
virtuellem Speicher) zu überwachen</li>
|
||||||
<li>stat<br>
|
<li>stat<br>
|
||||||
1 -> überwacht Prozentsatz der user, system, idle und iowait Last
|
1 -> überwacht Prozentsatz der user, system, idle und iowait Last
|
||||||
(nur auf Linux Systemen verfügbar)</li>
|
(nur auf Linux Systemen verfügbar)</li>
|
||||||
<li>raspberrytemperature<br>
|
<li>raspberrytemperature<br>
|
||||||
Wenn gesetzt und > 0 wird der Temperatursensor auf dem Raspberry Pi ausgelesen.<br>
|
Wenn gesetzt und > 0 wird der Temperatursensor auf dem Raspberry Pi ausgelesen.<br>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user