Commit a40388b4 authored by Ad Schellevis's avatar Ad Schellevis

(dashboard, widgets) work in progress restructure system_information.widget.php (not finished yet)

parent 2aca9405
<?php
/*
Copyright (C) 2014 Deciso B.V.
Copyright (C) 2014-2016 Deciso B.V.
Copyright (C) 2007 Scott Dale
Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
and Jonathan Watt <jwatt@jwatt.org>.
......@@ -44,28 +44,121 @@ if (stristr($swapinfo, '%')) {
}
if (isset($_REQUEST['getupdatestatus'])) {
if (isset($_POST['getupdatestatus'])) {
$pkg_json = trim(configd_run('firmware check'));
if ($pkg_json != '') {
$pkg_status = json_decode($pkg_json, true);
}
if (!isset($pkg_status) || $pkg_status["connection"]=="error") {
echo "<span class='text-danger'>".gettext("Connection Error")."</span><br/><span class='btn-link' onclick='checkupdate()'>".gettext("Click to retry")."</span>";
echo "<span class='text-danger'>".gettext("Connection Error")."</span><br/><span class='btn-link' onclick='system_information_widget_checkupdate()'>".gettext("Click to retry")."</span>";
} elseif ($pkg_status["repository"]=="error") {
echo "<span class='text-danger'>".gettext("Repository Problem")."</span><br/><span class='btn-link' onclick='checkupdate()'>".gettext("Click to retry")."</span>";
echo "<span class='text-danger'>".gettext("Repository Problem")."</span><br/><span class='btn-link' onclick='system_information_widget_checkupdate()'>".gettext("Click to retry")."</span>";
} elseif ($pkg_status["updates"]=="0") {
echo "<span class='text-info'>".gettext("Your system is up to date.")."</span><br/><span class='btn-link' onclick='checkupdate()'>".gettext('Click to check for updates')."</span>";
echo "<span class='text-info'>".gettext("Your system is up to date.")."</span><br/><span class='btn-link' onclick='system_information_widget_checkupdate()'>".gettext('Click to check for updates')."</span>";
} else {
echo "<span class='text-info'>".sprintf(gettext("There are %s update(s) available."),$pkg_status["updates"])."</span><br/><a href='/ui/core/firmware/#checkupdate'>".gettext("Click to upgrade")."</a> | <span class='btn-link' onclick='checkupdate()'>".gettext('Re-check now')."</span>";
echo "<span class='text-info'>".sprintf(gettext("There are %s update(s) available."),$pkg_status["updates"])."</span><br/><a href='/ui/core/firmware/#checkupdate'>".gettext("Click to upgrade")."</a> | <span class='btn-link' onclick='system_information_widget_checkupdate()'>".gettext('Re-check now')."</span>";
}
exit;
}
$filesystems = get_mounted_filesystems();
?>
<script src="/ui/js/moment-with-locales.min.js" type="text/javascript"></script>
<script type="text/javascript">
var system_information_widget_cpu_data = []; // reference to measures
var system_information_widget_cpu_chart = null; // reference to chart object
var system_information_widget_cpu_chart_data = null; // reference to chart data object
/**
* check for updates
*/
function system_information_widget_checkupdate() {
$('#updatestatus').html('<span class="text-info"><?= html_safe(gettext('Fetching... (may take up to 30 seconds)')) ?></span>');
$.ajax({
type: "POST",
url: '/widgets/widgets/system_information.widget.php',
data:{getupdatestatus:'yes'},
success:function(html) {
$('#updatestatus').prop('innerHTML',html);
}
});
}
/**
* update cpu chart
*/
function system_information_widget_cpu_update(sender, data)
{
// tooltip current percentage
$("#system_information_widget_chart_cpu_usage").tooltip({ title: ''});
$("#system_information_widget_chart_cpu_usage").attr("title", data['cpu']['used'] + ' %').tooltip('fixTitle');
// push new measurement, keep a maximum of 100 measures in
system_information_widget_cpu_data.push(parseInt(data['cpu']['used']));
if (system_information_widget_cpu_data.length > 100) {
system_information_widget_cpu_data.shift();
} else if (system_information_widget_cpu_data.length == 1) {
system_information_widget_cpu_data.push(parseInt(data['cpu']['used']));
}
chart_data = [];
count = 0;
system_information_widget_cpu_data.map(function(item){
chart_data.push([count, item]);
count++;
});
system_information_widget_cpu_chart_data.datum([{'key':'cpu', 'values':chart_data}]).transition().duration(500).call(system_information_widget_cpu_chart);
}
/**
* update widget
*/
function system_information_widget_update(sender, data)
{
system_information_widget_cpu_update(sender, data);
$("#system_information_widget_cpu_type").html(data['cpu']['model'] + ' ( '+data['cpu']['cpus']+' cores )');
var uptime_days = parseInt(moment.duration(parseInt(data['uptime']), 'seconds').asDays());
var uptime_str = "";
if (uptime_days > 0) {
uptime_str += uptime_days + " <?=html_safe(gettext('days'));?> ";
}
uptime_str += moment.utc(parseInt(data['uptime'])*1000).format("HH:mm:ss");
$("#system_information_widget_uptime").html(uptime_str);
$("#system_information_widget_datetime").html(data['date_frmt']);
$("#system_information_widget_last_config_change").html(data['config']['last_change_frmt']);
var states_perc = parseInt((parseInt(data['kernel']['pf']['states']) / parseInt(data['kernel']['pf']['maxstates']))*100);
$("#system_information_widget_states .progress-bar").css("width", states_perc + "%").attr("aria-valuenow", states_perc + "%");
var states_text = states_perc + " % " + "( " + data['kernel']['pf']['states'] + "/" + data['kernel']['pf']['maxstates'] + " )"
$("#system_information_widget_states .state_text").html(states_text);
//$("#system_information_widget_states").html(states_perc);
}
/**
* page setup
*/
$( document ).ready(function() {
// draw cpu graph
nv.addGraph(function() {
system_information_widget_cpu_chart = nv.models.lineChart()
.x(function(d) { return d[0] })
.y(function(d) { return d[1] })
.useInteractiveGuideline(false)
.interactive(false)
.showLegend(false)
.showXAxis(false)
.clipEdge(true)
.margin({top:5,right:5,bottom:5,left:25});
system_information_widget_cpu_chart.yAxis.tickFormat(d3.format('.0'));
system_information_widget_cpu_chart.forceY([0, 100]);
system_information_widget_cpu_chart_data = d3.select("#system_information_widget_chart_cpu_usage svg").datum([{'key':'cpu', 'values':[[0, 0]]}]);
system_information_widget_cpu_chart_data.transition().duration(500).call(system_information_widget_cpu_chart);
});
});
</script>
<script type="text/javascript">
//<![CDATA[
jQuery(function() {
......@@ -89,94 +182,65 @@ $filesystems = get_mounted_filesystems();
//]]>
</script>
<table class="table table-striped">
<table class="table table-striped table-condensed" data-plugin="system" data-callback="system_information_widget_update">
<tbody>
<tr>
<td width="25%" class="vncellt"><?=gettext("Name");?></td>
<td width="75%" class="listr"><?php echo $config['system']['hostname'] . "." . $config['system']['domain']; ?></td>
<td width="30%"><?=gettext("Name");?></td>
<td><?=$config['system']['hostname'] . "." . $config['system']['domain']; ?></td>
</tr>
<tr>
<td width="25%" valign="top" class="vncellt"><?=gettext("Versions");?></td>
<td width="75%" class="listr">
<?php
$pkgver = explode('-', trim(file_get_contents('/usr/local/opnsense/version/opnsense')));
echo sprintf('%s %s-%s', $g['product_name'], $pkgver[0], php_uname('m'));
?>
<br /><?php echo php_uname('s') . ' ' . php_uname('r'); ?>
<br /><?php echo exec('/usr/local/bin/openssl version'); ?>
<td><?=gettext("Versions");?></td>
<td>
<?=sprintf('%s %s-%s', $g['product_name'], explode('-', trim(file_get_contents('/usr/local/opnsense/version/opnsense')))[0], php_uname('m'));?><br/>
<?=php_uname('s') . ' ' . php_uname('r'); ?><br/>
<?=exec('/usr/local/bin/openssl version'); ?>
</td>
</tr>
<tr>
<td><?= gettext('Updates') ?></td>
<td>
<?= gettext('Updates') ?>
</td>
<td>
<div id='updatestatus'><span class='btn-link' onclick='checkupdate()'><?=gettext("Click to check for updates");?></span></div>
<div id='updatestatus'><span class='btn-link' onclick='system_information_widget_checkupdate()'><?=gettext("Click to check for updates");?></span></div>
</td>
</tr>
<tr>
<td width="25%" class="vncellt"><?=gettext("CPU Type");?></td>
<td width="75%" class="listr">
<?php echo (htmlspecialchars(get_single_sysctl("hw.model"))); ?>
<div id="cpufreq"><?= get_cpufreq(); ?></div>
<?php $cpucount = get_cpu_count();
if ($cpucount > 1) :
?>
<div id="cpucount">
<?= htmlspecialchars($cpucount) ?> CPUs: <?= htmlspecialchars(get_cpu_count(true)); ?></div>
<?php endif; ?>
</td>
<td><?=gettext("CPU Type");?></td>
<td id="system_information_widget_cpu_type"></td>
</tr>
<tr>
<td width="25%" class="vncellt"><?=gettext("Uptime");?></td>
<td width="75%" class="listr" id="uptime"><?= htmlspecialchars(get_uptime()); ?></td>
<td><?=gettext("CPU usage");?></td>
<td>
<div id="system_information_widget_chart_cpu_usage">
<svg style="height:40px;"></svg>
</div>
</td>
</tr>
<tr>
<td width="25%" class="vncellt"><?=gettext("Current date/time");?></td>
<td width="75%" class="listr">
<div id="datetime"><?= date("D M j G:i:s T Y"); ?></div>
</td>
<td><?=gettext("Uptime");?></td>
<td id="system_information_widget_uptime"></td>
</tr>
<tr>
<td width="30%" class="vncellt"><?=gettext("DNS server(s)");?></td>
<td width="70%" class="listr">
<?php
$dns_servers = get_dns_servers();
foreach ($dns_servers as $dns) {
echo "{$dns}<br />";
}
?>
</td>
<td><?=gettext("Current date/time");?></td>
<td id="system_information_widget_datetime"></td>
</tr>
<?php if (isset($config['revision']['time'])) :
?>
<tr>
<td width="25%" class="vncellt"><?=gettext("Last config change");?></td>
<td width="75%" class="listr"><?= htmlspecialchars(date("D M j G:i:s T Y", intval($config['revision']['time'])));?></td>
<td><?=gettext("Last config change");?></td>
<td id="system_information_widget_last_config_change"></td>
</tr>
<?php endif; ?>
<tr>
<td width="25%" class="vncellt"><?=gettext("State table size");?></td>
<td width="75%" class="listr">
<?php $pfstatetext = get_pfstate();
$pfstateusage = get_pfstate(true);
?>
<div class="progress">
<div id="statePB" class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">
<span class="sr-only"></span>
<td><?=gettext("State table size");?></td>
<td id="system_information_widget_states">
<div class="progress" style="text-align:center;">
<span class="state_text" style="position:absolute;right:0;left:0;z-index:200;"></span>
<div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;"></div>
</div>
</div>
<span id="pfstateusagemeter"><?= $pfstateusage.'%';
?></span> (<span id="pfstate"><?= htmlspecialchars($pfstatetext); ?></span>)
<br />
<a href="diag_dump_states.php"><?=gettext("Show states");?></a>
</td>
</tr>
<tr>
<td width="25%" class="vncellt"><?=gettext("MBUF Usage");?></td>
<td width="75%" class="listr">
<td><?=gettext("MBUF Usage");?></td>
<td>
<?php
$mbufstext = get_mbuf();
$mbufusage = get_mbuf(true);
......@@ -193,8 +257,8 @@ $filesystems = get_mounted_filesystems();
<?php if (get_temp() != "") :
?>
<tr>
<td width="25%" class="vncellt"><?=gettext("Temperature");?></td>
<td width="75%" class="listr">
<td><?=gettext("Temperature");?></td>
<td>
<?php $TempMeter = $temp = get_temp(); ?>
<div class="progress">
......@@ -207,26 +271,14 @@ $filesystems = get_mounted_filesystems();
</tr>
<?php endif; ?>
<tr>
<td width="25%" class="vncellt"><?=gettext("Load average");?></td>
<td width="75%" class="listr">
<td><?=gettext("Load average");?></td>
<td>
<div id="load_average" title="Last 1, 5 and 15 minutes"><?= get_load_average(); ?></div>
</td>
</tr>
<tr>
<td width="25%" class="vncellt"><?=gettext("CPU usage");?></td>
<td width="75%" class="listr">
<div class="progress">
<div id="cpuPB" class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">
<span class="sr-only"></span>
</div>
</div>
<span id="cpumeter">(<?= gettext('Updating in 10 seconds') ?>)</span>
</td>
</tr>
<tr>
<td width="25%" class="vncellt"><?=gettext("Memory usage");?></td>
<td width="75%" class="listr">
<td><?=gettext("Memory usage");?></td>
<td>
<?php $memUsage = mem_usage(); ?>
<div class="progress">
<div id="memUsagePB" class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">
......@@ -239,8 +291,8 @@ $filesystems = get_mounted_filesystems();
<?php if ($showswap == true) :
?>
<tr>
<td width="25%" class="vncellt"><?=gettext("SWAP usage");?></td>
<td width="75%" class="listr">
<td><?=gettext("SWAP usage");?></td>
<td>
<?php $swapusage = swap_usage(); ?>
<div class="progress">
<div id="swapUsagePB" class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">
......@@ -252,8 +304,8 @@ $filesystems = get_mounted_filesystems();
</tr>
<?php endif; ?>
<tr>
<td width="25%" class="vncellt"><?=gettext("Disk usage");?></td>
<td width="75%" class="listr">
<td><?=gettext("Disk usage");?></td>
<td>
<?php $d = 0; ?>
<?php foreach ($filesystems as $fs) : ?>
<div class="progress">
......@@ -273,37 +325,3 @@ endforeach; ?>
</tr>
</tbody>
</table>
<script type="text/javascript">
//<![CDATA[
function checkupdate() {
jQuery('#updatestatus').html('<span class="text-info"><?= html_safe(gettext('Fetching... (may take up to 30 seconds)')) ?></span>');
jQuery.ajax({
type: "POST",
url: '/widgets/widgets/system_information.widget.php',
data:{action:'pkg_update'},
success:function(html) {
getstatus();
}
});
}
function getstatus() {
scroll(0,0);
var url = "/widgets/widgets/system_information.widget.php";
var pars = 'getupdatestatus=yes';
jQuery.ajax(
url,
{
type: 'get',
data: pars,
complete: activitycallback
});
}
function activitycallback(transport) {
// .html() method process all script tags contained in responseText,
// to avoid this we set the innerHTML property
jQuery('#updatestatus').prop('innerHTML',transport.responseText);
}
//]]>
</script>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment