From fad87798bb0beb552b0c7dfab0405c947f2f3035 Mon Sep 17 00:00:00 2001 From: Stephen Beaver Date: Tue, 3 Nov 2015 12:11:17 -0500 Subject: Completed #5369 --- .../www/widgets/javascript/thermal_sensors.js | 302 +++++++++------------ .../www/widgets/widgets/thermal_sensors.widget.php | 150 +++++----- 2 files changed, 208 insertions(+), 244 deletions(-) (limited to 'src') diff --git a/src/usr/local/www/widgets/javascript/thermal_sensors.js b/src/usr/local/www/widgets/javascript/thermal_sensors.js index 7415b01..75e143b 100644 --- a/src/usr/local/www/widgets/javascript/thermal_sensors.js +++ b/src/usr/local/www/widgets/javascript/thermal_sensors.js @@ -1,36 +1,59 @@ /* $Id: thermal_sensors.js - Description: - Javascript functions to get and show thermal sensors data in thermal_sensors.widget.php. - NOTE: depends on proper config in System >> Advanced >> Miscellaneous tab >> Thermal Sensors section. - File location: - \usr\local\www\widgets\javascript\ - Used by: - \usr\local\www\widgets\widgets\thermal_sensors.widget.php - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. */ - - +/* ==================================================================== + * Copyright (c) 2004-2015 Electric Sheep Fencing, LLC. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * "This product includes software developed by the pfSense Project + * for use in the pfSense software distribution. (http://www.pfsense.org/). + * + * 4. The names "pfSense" and "pfSense Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * coreteam@pfsense.org. + * + * 5. Products derived from this software may not be called "pfSense" + * nor may "pfSense" appear in their names without prior written + * permission of the Electric Sheep Fencing, LLC. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * + * "This product includes software developed by the pfSense Project + * for use in the pfSense software distribution (http://www.pfsense.org/). + * + * THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ==================================================================== + * + */ + +warningTemp = 9999; +criticalTemp = 100; //should be called from "thermal_sensors.widget.php" function showThermalSensorsData() { @@ -63,7 +86,11 @@ function buildThermalSensorsData(thermalSensorsData) { if (thermal_sensors_widget_showRawOutput) { buildThermalSensorsDataRaw(thermalSensorsData); } else { - buildThermalSensorsDataGraph(thermalSensorsData); + if(warningTemp == 9999) { + buildThermalSensorsDataGraph(thermalSensorsData); + } + + updateThermalSensorsDataGraph(thermalSensorsData); } } @@ -95,22 +122,6 @@ function loadThermalSensorsContainer (thermalSensorsContent) { function buildThermalSensorsDataGraph(thermalSensorsData) { - //local constants - var normalColor = "LimeGreen"; - var normalColorShadowTop = "Lime"; - var normalColorShadowBottom = "Green"; - - var warningColor = "Orange"; - var warningColorShadowBottom = "Chocolate"; - - var criticalColor = "Red"; - var criticalColorShadowBottom = "DarkRed"; - - //local variables - var barBgColor = normalColor; //green/normal as default - var barBgColorShadowTop = normalColorShadowTop; //green/normal as default - var barBgColorShadowBottom = normalColorShadowBottom; //green/normal as default - var thermalSensorsArray = new Array(); if (thermalSensorsData && thermalSensorsData != "") { @@ -118,7 +129,6 @@ function buildThermalSensorsDataGraph(thermalSensorsData) { } var thermalSensorsHTMLContent = ""; - var itemsToPulsate = new Array(); //generate graph for each temperature sensor and append to thermalSensorsHTMLContent string for (var i = 0; i < thermalSensorsArray.length; i++) { @@ -127,72 +137,13 @@ function buildThermalSensorsDataGraph(thermalSensorsData) { var sensorName = sensorDataArray[0].trim(); var thermalSensorValue = getThermalSensorValue(sensorDataArray[1]); - var pulsateTimes = 0; - var pulsateDuration = 0; - - var warningTempThresholdPosition = 0; - var criticalTempThresholdPosition = 0; - - //NOTE: the following variables are declared/set in "thermal_sensors.widget.php": - // thermal_sensors_widget_coreWarningTempThreshold, thermal_sensors_widget_coreCriticalTempThreshold, - // thermal_sensors_widget_zoneWarningTempThreshold, thermal_sensors_widget_zoneCriticalTempThreshold - // thermal_sensors_widget_pulsateWarning, thermal_sensors_widget_pulsateCritical - - //set graph color and pulsate parameters + //set thresholds if (sensorName.indexOf("cpu") > -1) { //check CPU Threshold config settings - - warningTempThresholdPosition = thermal_sensors_widget_coreWarningTempThreshold; - criticalTempThresholdPosition = thermal_sensors_widget_coreCriticalTempThreshold; - - if (thermalSensorValue < thermal_sensors_widget_coreWarningTempThreshold) { - barBgColor = normalColor; - barBgColorShadowTop = normalColorShadowTop; - barBgColorShadowBottom = normalColorShadowBottom; - pulsateTimes = 0; - pulsateDuration = 0; - } else if (thermalSensorValue >= thermal_sensors_widget_coreWarningTempThreshold && thermalSensorValue < thermal_sensors_widget_coreCriticalTempThreshold) { - barBgColor = warningColor; - barBgColorShadowTop = warningColor; - barBgColorShadowBottom = warningColorShadowBottom; - pulsateTimes = thermal_sensors_widget_pulsateWarning ? 4 : 0; - pulsateDuration = thermal_sensors_widget_pulsateWarning ? 900 : 0; - } else { // thermalSensorValue > thermal_sensors_widget_coreCriticalTempThreshold - barBgColor = criticalColor; - barBgColorShadowTop = criticalColor; - barBgColorShadowBottom = criticalColorShadowBottom; - pulsateTimes = thermal_sensors_widget_pulsateCritical ? 7 : 0; - pulsateDuration = thermal_sensors_widget_pulsateCritical ? 900 : 0; - } + warningTemp = thermal_sensors_widget_coreWarningTempThreshold; + criticalTemp = thermal_sensors_widget_coreCriticalTempThreshold; } else { //assuming sensor is for a zone, check Zone Threshold config settings - - warningTempThresholdPosition = thermal_sensors_widget_zoneWarningTempThreshold; - criticalTempThresholdPosition = thermal_sensors_widget_zoneCriticalTempThreshold; - - if (thermalSensorValue < thermal_sensors_widget_zoneWarningTempThreshold) { - - barBgColor = normalColor; - barBgColorShadowTop = normalColorShadowTop; - barBgColorShadowBottom = normalColorShadowBottom; - pulsateTimes = 0; - pulsateDuration = 0; - - } else if (thermalSensorValue >= thermal_sensors_widget_zoneWarningTempThreshold && - thermalSensorValue < thermal_sensors_widget_zoneCriticalTempThreshold) { - - barBgColor = warningColor; - barBgColorShadowTop = warningColor; - barBgColorShadowBottom = warningColorShadowBottom; - pulsateTimes = thermal_sensors_widget_pulsateWarning ? 4 : 0; - pulsateDuration = thermal_sensors_widget_pulsateWarning ? 900 : 0; - - } else { // thermalSensorValue > thermal_sensors_widget_zoneCriticalTempThreshold - - barBgColor = criticalColor; - barBgColorShadowTop = criticalColor; - barBgColorShadowBottom = criticalColorShadowBottom; - pulsateTimes = thermal_sensors_widget_pulsateCritical ? 7 : 0; - pulsateDuration = thermal_sensors_widget_pulsateCritical ? 900 : 0; - } + warningTemp = thermal_sensors_widget_zoneWarningTempThreshold; + criticalTemp = thermal_sensors_widget_zoneCriticalTempThreshold; } //NOTE: variable thermal_sensors_widget_showFullSensorName is declared/set in "thermal_sensors.widget.php" @@ -201,78 +152,55 @@ function buildThermalSensorsDataGraph(thermalSensorsData) { } //build temperature item/row for a sensor - //NOTE: additional styles are set in 'thermal_sensors.widget.php' - var thermalSensorRow = "
" + - //sensor name and temperature value - "
" + sensorName + ":
" + thermalSensorValue + " °C
" + - //temperature bar - "
" + - "
" + - //threshold targets (warning and critical) - "
" + - "
" + - //temperature scale (max 100 C) - "
" + - "
" + - "
" + - "
" + - "
" + - "
" + - "
" + - "
" + - "
" + - "
" + - "
" + - "
100°
" + - "
" + - "
"; - - //collect parameters for warning/critical items we need to pulsate - if (pulsateTimes > 0) { - var params = i + "|" + barBgColor + "|" + pulsateTimes + "|" + pulsateDuration; - itemsToPulsate.push(params); - } - //append HTML item + var thermalSensorRow = '
' + + '
' + + '
' + + '
' + + '
' + + '' + sensorName + ': ' + '' + thermalSensorValue + ' °C'; + + thermalSensorsHTMLContent = thermalSensorsHTMLContent + thermalSensorRow; + } //load generated graph into thermalSensorsContainer (DIV defined in "thermal_sensors.widget.php") loadThermalSensorsContainer(thermalSensorsHTMLContent); - if (itemsToPulsate.length > 0) { - //pulsate/flash warning/critical items we collected - pulsateThermalSensorsItems(itemsToPulsate); - } + } -function pulsateThermalSensorsItems(itemsToPulsate) { - - //pulsate/flash warning/critical items we collected - for (var i = 0; i < itemsToPulsate.length; i++) { - - var pulsateParams = itemsToPulsate[i].split("|"); - var rowNum = parseInt(pulsateParams[0]); - //var textColor = pulsateParams[1]; - var pulsateTimes = parseInt(pulsateParams[2]); - var pulsateDuration = parseInt(pulsateParams[3]); - - //pulsate temp Value - var divThermalSensorValue = jQuery("#thermalSensorValue" + rowNum); //get temp value by id - divThermalSensorValue.effect("pulsate", { - times: pulsateTimes, - easing: 'linear' //'easeInExpo' - }, pulsateDuration); - ////set Temp Value color - //divThermalSensorValue.css({ color: textColor }); - - //pulsate temp Bar - var divThermalSensorBar = jQuery("#thermalSensorBar" + rowNum); //get temp bar by id - divThermalSensorBar.effect("pulsate", { - times: pulsateTimes, - easing: 'linear' //'easeInExpo' - }, pulsateDuration); +function updateThermalSensorsDataGraph(thermalSensorsData) { + var thermalSensorsArray = new Array(); + + if (thermalSensorsData && thermalSensorsData != "") { + thermalSensorsArray = thermalSensorsData.split("|"); + } + + //generate graph for each temperature sensor and append to thermalSensorsHTMLContent string + for (var i = 0; i < thermalSensorsArray.length; i++) { + + var sensorDataArray = thermalSensorsArray[i].split(":"); + var sensorName = sensorDataArray[0].trim(); + var thermalSensorValue = getThermalSensorValue(sensorDataArray[1]); + + + //set thresholds + if (sensorName.indexOf("cpu") > -1) { //check CPU Threshold config settings + warningTemp = thermal_sensors_widget_coreWarningTempThreshold; + criticalTemp = thermal_sensors_widget_coreCriticalTempThreshold; + } else { //assuming sensor is for a zone, check Zone Threshold config settings + warningTemp = thermal_sensors_widget_zoneWarningTempThreshold; + criticalTemp = thermal_sensors_widget_zoneCriticalTempThreshold; + } + //NOTE: variable thermal_sensors_widget_showFullSensorName is declared/set in "thermal_sensors.widget.php" + if (!thermal_sensors_widget_showFullSensorName) { + sensorName = getSensorFriendlyName(sensorName); + } + + setTempProgress(i, thermalSensorValue); } } @@ -294,3 +222,29 @@ function getSensorFriendlyName(sensorFullName) { function getThermalSensorValue(stringValue) { return (+parseFloat(stringValue) || 0).toFixed(1); } + +// Update the progress indicator +// transition = true allows the bar to move at default speed, false = instantaneous +function setTempProgress(bar, percent) { + var barTempL, barTempM, barTempH; + + if(percent <= warningTemp) { + barTempL = percent; + barTempM = 0; + barTempH = 0; + } else if(percent <= criticalTemp) { + barTempL = WarningTemp; + barTempM = percent - warningTemp; + barTempH = 0; + } else { + barTempL = warningTemp; + barTempM = criticalTemp - warningTemp; + barTempH = percent - criticalTemp; + } + + $('#' + 'temperaturebarL' + bar).css('width', barTempL + '%').attr('aria-valuenow', barTempL); + $('#' + 'temperaturebarM' + bar).css('width', barTempM + '%').attr('aria-valuenow', barTempM); + $('#' + 'temperaturebarH' + bar).css('width', barTempH + '%').attr('aria-valuenow', barTempH); + + $('#' + 'temperaturemsg' + bar).html(percent + ' °C'); +} \ No newline at end of file diff --git a/src/usr/local/www/widgets/widgets/thermal_sensors.widget.php b/src/usr/local/www/widgets/widgets/thermal_sensors.widget.php index 875ccb2..78d0983 100644 --- a/src/usr/local/www/widgets/widgets/thermal_sensors.widget.php +++ b/src/usr/local/www/widgets/widgets/thermal_sensors.widget.php @@ -1,37 +1,56 @@ > Advanced >> Miscellaneous tab >> Thermal Sensors section. - - File location: - \usr\local\www\widgets\widgets\ - Depends on: - \usr\local\www\widgets\javascript\thermal_sensors.js - \usr\local\www\widgets\include\thermal_sensors.inc - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. +*/ +/* ==================================================================== + * Copyright (c) 2004-2015 Electric Sheep Fencing, LLC. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * "This product includes software developed by the pfSense Project + * for use in the pfSense software distribution. (http://www.pfsense.org/). + * + * 4. The names "pfSense" and "pfSense Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * coreteam@pfsense.org. + * + * 5. Products derived from this software may not be called "pfSense" + * nor may "pfSense" appear in their names without prior written + * permission of the Electric Sheep Fencing, LLC. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * + * "This product includes software developed by the pfSense Project + * for use in the pfSense software distribution (http://www.pfsense.org/). + * + * THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ==================================================================== + * */ require_once("guiconfig.inc"); @@ -87,8 +106,8 @@ function saveThresholdSettings(&$configArray, &$postArray, $warningValueKey, $cr } if (($warningValue >= MIN_THRESHOLD_VALUE && $warningValue <= MAX_THRESHOLD_VALUE) && - ($criticalValue >= MIN_THRESHOLD_VALUE && $criticalValue <= MAX_THRESHOLD_VALUE) && - ($warningValue < $criticalValue)) { + ($criticalValue >= MIN_THRESHOLD_VALUE && $criticalValue <= MAX_THRESHOLD_VALUE) && + ($warningValue < $criticalValue)) { //all validated ok, save to config array $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$warningValueKey] = $warningValue; $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$criticalValueKey] = $criticalValue; @@ -159,14 +178,19 @@ function getBoolValueFromConfig(&$configArray, $valueKey, $defaultValue) { //start showing temp data //NOTE: the refresh interval will be reset to a proper value in showThermalSensorsData() (thermal_sensors.js). - jQuery(document).ready(function() { + events.push(function(){ showThermalSensorsData(); }); //]]> - +
+
+ (Updating...)

+
+
- +