/*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. * Modifications Copyright (C) 2021 Bell Canada. All rights reserved. * ================================================================================ * 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========================================================= */ import $ from "jquery"; import { createEngineServiceTable } from "./PdpInformation"; import { createEngineSummaryTable } from "./PdpStatisticsSummary"; import { RenderPdpList } from "./PdpListView"; /* * Crate a dialog with input, attach it to a given parent and show an optional message */ function papDialogFormActivate(formParent, message) { papUtilsRemoveElement("papDialogDiv"); var contentelement = document.createElement("papDialogDiv"); var formDiv = document.createElement("div"); var backgroundDiv = document.createElement("div"); backgroundDiv.setAttribute("id", "papDialogDivBackground"); backgroundDiv.setAttribute("class", "papDialogDivBackground"); backgroundDiv.appendChild(formDiv); contentelement.appendChild(backgroundDiv); formParent.appendChild(contentelement); formDiv.setAttribute("id", "papDialogDiv"); formDiv.setAttribute("class", "papDialogDiv"); var headingSpan = document.createElement("span"); formDiv.appendChild(headingSpan); headingSpan.setAttribute("class", "headingSpan"); headingSpan.innerHTML = "PAP Configuration"; var form = document.createElement("papDialog"); formDiv.appendChild(form); form.setAttribute("id", "papDialog"); form.setAttribute("class", "form-style-1"); form.setAttribute("method", "post"); if (message) { var messageLI = document.createElement("li"); messageLI.setAttribute("class", "dialogMessage"); messageLI.innerHTML = message; form.appendChild(messageLI); } var services = localStorage.getItem("pap-monitor-services_old"); //url var input = createDialogList(form, "papDialogUrlInput","Pap rest baseURL:", "services_url_input", "http://localhost:12345", (services && services !== "null") ? JSON.parse(services).useHttps + "://" + JSON.parse(services).hostname + ":" + JSON.parse(services).port : ""); //UserName createDialogList(form, "papDialogUsernameInput","Pap UserName:", "services_username_input", "username", (services && services !== "null") ? JSON.parse(services).username : ""); //Password createDialogList(form, "papDialogPasswordInput","Pap Password:", "services_password_input", "password", (services && services !== "null") ? JSON.parse(services).password : ""); //submit var inputLI = document.createElement("li"); form.appendChild(inputLI); var submitInput = document.createElement("input"); submitInput.setAttribute("id", "submit"); submitInput.setAttribute("class", "button ebBtn"); submitInput.setAttribute("type", "submit"); submitInput.setAttribute("value", "Submit"); submitInput.onclick = papDialogFormSubmitPressed; inputLI.appendChild(submitInput); // Enter key press triggers submit $(input).keyup(function(event) { if (event.keyCode == 13) { $(submitInput).click(); } }); input.focus(); } function createDialogList(form, forA, reminder, id, placeholder, value_old){ var diaLI = document.createElement("li"); form.appendChild(diaLI); var diaLabel = document.createElement("label"); diaLI.appendChild(diaLabel); diaLabel.setAttribute("for", forA); diaLabel.innerHTML = reminder; var diaLabelSpan = document.createElement("span"); diaLabel.appendChild(diaLabelSpan); diaLabelSpan.setAttribute("class", "required"); diaLabelSpan.innerHTML = "*"; var input = document.createElement("input"); input.setAttribute("id", id); input.setAttribute("placeholder", placeholder); input.value = value_old; diaLI.appendChild(input); return input; } /* * Create a dialog for displaying text */ function papTextDialogActivate(formParent, message, title) { papUtilsRemoveElement("papDialogDiv"); var contentelement = document.createElement("div"); contentelement.setAttribute("id", "papDialogDiv") var formDiv = document.createElement("div"); var backgroundDiv = document.createElement("div"); backgroundDiv.setAttribute("id", "papDialogDivBackground"); backgroundDiv.setAttribute("class", "papDialogDivBackground"); backgroundDiv.appendChild(formDiv); contentelement.appendChild(backgroundDiv); formParent.appendChild(contentelement); formDiv.setAttribute("id", "papErrorDialogDiv"); formDiv.setAttribute("class", "papDialogDiv papErrorDialogDiv"); var headingSpan = document.createElement("span"); formDiv.appendChild(headingSpan); headingSpan.setAttribute("class", "headingSpan"); headingSpan.innerHTML = title; var form = document.createElement("div"); formDiv.appendChild(form); form.setAttribute("id", "papDialog"); form.setAttribute("class", "form-style-1"); form.setAttribute("method", "post"); if (message) { var messageLI = document.createElement("li"); messageLI.setAttribute("class", "dialogMessage"); messageLI.innerHTML = message; form.appendChild(messageLI); } var inputLI = document.createElement("li"); form.appendChild(inputLI); var cancelInput = document.createElement("input"); cancelInput.setAttribute("class", "button ebBtn"); cancelInput.setAttribute("type", "submit"); cancelInput.setAttribute("value", "Close"); cancelInput.onclick = newModelFormCancelPressed; form.appendChild(cancelInput); } /* * Create a Success dialog */ function papSuccessDialogActivate(formParent, message) { papTextDialogActivate(formParent, message, "Success"); } /* * Create an Error dialog */ function papErrorDialogActivate(formParent, message) { papTextDialogActivate(formParent, message, "Error"); } /* * Dialog cancel callback */ function newModelFormCancelPressed() { papUtilsRemoveElement("papDialogDivBackground"); } /* * Dialog submit callback */ function papDialogFormSubmitPressed() { var url = $('#services_url_input').val(); var userName = $('#services_username_input').val(); var passWord = $('#services_password_input').val(); if (url.length > 0 && userName.length > 0 && passWord.length > 0) { var engineConfig = { useHttps : url.split(":")[0] == "https"? "https": "http", hostname : url.split(":")[1].split("//")[1], port : url.split(":")[2], username : userName, password : passWord }; localStorage.setItem("pap-monitor-services_old", JSON.stringify(engineConfig)); localStorage.setItem("pap-monitor-services", JSON.stringify(engineConfig)); papUtilsRemoveElement("papDialogDivBackground"); getEngineURL(); } } /* * Remove an element from the page */ function papUtilsRemoveElement(elementname) { var element = document.getElementById(elementname); if (element != null) { element.parentNode.removeChild(element); } } function getHomepageURL() { var homepageURL = location.protocol + "//" + window.location.hostname + (location.port ? ':' + location.port : '') + (location.pathname.endsWith("/monitoring/") ? location.pathname.substring(0, location.pathname .indexOf("monitoring/")) : location.pathname); location.href = homepageURL; } function removeChildrenElementsByClass(className){ var elements = document.getElementsByClassName(className); elements[0].innerHTML = ''; } /* * 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 window.engineStatusTables = []; // 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 window.services = JSON.parse(services); // Send a request with that engine URL ajax_get(window.restRootURL, getPdpList, window.services.useHttps, window.services.hostname, window.services.port, window.services.username, window.services.password); } else { // Prompt for engine URL papDialogFormActivate(document.body, message); } } /* * Clears the cookie and reset the page */ function clearEngineURL(clearPdps) { if (typeof window.servicesCall !== "undefined") { window.servicesCall.abort(); } // Remove engine URL from cookie localStorage.removeItem("pap-monitor-services"); // Reset the page setUpPage(clearPdps); } function getPdpList(data) { const pdpArray = []; for (let value of data.groups) { var map = {}; map.title = value.name; map.children = []; (value.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'); } /* * Send a GET request */ function ajax_get(requestURL, callback, useHttps, hostname, port, username, password, params, errorCallback) { var data = { useHttps: useHttps, hostname: hostname, port: port, username: username, password: password }; for (var p in params) { data[p] = params[p]; } return $.ajax({ type: 'GET', url: requestURL, dataType: "json", data: data, success: function (data, textStatus, jqXHR) { if (callback) { callback(data); } }, error: function (jqXHR, textStatus, errorThrown) { if (jqXHR.status == 500 || jqXHR.status == 404) { if (jqXHR.status == 404 || jqXHR.responseText.indexOf("Request failed.") !== -1) { clearEngineURL(true); getEngineURL("Cannot connect to PAP"); } else { papErrorDialogActivate(document.body, jqXHR.responseText); } } if (errorCallback) { errorCallback(jqXHR, textStatus, errorThrown); } } }); } function ajax_get_statistics(requestURL, callback, useHttps, hostname, port, username, password, id, params, errorCallback) { var data = { useHttps: useHttps, hostname: hostname, port: port, username: username, password: password, id: id }; for (var p in params) { data[p] = params[p]; } return $.ajax({ type: 'GET', url: requestURL, dataType: "json", data: data, success: function (data, textStatus, jqXHR) { if (callback) { callback(data); } }, error: function (jqXHR, textStatus, errorThrown) { if (jqXHR.status == 500 || jqXHR.status == 404) { clearEngineURL(false); papErrorDialogActivate(document.body, "Failed to get Statistics in DB."); } if (errorCallback) { errorCallback(jqXHR, textStatus, errorThrown); } } }); } export { removeChildrenElementsByClass, papDialogFormActivate, papErrorDialogActivate, clearEngineURL, getEngineURL, setUpPage, ajax_get, ajax_get_statistics, papUtilsRemoveElement, };