aboutsummaryrefslogtreecommitdiffstats
path: root/gui-pdp-monitoring/src/main/resources/webapp/js/MonitoringMain.js
diff options
context:
space:
mode:
Diffstat (limited to 'gui-pdp-monitoring/src/main/resources/webapp/js/MonitoringMain.js')
-rw-r--r--gui-pdp-monitoring/src/main/resources/webapp/js/MonitoringMain.js295
1 files changed, 295 insertions, 0 deletions
diff --git a/gui-pdp-monitoring/src/main/resources/webapp/js/MonitoringMain.js b/gui-pdp-monitoring/src/main/resources/webapp/js/MonitoringMain.js
new file mode 100644
index 0000000..6c8e291
--- /dev/null
+++ b/gui-pdp-monitoring/src/main/resources/webapp/js/MonitoringMain.js
@@ -0,0 +1,295 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+var restRootURL;
+
+// Configuration used for page layout and charts
+var config = {
+ refresh : 5000,
+ restPort : 17999,
+ engineService : {
+ parent : "engineService",
+ tableId : "engineServicesTable",
+ headers : [ {
+ title : "Engine Service ID",
+ id : "engine_id"
+ }, {
+ title : "GroupName",
+ id : "group_name"
+ }, {
+ title : "SubGroupName",
+ id : "subgroup_name"
+ },{
+ title : "HealthStatus",
+ id : "health_status"
+ },{
+ title : "PdpState",
+ id : "pdp_state"
+ },{
+ title : "Pap server:port",
+ id : "server_port"
+ }]
+ },
+ engineSummary : {
+ parent : "engineSummary",
+ tableId : "engineSummaryTable",
+ headers : [ {
+ title : "Timestamp",
+ id : "timestamp"
+ }, {
+ title : "Sum of policy deploy",
+ id : "policy_deploy"
+ }, {
+ title : "Sum of policy deploy success",
+ id : "policy_deploy_success"
+ }, {
+ title : "Sum of policy deploy fail",
+ id : "policy_deploy_fail"
+ }, {
+ title : "Sum of policy executions",
+ id : "policy_executions"
+ }, {
+ title : "Sum of policy executions success",
+ id : "policy_executions_success"
+ } , {
+ title : "Sum of policy executions fail",
+ id : "policy_executions_fail"
+ }, {
+ title : "Up Time(ms)",
+ id : "up_time"
+ }],
+ chart : {
+ avgPolicyDurationChart : {
+ parent : "avgPolicyDuration",
+ title : "Average Policy Duration (ms)",
+ unit : "ms",
+ lineStroke : "#5FBADD",
+ nodeColour : "#00A9D4"
+ },
+ }
+ },
+ engineStatus : {
+ parent : "engineStatus",
+ tableId : "engineStatusTable",
+ headers : [ {
+ title : "Timestamp",
+ id : "timestamp"
+ }, {
+ title : "Engine ID",
+ id : "engine_id"
+ }, {
+ title : "Engine Status",
+ id : "engine_status"
+ }, {
+ title : "Last Message",
+ id : "last_message"
+ }, {
+ title : "Up Time (ms)",
+ id : "up_time"
+ }, {
+ title : "Policy Executions",
+ id : "policy_executions"
+ } ]
+ },
+ engineChart : {
+ lastPolicyDurationChart : {
+ parent : "lastPolicyDurationChart",
+ title : "Last Policy Duration (ms)",
+ unit : "ms",
+ lineStroke : "#F5A241",
+ nodeColour : "#F08A00"
+ },
+ averagePolicyDurationChart : {
+ parent : "averagePolicyDurationChart",
+ title : "Average Policy Duration (ms)",
+ unit : "ms",
+ lineStroke : "#00625F",
+ nodeColour : "#007B78"
+ }
+ }
+};
+
+function getPdpList(data) {
+ const pdpArray = [];
+ for(let i = 0; i < data.groups.length; i++) {
+ var map = {};
+ map.title = data.groups[i].name;
+ map.children = [];
+ (data.groups[i].pdpSubgroups).forEach( (pdpSubgroup, index)=> {
+ map.children[index] = {};
+ map.children[index].title= pdpSubgroup.pdpType;
+ const instanceId = [];
+ pdpSubgroup.pdpInstances.forEach(pdpInstance => {
+ var instanceIdMap = {};
+ instanceIdMap.title = pdpInstance.instanceId;
+ instanceId.push(instanceIdMap)
+ });
+ map.children[index].children = instanceId;
+ });
+ pdpArray.push(map);
+ }
+ RenderPdpList(pdpArray, 'pdps__list');
+}
+
+
+
+function servicesCallback(data){
+ var engineURL = localStorage.getItem("pap-monitor-services");
+ if (engineURL) {
+ this.engineURL = JSON.parse(engineURL);
+ if (this.engineURL.hostname === data.server && this.engineURL.port === data.port) {
+ setEngineServiceData(data.engineId, this.groupName, this.subGroupName, data.healthStatus, data.pdpState, data.server, data.port);
+ setEngineSummaryData(data.status, data.timeStamp, data.policyDeployCount, data.policyDeploySuccessCount, data.policyDeployFailCount, data.policyExecutedCount, data.policyExecutedSuccessCount, data.policyExecutedFailCount);
+
+ if(this.engine_id === data.engineId){
+ setEngineStatusData(data.status, false);
+ }else{
+ removeChildrenElementsByClass(config.engineStatus.parent);
+ setEngineStatusData(data.status, true);
+ }
+
+ this.engine_id = data.engineId;
+
+ // Make content visible after data has been returned for the first time
+ if (!$(".content").is(':visible')) {
+ $(".content").fadeIn();
+ }
+
+ // Repeat the same request
+ setTimeout(function() {
+ this.servicesCall = ajax_get_statistics(restRootURL+"statistics/", servicesCallback, this.services.useHttps, this.services.hostname, this.services.port, this.services.username, this.services.password, id);
+ }, config.refresh);
+ }
+ }
+}
+
+/*
+ * Clears and resets all content on the page
+ */
+function setUpPage(clearPdps) {
+ // Hide all content
+ $('#content').hide();
+
+ // Clear each div
+ $('#content > div').each(function() {
+ $(this).empty();
+ });
+
+ // clear hashchange
+ history.replaceState(null, null, ' ');
+
+ //remove last search result of pdps.
+ if(clearPdps){
+ removeChildrenElementsByClass('pdps__list');
+ }else{
+ localStorage.setItem("pap-monitor-services", localStorage.getItem("pap-monitor-services_old"));
+ }
+
+ // Reset trackers for tables
+ this.engineStatusTables = [];
+ this.engineContextTables = [];
+
+ // Set up content div's
+ createEngineServiceTable();
+ createEngineSummaryTable();
+}
+
+/*
+ * Retrieves the engine URL from the cookie. If it has not been set yet, then a
+ * dialog is shown asking for it
+ */
+function getEngineURL(message) {
+ // The engine URL is stored in a cookie using the key
+ // "pap-monitor-services"
+ var services = localStorage.getItem("pap-monitor-services");
+
+ // If an engine URL is stored in the cookie
+ if (services) {
+ // Parse the engine URL
+ this.services = JSON.parse(services);
+
+ // Send a request with that engine URL
+ ajax_get(restRootURL, getPdpList, this.services.useHttps, this.services.hostname, this.services.port, this.services.username, this.services.password);
+ } else {
+ // Prompt for engine URL
+ papDialogFormActivate(document.body, message);
+ }
+}
+
+/*
+ * Clears the cookie and reset the page
+ */
+function clearEngineURL(clearPdps) {
+
+ if(typeof this.servicesCall !== "undefined"){
+ this.servicesCall.abort();
+ }
+
+ // Remove engine URL from cookie
+ localStorage.removeItem("pap-monitor-services");
+
+ // Reset the page
+ setUpPage(clearPdps);
+}
+
+/*
+ * Called after the DOM is ready
+ */
+$(document).ready(
+ function() {
+ restRootURL = location.protocol
+ + "//"
+ + window.location.hostname
+ + ':' + config.restPort
+ + (location.pathname.endsWith("/monitoring/") ? location.pathname.substring(0, location.pathname.indexOf("monitoring/")) : location.pathname)
+ + "papservices/monitoring/";
+ // Initialize tooltip for the charts
+ initTooltip();
+
+ // Set up the structure of the page
+ setUpPage(true);
+
+ // Check cookies for engine URL
+ getEngineURL();
+
+ // Add click event to config icon for clearing engine URL
+ $(".ebSystemBar-config").click(
+ function() {
+ // Clear the engine URL
+ clearEngineURL(true);
+
+ // Request the engine URL
+ getEngineURL();
+ }
+ );
+
+ ['hashchange', 'load'].forEach(event => window.addEventListener(event, function() {
+ // Get ID from url
+ this.id = window.location.hash.replace('#', '');
+ if(id !== ''){
+ var arr = id.split("/");
+ this.groupName = arr[0];
+ this.subGroupName = arr[1];
+ highlightSelected(id);
+ ajax_get_statistics(restRootURL+"statistics/", servicesCallback, this.services.useHttps, this.services.hostname, this.services.port, this.services.username, this.services.password, id);
+ }
+ }));
+ }
+); \ No newline at end of file