diff options
author | Steve Beaver <sbeaver@netgate.com> | 2017-08-17 19:03:35 -0400 |
---|---|---|
committer | Steve Beaver <sbeaver@netgate.com> | 2017-08-17 19:04:20 -0400 |
commit | 73b5c257b60df7030397e5d825d20f402731a102 (patch) | |
tree | 80808fe5b67ff4e24319959b4f643d4d1907a76c /src/usr/local | |
parent | 0588e31a0cf4d53324ce2f1f557d33ec82a8c7d1 (diff) | |
download | pfsense-73b5c257b60df7030397e5d825d20f402731a102.zip pfsense-73b5c257b60df7030397e5d825d20f402731a102.tar.gz |
Revise CPU load display to eliminate sleep in AJAX call
(cherry picked from commit c4ec696bf9eae3f8dbbad30b2e0804b9bf7de4b6)
Diffstat (limited to 'src/usr/local')
-rw-r--r-- | src/usr/local/www/includes/functions.inc.php | 22 | ||||
-rw-r--r-- | src/usr/local/www/widgets/widgets/system_information.widget.php | 69 |
2 files changed, 47 insertions, 44 deletions
diff --git a/src/usr/local/www/includes/functions.inc.php b/src/usr/local/www/includes/functions.inc.php index 23012bd..b53d2b4 100644 --- a/src/usr/local/www/includes/functions.inc.php +++ b/src/usr/local/www/includes/functions.inc.php @@ -114,29 +114,13 @@ function get_uptime() { return $uptimestr; } -/* Calculates non-idle CPU time and returns as a percentage */ +// Returns the current total ticks and user ticks. The dashboard widget calculates the load from that function cpu_usage() { - $duration = 1; + $diff = array('user', 'nice', 'sys', 'intr', 'idle'); $cpuTicks = array_combine($diff, explode(" ", get_single_sysctl('kern.cp_time'))); - sleep($duration); - $cpuTicks2 = array_combine($diff, explode(" ", get_single_sysctl('kern.cp_time'))); - - $totalStart = array_sum($cpuTicks); - $totalEnd = array_sum($cpuTicks2); - - // Something wrapped ?!?! - if ($totalEnd <= $totalStart) { - return 0; - } - - // Calculate total cycles used - $totalUsed = ($totalEnd - $totalStart) - ($cpuTicks2['idle'] - $cpuTicks['idle']); - - // Calculate the percentage used - $cpuUsage = floor(100 * ($totalUsed / ($totalEnd - $totalStart))); - return $cpuUsage; + return array_sum($cpuTicks) . "|" . $cpuTicks['idle']; } function get_pfstate($percent=false) { diff --git a/src/usr/local/www/widgets/widgets/system_information.widget.php b/src/usr/local/www/widgets/widgets/system_information.widget.php index 000f33f..d32f144 100644 --- a/src/usr/local/www/widgets/widgets/system_information.widget.php +++ b/src/usr/local/www/widgets/widgets/system_information.widget.php @@ -452,8 +452,7 @@ $rows_displayed = false; <div id="cpuPB" class="progress-bar progress-bar-striped" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%"> </div> </div> - - <span id="cpumeter"></span> + <span id="cpumeter"><?=sprintf(gettext("Retrieving CPU data %s"), "<i class=\"fa fa-gear fa-spin\"></i>")?></span> </td> </tr> <?php @@ -573,6 +572,9 @@ events.push(function(){ set_widget_checkbox_events("#widget-<?=$widgetname?>_panel-footer [id^=show]", "showallsysinfoitems"); }); +var lastTotal = 0; +var lastUsed = 0; + function setProgress(barName, percent) { $('#' + barName).css('width', percent + '%').attr('aria-valuenow', percent); } @@ -586,19 +588,23 @@ function stats(x) { return false; })) - updateUptime(values[2]); - updateDateTime(values[5]); - updateCPU(values[0]); - updateMemory(values[1]); - updateState(values[3]); - updateTemp(values[4]); - updateInterfaceStats(values[6]); - updateInterfaces(values[7]); - updateCpuFreq(values[8]); - updateLoadAverage(values[9]); - updateMbuf(values[10]); - updateMbufMeter(values[11]); - updateStateMeter(values[12]); + if (lastTotal === 0) { + lastTotal = values[0]; + lastUsed = values[1]; + } else { + updateCPU(values[0], values[1]); + } + + updateUptime(values[3]); + updateDateTime(values[6]); + updateMemory(values[2]); + updateState(values[4]); + updateTemp(values[5]); + updateCpuFreq(values[7]); + updateLoadAverage(values[8]); + updateMbuf(values[9]); + updateMbufMeter(values[10]); + updateStateMeter(values[11]); } function updateMemory(x) { @@ -625,19 +631,32 @@ function updateMbufMeter(x) { } } -function updateCPU(x) { +function updateCPU(total, used) { + if ((lastTotal <= total) && (lastUsed <= used)) { // Just in case it wraps + // Calculate the total ticks and the used ticks sine the last time it was checked + var d_total = total - lastTotal; + var d_used = used - lastUsed; - if ($('#cpumeter')) { - $("#cpumeter").html(x + '%'); - } - if ($('#cpuPB')) { - setProgress('cpuPB', parseInt(x)); - } + // Convert to percent + var x = Math.trunc( ((d_total - d_used)/d_total) * 100); - /* Load CPU Graph widget if enabled */ - if (widgetActive('cpu_graphs')) { - GraphValue(graph[0], x); + if ($('#cpumeter')) { + $('[id="cpumeter"]').html(x + '%'); + } + + if ($('#cpuPB')) { + setProgress('cpuPB', parseInt(x)); + } + + /* Load CPU Graph widget if enabled */ + if (widgetActive('cpu_graphs')) { + GraphValue(graph[0], x); + } } + + // Update the saved "last" values + lastTotal = total; + lastUsed = used; } function updateTemp(x) { |