mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 16:56:54 +00:00
feature: added method to create html bar chart (thanks to snx)
git-svn-id: https://svn.fhem.de/fhem/trunk@8507 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
8b01b5c67c
commit
b734bf0b51
@ -37,7 +37,7 @@ use Data::Dumper;
|
|||||||
my $missingModulRemote;
|
my $missingModulRemote;
|
||||||
eval "use Net::Telnet;1" or $missingModulRemote .= "Net::Telnet ";
|
eval "use Net::Telnet;1" or $missingModulRemote .= "Net::Telnet ";
|
||||||
|
|
||||||
my $VERSION = "2.2.0";
|
my $VERSION = "2.2.2";
|
||||||
|
|
||||||
use constant {
|
use constant {
|
||||||
PERL_VERSION => "perl_version",
|
PERL_VERSION => "perl_version",
|
||||||
@ -4039,6 +4039,139 @@ sub SYSMON_Log($$$) {
|
|||||||
# return $string;
|
# return $string;
|
||||||
#}
|
#}
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------------
|
||||||
|
## Visualisation module. provided by snx.
|
||||||
|
##
|
||||||
|
## usage:
|
||||||
|
## SYSMON_weblinkHeader(<weblink device>[,<text>]) : create a clickable device header
|
||||||
|
## SYSMON_ShowBarChartHtml(<sysmon device>[,<bar color>[,<border color>]]) : create a bar chart for sysmon device
|
||||||
|
##
|
||||||
|
## example:
|
||||||
|
## define wlSysmon weblink htmlCode {SYSMON_weblinkHeader('wlSysmon').SYSMON_ShowBarChartHtml('sysmon')}
|
||||||
|
## define wlSysmon weblink htmlCode {SYSMON_weblinkHeader('wlSysmon','Cubietruck').SYSMON_ShowBarChartHtml('sysmon','steelblue','gray')}
|
||||||
|
##
|
||||||
|
## -----------------------------------------------------------------------------
|
||||||
|
sub SYSMON_weblinkHeader($;$){
|
||||||
|
my $dev = shift;
|
||||||
|
my $text = shift||$dev;
|
||||||
|
return '<div><a href="?detail='.$dev.'"><b>'.$text.'</b></a></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub SYSMON_ShowBarChartHtml($;$$){
|
||||||
|
my $dev = shift;
|
||||||
|
|
||||||
|
my $colFill = shift || 'lightCoral';
|
||||||
|
my $colBorder = shift || 'black';
|
||||||
|
|
||||||
|
my $htmlRow .= ''
|
||||||
|
. '<tr>'
|
||||||
|
. ' <td>#NAME#</td>'
|
||||||
|
. ' <td>#VALUE#</td>'
|
||||||
|
. '</tr>';
|
||||||
|
my $htmlBar .= ''
|
||||||
|
. '<div style="position:relative;height:1.1em;min-width:200px;border:1px solid '.$colBorder.';overflow:hidden;">'
|
||||||
|
. ' <div style="position:absolute;height:1.1em;background:'.$colFill.';width:#PERC#%;">'
|
||||||
|
. ' </div>'
|
||||||
|
. ' <p style="position:absolute;height:1.1em;width:100%;text-align:center;margin:0">#TEXT#</p>'
|
||||||
|
. '</div>';
|
||||||
|
|
||||||
|
# access sysmon data..
|
||||||
|
#my $sysmon = SYSMON_getValues($dev);
|
||||||
|
my $sysmon = {};
|
||||||
|
foreach my $r (keys($main::defs{$dev}{READINGS})){
|
||||||
|
$sysmon->{$r} = $main::defs{$dev}{READINGS}{$r}{VAL};
|
||||||
|
}
|
||||||
|
|
||||||
|
my $html = '<table>';
|
||||||
|
|
||||||
|
# cpu load..
|
||||||
|
if (defined($sysmon->{'stat_cpu_percent'})){
|
||||||
|
#0.28 0.00 0.20 99.43 0.02 0.00 0.07
|
||||||
|
my (undef,undef,undef,$cpuI,undef,undef,undef) = split(/\s+/,$sysmon->{'stat_cpu_percent'});
|
||||||
|
my $cpuLoadP = sprintf("%.1f",(100-$cpuI));
|
||||||
|
my $cpuLoadT = $cpuLoadP." %";
|
||||||
|
$html .= $htmlRow =~ s/#NAME#/cpu load/r =~ s/#VALUE#/$htmlBar/r =~ s/#PERC#/$cpuLoadP/r =~ s/#TEXT#/$cpuLoadT/r;
|
||||||
|
}
|
||||||
|
|
||||||
|
# cpu temp..
|
||||||
|
if (defined($sysmon->{'cpu_temp'})){
|
||||||
|
my $cpuTempT = $sysmon->{'cpu_temp'}." °C";
|
||||||
|
my $cpuTempP = $sysmon->{'cpu_temp'};
|
||||||
|
$html .= $htmlRow =~ s/#NAME#/cpu temp/r =~ s/#VALUE#/$htmlBar/r =~ s/#PERC#/$cpuTempP/r =~ s/#TEXT#/$cpuTempT/r;
|
||||||
|
}
|
||||||
|
|
||||||
|
# cpu freq..
|
||||||
|
if (defined($sysmon->{'cpu_freq'})){
|
||||||
|
my $cpuFreqT = $sysmon->{'cpu_freq'}." MHz";
|
||||||
|
my $cpuFreqP = $sysmon->{'cpu_freq'}/10;
|
||||||
|
$html .= $htmlRow =~ s/#NAME#/cpu freq/r =~ s/#VALUE#/$htmlBar/r =~ s/#PERC#/$cpuFreqP/r =~ s/#TEXT#/$cpuFreqT/r;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mem ram..
|
||||||
|
if (defined($sysmon->{'ram'})){
|
||||||
|
#Total: 927.08 MB, Used: 47.86 MB, 5.16 %, Free: 879.22 MB
|
||||||
|
my (undef,$ramT,$ramUn,undef,$ramU,undef,$ramP,undef,undef,$ramF,undef) = split(/[\s,]+/,$sysmon->{'ram'});
|
||||||
|
$ramT = sprintf("%.0f",$ramU)." / ".sprintf("%.0f",$ramT)." ".$ramUn;
|
||||||
|
$html .= $htmlRow =~ s/#NAME#/mem ram/r =~ s/#VALUE#/$htmlBar/r =~ s/#PERC#/$ramP/r =~ s/#TEXT#/$ramT/r;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mem swap..
|
||||||
|
if (defined($sysmon->{'swap'})){
|
||||||
|
#Total: 100.00 MB, Used: 0.00 MB, 0.00 %, Free: 100.00 MB
|
||||||
|
my (undef,$swapT,$swapUn,undef,$swapU,undef,$swapP,undef,undef,$swapF,undef) = split(/[\s,]+/,$sysmon->{'swap'});
|
||||||
|
$swapT = sprintf("%.0f",$swapU)." / ".sprintf("%.0f",$swapT)." ".$swapUn;
|
||||||
|
$html .= $htmlRow =~ s/#NAME#/mem swap/r =~ s/#VALUE#/$htmlBar/r =~ s/#PERC#/$swapP/r =~ s/#TEXT#/$swapT/r;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sd-card..
|
||||||
|
if (defined($sysmon->{'fs_root'})){
|
||||||
|
#Total: 14831 MB, Used: 2004 MB, 15 %, Available: 12176 MB at /
|
||||||
|
#my $sd = R("$dev:fs_root");
|
||||||
|
my (undef,$sdT,undef,undef,$sdU,undef,$sdP,undef,undef,$sdF,undef) = split(/[\s,]+/,$sysmon->{'fs_root'});
|
||||||
|
$sdT = sprintf("%.1f",($sdU/1024))." / ".sprintf("%.1f",($sdT/1024))." GB";
|
||||||
|
$html .= $htmlRow =~ s/#NAME#/root fs/r =~ s/#VALUE#/$htmlBar/r =~ s/#PERC#/$sdP/r =~ s/#TEXT#/$sdT/r;
|
||||||
|
}
|
||||||
|
|
||||||
|
# uptime system / idle..
|
||||||
|
if (defined($sysmon->{'uptime'})){
|
||||||
|
my $upSystem = SYSMON_secsToReadable($sysmon->{'uptime'});
|
||||||
|
if (defined($sysmon->{uptime})){
|
||||||
|
#25386 99.32 %
|
||||||
|
my (undef,$idle,undef) = split(/\s+/,$sysmon->{'idletime'});
|
||||||
|
$upSystem .= " ($idle % idle)";
|
||||||
|
}
|
||||||
|
$html .= $htmlRow =~ s/#NAME#/system uptime/r =~ s/#VALUE#/$upSystem/r;
|
||||||
|
}
|
||||||
|
|
||||||
|
# uptime fhem..
|
||||||
|
if (defined($sysmon->{'fhemuptime'})){
|
||||||
|
my $upFhem = SYSMON_secsToReadable($sysmon->{'fhemuptime'});
|
||||||
|
$html .= $htmlRow =~ s/#NAME#/fhem uptime/r =~ s/#VALUE#/$upFhem/r;
|
||||||
|
}
|
||||||
|
|
||||||
|
$html .= '</table>';
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub SYSMON_secsToReadable($){
|
||||||
|
my $secs = shift;
|
||||||
|
my $y = floor($secs / 60/60/24/365);
|
||||||
|
my $d = floor($secs/60/60/24) % 365;
|
||||||
|
my $h = floor(($secs / 3600) % 24);
|
||||||
|
my $m = floor(($secs / 60) % 60);
|
||||||
|
my $s = $secs % 60;
|
||||||
|
my $string = '';
|
||||||
|
$string .= $y.'y ' if ($y > 0);
|
||||||
|
$string .= $d.'d ' if ($d > 0);
|
||||||
|
$string .= $h.'h ' if ($h > 0);
|
||||||
|
$string .= $m.'m ' if ($m > 0);
|
||||||
|
$string .= $s.'s' if ($s > 0);
|
||||||
|
return $string;
|
||||||
|
}
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
=pod
|
=pod
|
||||||
|
Loading…
x
Reference in New Issue
Block a user