aboutsummaryrefslogtreecommitdiffstats
path: root/POLICY-SDK-APP/src
diff options
context:
space:
mode:
authorWang,Frank(gw1218) <gw1218@att.com>2018-08-22 13:44:09 -0500
committerWang,Frank(gw1218) <gw1218@att.com>2018-08-23 11:30:21 -0500
commit44bae6729336dfc47f1aaaa2c4e88f4e32e207ce (patch)
tree308c674baca1d2ce9ff378964d6392b58b941928 /POLICY-SDK-APP/src
parentc25e4d412eb573de020ba4e5da48f48451217f52 (diff)
Enhancement on Dashboard
Enhancement on dashboard by including more info related to CRUD actions on policies and also providing an advanced search feature. Issue-ID: POLICY-1042 Change-Id: I987e0ca13824413f90299a366fb4464fca7de06a Signed-off-by: Wang,Frank(gw1218) <gw1218@att.com>
Diffstat (limited to 'POLICY-SDK-APP/src')
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/controller/DashboardController.java1011
-rw-r--r--POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dashboardCRUDController.js156
-rw-r--r--POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/policyController.js6
-rw-r--r--POLICY-SDK-APP/src/main/webapp/app/policyApp/main/policyEditor.html1
-rw-r--r--POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/css/main.css83
-rw-r--r--POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardCRUD.html99
-rw-r--r--POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardHealth.html6
-rw-r--r--POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardLogging.html6
8 files changed, 1000 insertions, 368 deletions
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/DashboardController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/DashboardController.java
index d1483a223..d3af75dfd 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/DashboardController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/DashboardController.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP Policy Engine
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. 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.
@@ -20,9 +20,20 @@
package org.onap.policy.controller;
-
+import com.att.research.xacml.api.pap.PAPException;
+import com.att.research.xacml.api.pap.PDP;
+import com.att.research.xacml.api.pap.PDPGroup;
+import com.att.research.xacml.api.pap.PDPPolicy;
+import com.att.research.xacml.util.XACMLProperties;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
+import java.io.PrintWriter;
import java.net.MalformedURLException;
+import java.sql.Timestamp;
+import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -30,7 +41,6 @@ import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
@@ -43,7 +53,6 @@ import javax.management.remote.JMXServiceURL;
import javax.script.SimpleBindings;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-
import org.json.JSONObject;
import org.onap.policy.common.logging.flexlogger.FlexLogger;
import org.onap.policy.common.logging.flexlogger.Logger;
@@ -51,6 +60,8 @@ import org.onap.policy.dao.SystemLogDbDao;
import org.onap.policy.model.PDPGroupContainer;
import org.onap.policy.rest.XACMLRestProperties;
import org.onap.policy.rest.dao.CommonClassDao;
+import org.onap.policy.rest.jpa.PolicyEntity;
+import org.onap.policy.utils.PolicyUtils;
import org.onap.policy.xacml.api.XACMLErrorConstants;
import org.onap.policy.xacml.api.pap.OnapPDP;
import org.onap.policy.xacml.api.pap.OnapPDPGroup;
@@ -61,365 +72,641 @@ import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
-import com.att.research.xacml.api.pap.PAPException;
-import com.att.research.xacml.api.pap.PDP;
-import com.att.research.xacml.api.pap.PDPGroup;
-import com.att.research.xacml.api.pap.PDPPolicy;
-import com.att.research.xacml.util.XACMLProperties;
-import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
-import com.fasterxml.jackson.annotation.PropertyAccessor;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
@Controller
@RequestMapping({"/"})
-public class DashboardController extends RestrictedBaseController{
- private static final Logger policyLogger = FlexLogger.getLogger(DashboardController.class);
- @Autowired
- CommonClassDao commonClassDao;
-
- @Autowired
- SystemLogDbDao systemDAO;
-
- public void setCommonClassDao(CommonClassDao commonClassDao) {
- this.commonClassDao = commonClassDao;
- }
- public void setSystemLogDbDao(SystemLogDbDao systemDAO){
- this.systemDAO = systemDAO;
- }
-
- private int pdpCount;
- private PDPGroupContainer pdpConatiner;
- private ArrayList<Object> pdpStatusData;
- private ArrayList<Object> papStatusData;
- private ArrayList<Object> policyActivityData;
-
- private PolicyController policyController;
- public PolicyController getPolicyController() {
- return policyController;
- }
-
- public void setPolicyController(PolicyController policyController) {
- this.policyController = policyController;
- }
-
- private PolicyController getPolicyControllerInstance(){
- return policyController != null ? getPolicyController() : new PolicyController();
- }
-
- @RequestMapping(value={"/get_DashboardLoggingData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
- public void getData(HttpServletRequest request, HttpServletResponse response){
- try{
- Map<String, Object> model = new HashMap<>();
- ObjectMapper mapper = new ObjectMapper();
- model.put("availableLoggingDatas", mapper.writeValueAsString(systemDAO.getLoggingData()));
- JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
- JSONObject j = new JSONObject(msg);
- response.getWriter().write(j.toString());
- }
- catch (Exception e){
- policyLogger.error("Exception Occured"+e);
- }
- }
-
- @RequestMapping(value={"/get_DashboardSystemAlertData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
- public void getSystemAlertData(HttpServletRequest request, HttpServletResponse response){
- try{
- Map<String, Object> model = new HashMap<>();
- ObjectMapper mapper = new ObjectMapper();
- model.put("systemAlertsTableDatas", mapper.writeValueAsString(systemDAO.getSystemAlertData()));
- JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
- JSONObject j = new JSONObject(msg);
- response.getWriter().write(j.toString());
- }
- catch (Exception e){
- policyLogger.error("Exception Occured"+e);
- }
- }
-
- @RequestMapping(value={"/get_DashboardPAPStatusData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
- public void getPAPStatusData(HttpServletRequest request, HttpServletResponse response){
- try{
- Map<String, Object> model = new HashMap<>();
- ObjectMapper mapper = new ObjectMapper();
- mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
- addPAPToTable();
- model.put("papTableDatas", mapper.writeValueAsString(papStatusData));
- JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
- JSONObject j = new JSONObject(msg);
- response.getWriter().write(j.toString());
- }
- catch (Exception e){
- policyLogger.error("Exception Occured"+e);
- }
- }
-
- @RequestMapping(value={"/get_DashboardPDPStatusData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
- public void getPDPStatusData(HttpServletRequest request, HttpServletResponse response){
- try{
- Map<String, Object> model = new HashMap<>();
- ObjectMapper mapper = new ObjectMapper();
- mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
- PolicyController controller = getPolicyControllerInstance();
- this.pdpConatiner = new PDPGroupContainer(controller.getPapEngine());
- addPDPToTable();
- model.put("pdpTableDatas", mapper.writeValueAsString(pdpStatusData));
- JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
- JSONObject j = new JSONObject(msg);
- response.getWriter().write(j.toString());
- }
- catch (Exception e){
- policyLogger.error("Exception Occured"+e);
- }
- }
-
- @RequestMapping(value={"/get_DashboardPolicyActivityData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
- public void getPolicyActivityData(HttpServletRequest request, HttpServletResponse response){
- try{
- Map<String, Object> model = new HashMap<>();
- ObjectMapper mapper = new ObjectMapper();
- mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
- PolicyController controller = getPolicyControllerInstance();
- this.pdpConatiner = new PDPGroupContainer(controller.getPapEngine());
- addPolicyToTable();
- model.put("policyActivityTableDatas", mapper.writeValueAsString(policyActivityData));
- JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
- JSONObject j = new JSONObject(msg);
- response.getWriter().write(j.toString());
- }
- catch (Exception e){
- policyLogger.error("Exception Occured"+e);
- }
- }
-
- /*
- * Add the PAP information to the PAP Table
- */
- public void addPAPToTable(){
- papStatusData = new ArrayList<>();
- String papStatus = null;
- try {
- PolicyController controller = getPolicyControllerInstance();
- Set<OnapPDPGroup> groups = controller.getPapEngine().getOnapPDPGroups();
- if (groups == null) {
- throw new PAPException("PAP not running");
- }else {
- papStatus = "IS_OK";
- }
- } catch (PAPException | NullPointerException e1) {
- papStatus = "CANNOT_CONNECT";
- policyLogger.error("Error getting PAP status, PAP not responding to requests", e1);
- }
- String papURL = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL);
- JSONObject object = new JSONObject();
- object.put("system", papURL);
- object.put("status", papStatus);
- List<Object> data = commonClassDao.getDataByQuery("from PolicyEntity", new SimpleBindings());
- object.put("noOfPolicy", data.size());
- object.put("noOfConnectedTrap", pdpCount);
- papStatusData.add(0, object);
- }
-
- /**
- * Add PDP Information to the PDP Table
- *
- */
- public void addPDPToTable(){
- pdpCount = 0;
- pdpStatusData = new ArrayList<>();
- long naCount;
- long denyCount = 0;
- long permitCount = 0;
- for (PDPGroup group : this.pdpConatiner.getGroups()){
- for (PDP pdp : group.getPdps()){
- naCount = -1;
- if ("UP_TO_DATE".equals(pdp.getStatus().getStatus().toString()) && ((OnapPDP) pdp).getJmxPort() != 0){
- String pdpIpAddress = parseIPSystem(pdp.getId());
- int port = ((OnapPDP) pdp).getJmxPort();
- if (port != 0){
- policyLogger.debug("Getting JMX Response Counts from " + pdpIpAddress + " at JMX port " + port);
- naCount = getRequestCounts(pdpIpAddress, port, "pdpEvaluationNA");
- permitCount = getRequestCounts(pdpIpAddress, port, "PdpEvaluationPermit");
- denyCount = getRequestCounts(pdpIpAddress, port, "PdpEvaluationDeny");
- }
- }
- if (naCount == -1){
- JSONObject object = new JSONObject();
- object.put("id", pdp.getId());
- object.put("name", pdp.getName());
- object.put("groupname", group.getName());
- object.put("status", pdp.getStatus().getStatus().toString());
- object.put("description", pdp.getDescription());
- object.put("permitCount", "NA");
- object.put("denyCount", "NA");
- object.put("naCount", "NA");
- pdpStatusData.add(object);
- }else{
- JSONObject object = new JSONObject();
- object.put("id", pdp.getId());
- object.put("name", pdp.getName());
- object.put("groupname", group.getName());
- object.put("status", pdp.getStatus().getStatus().toString());
- object.put("description", pdp.getDescription());
- object.put("permitCount", permitCount);
- object.put("denyCount", denyCount);
- object.put("naCount", naCount);
- pdpStatusData.add(object);
- }
- pdpCount++;
- }
- }
- }
-
- private static String parseIPSystem(String line) {
- Pattern pattern = Pattern.compile("://(.+?):");
- Matcher ip = pattern.matcher(line);
- if (ip.find())
- {
- return ip.group(1);
- }
- return null;
- }
-
- /*
- * Contact JMX Connector Sever and return the value of the given jmxAttribute
- */
- @SuppressWarnings({ "rawtypes", "unchecked" })
- private long getRequestCounts(String host, int port, String jmxAttribute) {
-
- policyLogger.debug("Create an RMI connector client and connect it to the JMX connector server");
- HashMap map = null;
- try (JMXConnector jmxConnection = JMXConnectorFactory.newJMXConnector(createConnectionURL(host, port), map)){
- jmxConnection.connect();
- Object o = jmxConnection.getMBeanServerConnection().getAttribute(new ObjectName("PdpRest:type=PdpRestMonitor"), jmxAttribute);
- policyLogger.debug("pdpEvaluationNA value retreived: " + o);
- return (long) o;
- } catch (MalformedURLException e) {
- policyLogger.error("MalformedURLException for JMX connection" , e);
- } catch (IOException e) {
- policyLogger.error("Error in reteriving" + jmxAttribute + " from JMX connection", e);
- } catch (AttributeNotFoundException e) {
- policyLogger.error("AttributeNotFoundException " + jmxAttribute + " for JMX connection", e);
- } catch (InstanceNotFoundException e) {
- policyLogger.error("InstanceNotFoundException " + host + " for JMX connection", e);
- } catch (MalformedObjectNameException e) {
- policyLogger.error("MalformedObjectNameException for JMX connection", e);
- } catch (MBeanException e) {
- policyLogger.error("MBeanException for JMX connection");
- policyLogger.error("Exception Occured"+e);
- } catch (ReflectionException e) {
- policyLogger.error("ReflectionException for JMX connection", e);
- }
-
- return -1;
- }
-
- private static JMXServiceURL createConnectionURL(String host, int port) throws MalformedURLException{
- return new JMXServiceURL("rmi", "", 0, "/jndi/rmi://" + host + ":" + port + "/jmxrmi");
- }
-
-
- /*
- * Add the information to the Policy Table
- */
- private void addPolicyToTable() {
- policyActivityData = new ArrayList<>();
- String policyID;
- int policyFireCount;
- Map<String, String> policyMap = new HashMap<>();
- Object policyList;
- //get list of policy
-
- for (PDPGroup group : this.pdpConatiner.getGroups()){
- for (PDPPolicy policy : group.getPolicies()){
- try{
- policyMap.put(policy.getPolicyId().replace(" ", ""), policy.getId());
- }catch(Exception e){
- policyLogger.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID+policy.getName() +e);
- }
- }
-
- for (PDP pdp : group.getPdps()){
- // Add rows to the Policy Table
- policyList = null;
- if ("UP_TO_DATE".equals(pdp.getStatus().getStatus().toString()) && ((OnapPDP) pdp).getJmxPort() != 0){
- String pdpIpAddress = parseIPSystem(pdp.getId());
- policyList = getPolicy(pdpIpAddress, ((OnapPDP) pdp).getJmxPort(), "policyCount");
- }
- if (policyList != null && policyList.toString().length() > 3){
- String[] splitPolicy = policyList.toString().split(",");
- for (String policyKeyValue : splitPolicy){
- policyID = urnPolicyID(policyKeyValue);
- policyFireCount = countPolicyID(policyKeyValue);
- if (policyID != null && policyMap.containsKey(policyID)){
- JSONObject object = new JSONObject();
- object.put("policyId", policyMap.get(policyID));
- object.put("fireCount", policyFireCount);
- object.put("system", pdp.getId());
- policyActivityData.add(object);
- }
- }
- }else {
- if (policyList != null){
- JSONObject object = new JSONObject();
- object.put("policyId", "Unable to retrieve policy information");
- object.put("fireCount", "NA");
- object.put("system", pdp.getId());
- policyActivityData.add(object);
- }else{
- JSONObject object = new JSONObject();
- object.put("policyId", "Unable to access PDP JMX Server");
- object.put("fireCount", "NA");
- object.put("system", pdp.getId());
- policyActivityData.add(object);
- }
- }
- }
- }
- }
-
- /*
- * Contact JMX Connector Sever and return the list of {policy id , count}
- */
- @SuppressWarnings({ "rawtypes", "unchecked" })
- private Object getPolicy(String host, int port, String jmxAttribute){
- policyLogger.debug("Create an RMI connector client and connect it to the JMX connector server for Policy: " + host);
- HashMap map = null;
- try (JMXConnector jmxConnection = JMXConnectorFactory.newJMXConnector(createConnectionURL(host, port), map)) {
- jmxConnection.connect();
- Object o = jmxConnection.getMBeanServerConnection().getAttribute(new ObjectName("PdpRest:type=PdpRestMonitor"), "policyMap");
- policyLogger.debug("policyMap value retreived: " + o);
- return o;
- } catch (MalformedURLException e) {
- policyLogger.error("MalformedURLException for JMX connection" , e);
- } catch (IOException e) {
- policyLogger.error("AttributeNotFoundException for policyMap" , e);
- } catch (AttributeNotFoundException e) {
- policyLogger.error("AttributeNotFoundException for JMX connection", e);
- } catch (InstanceNotFoundException e) {
- policyLogger.error("InstanceNotFoundException " + host + " for JMX connection", e);
- } catch (MalformedObjectNameException e) {
- policyLogger.error("MalformedObjectNameException for JMX connection", e);
- } catch (MBeanException e) {
- policyLogger.error("MBeanException for JMX connection", e);
- policyLogger.error("Exception Occured"+e);
- } catch (ReflectionException e) {
- policyLogger.error("ReflectionException for JMX connection", e);
- }
-
- return null;
-
- }
-
- private static String urnPolicyID(String line){
- String[] splitLine = line.split("=");
- String removeSpaces = splitLine[0].replaceAll("\\s+", "");
- return removeSpaces.replace("{", "");
- }
-
- private static Integer countPolicyID(String line){
- String[] splitLine = line.split("=");
- String sCount = splitLine[1].replace("}", "");
- return Integer.parseInt(sCount);
- }
+public class DashboardController extends RestrictedBaseController {
+ private static final Logger policyLogger = FlexLogger.getLogger(DashboardController.class);
+ @Autowired
+ CommonClassDao commonClassDao;
+
+ @Autowired
+ SystemLogDbDao systemDAO;
+
+ public void setCommonClassDao(CommonClassDao commonClassDao) {
+ this.commonClassDao = commonClassDao;
+ }
+
+ public void setSystemLogDbDao(SystemLogDbDao systemDAO) {
+ this.systemDAO = systemDAO;
+ }
+
+ private int pdpCount;
+ private PDPGroupContainer pdpConatiner;
+ private ArrayList<Object> pdpStatusData;
+ private ArrayList<Object> papStatusData;
+ private ArrayList<Object> policyStatusCrudData;
+ private ArrayList<Object> pdpStatusCrudData;
+ private ArrayList<Object> policyActivityData;
+ private PolicyController policyController;
+ private static String defaultTime = "0000-00-00";
+ private static String createDate = "createdDate";
+ private static String modifiedDate = "modifiedDate";
+ private static String scope = "scope";
+ private static String stage = "stage";
+ private static String exceptionOccured = "Exception Occured";
+
+ public PolicyController getPolicyController() {
+ return policyController;
+ }
+
+ public void setPolicyController(PolicyController policyController) {
+ this.policyController = policyController;
+ }
+
+ private PolicyController getPolicyControllerInstance() {
+ return policyController != null ? getPolicyController() : new PolicyController();
+ }
+
+
+
+ /**
+ * This method is to retrieve all the data of last 30 days from PolicyEntity table as default.
+ *
+ * @param request object
+ * @param response object contains retrieved data
+ */
+ @RequestMapping(value = {"/get_DashboardPolicyCRUDData"},
+ method = {org.springframework.web.bind.annotation.RequestMethod.GET},
+ produces = MediaType.APPLICATION_JSON_VALUE)
+ public void get_DashboardPolicyCrudData(HttpServletRequest request, HttpServletResponse response) {
+ try {
+ Map<String, Object> model = new HashMap<>();
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
+ addPolicyCrudInfoToTable();
+ model.put("papStatusCRUDData", mapper.writeValueAsString(policyStatusCrudData));
+ JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+ JSONObject j = new JSONObject(msg);
+ response.getWriter().write(j.toString());
+ } catch (Exception e) {
+ policyLogger.error(exceptionOccured, e);
+ }
+ }
+
+ /**
+ * This method retrieves data based on input criteria.
+ *
+ * @param request object
+ * @param response object contains retrieved data
+ */
+ @RequestMapping(value = {"/dashboardController/dashboardAdvancedSearch.htm"},
+ method = {org.springframework.web.bind.annotation.RequestMethod.POST})
+ public void dashboardAdvancedSearch(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ String lscope = null;
+ String lstage = "both";
+ String isDelected = "both";
+ String ttlDateAfter = null;
+ String ttlDateBefore = null;
+ try {
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
+ JsonNode root = mapper.readTree(request.getReader());
+ JsonNode inputData = root.get("policyData");
+ JsonNode jscope = inputData.path(scope);
+ if (jscope != null) {
+ lscope = jscope.textValue();
+ }
+ JsonNode jstage = inputData.path(stage);
+ if (jstage != null) {
+ lstage = jstage.textValue();
+ }
+ JsonNode jisDelected = inputData.path("isDelected");
+ if (jisDelected != null) {
+ isDelected = jisDelected.textValue();
+ }
+ JsonNode jttlDateAfter = inputData.path("ttlDate_after");
+ if (jttlDateAfter != null) {
+ ttlDateAfter = jttlDateAfter.textValue();
+ }
+ JsonNode jttlDateBefore = inputData.path("ttlDate_before");
+ if (jttlDateBefore != null) {
+ ttlDateBefore = jttlDateBefore.textValue();
+ }
+ getPolicyData(lscope, lstage, isDelected, ttlDateAfter, ttlDateBefore);
+ Map<String, Object> model = new HashMap<>();
+ model.put("policyStatusCRUDData", mapper.writeValueAsString(policyStatusCrudData));
+ JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+ JSONObject j = new JSONObject(msg);
+ response.getWriter().write(j.toString());
+ } catch (Exception e) {
+ response.setCharacterEncoding("UTF-8");
+ PrintWriter out = response.getWriter();
+ out.write(PolicyUtils.CATCH_EXCEPTION);
+ }
+
+ }
+
+ /**
+ * This method is to retrieve data from PolicyEntity table.
+ *
+ * @param request object
+ * @param response object contains retrieved data
+ */
+ @RequestMapping(value = {"/get_DashboardPdpPolicyCRUDData"},
+ method = {org.springframework.web.bind.annotation.RequestMethod.GET},
+ produces = MediaType.APPLICATION_JSON_VALUE)
+ public void get_DashboardPdpPolicyCrudData(HttpServletRequest request, HttpServletResponse response) {
+ try {
+ Map<String, Object> model = new HashMap<>();
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
+ model.put("pdpStatusCRUDData", mapper.writeValueAsString(pdpStatusCrudData));
+ JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+ JSONObject j = new JSONObject(msg);
+ response.getWriter().write(j.toString());
+ } catch (Exception e) {
+ policyLogger.error(exceptionOccured, e);
+ }
+ }
+
+ @RequestMapping(value = {"/get_DashboardLoggingData"},
+ method = {org.springframework.web.bind.annotation.RequestMethod.GET},
+ produces = MediaType.APPLICATION_JSON_VALUE)
+ public void getData(HttpServletRequest request, HttpServletResponse response) {
+ try {
+ Map<String, Object> model = new HashMap<>();
+ ObjectMapper mapper = new ObjectMapper();
+ model.put("availableLoggingDatas", mapper.writeValueAsString(systemDAO.getLoggingData()));
+ JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+ JSONObject j = new JSONObject(msg);
+ response.getWriter().write(j.toString());
+ } catch (Exception e) {
+ policyLogger.error(exceptionOccured + e);
+ }
+ }
+
+ @RequestMapping(value = {"/get_DashboardSystemAlertData"},
+ method = {org.springframework.web.bind.annotation.RequestMethod.GET},
+ produces = MediaType.APPLICATION_JSON_VALUE)
+ public void getSystemAlertData(HttpServletRequest request, HttpServletResponse response) {
+ try {
+ Map<String, Object> model = new HashMap<>();
+ ObjectMapper mapper = new ObjectMapper();
+ model.put("systemAlertsTableDatas", mapper.writeValueAsString(systemDAO.getSystemAlertData()));
+ JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+ JSONObject j = new JSONObject(msg);
+ response.getWriter().write(j.toString());
+ } catch (Exception e) {
+ policyLogger.error(exceptionOccured + e);
+ }
+ }
+
+ @RequestMapping(value = {"/get_DashboardPAPStatusData"},
+ method = {org.springframework.web.bind.annotation.RequestMethod.GET},
+ produces = MediaType.APPLICATION_JSON_VALUE)
+ public void getPAPStatusData(HttpServletRequest request, HttpServletResponse response) {
+ try {
+ Map<String, Object> model = new HashMap<>();
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
+ addPAPToTable();
+ model.put("papTableDatas", mapper.writeValueAsString(papStatusData));
+ JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+ JSONObject j = new JSONObject(msg);
+ response.getWriter().write(j.toString());
+ } catch (Exception e) {
+ policyLogger.error(exceptionOccured + e);
+ }
+ }
+
+ @RequestMapping(value = {"/get_DashboardPDPStatusData"},
+ method = {org.springframework.web.bind.annotation.RequestMethod.GET},
+ produces = MediaType.APPLICATION_JSON_VALUE)
+ public void getPDPStatusData(HttpServletRequest request, HttpServletResponse response) {
+ try {
+ Map<String, Object> model = new HashMap<>();
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
+ PolicyController controller = getPolicyControllerInstance();
+ this.pdpConatiner = new PDPGroupContainer(controller.getPapEngine());
+ addPDPToTable();
+ model.put("pdpTableDatas", mapper.writeValueAsString(pdpStatusData));
+ JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+ JSONObject j = new JSONObject(msg);
+ response.getWriter().write(j.toString());
+ } catch (Exception e) {
+ policyLogger.error(exceptionOccured + e);
+ }
+ }
+
+ @RequestMapping(value = {"/get_DashboardPolicyActivityData"},
+ method = {org.springframework.web.bind.annotation.RequestMethod.GET},
+ produces = MediaType.APPLICATION_JSON_VALUE)
+ public void getPolicyActivityData(HttpServletRequest request, HttpServletResponse response) {
+ try {
+ Map<String, Object> model = new HashMap<>();
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
+ PolicyController controller = getPolicyControllerInstance();
+ this.pdpConatiner = new PDPGroupContainer(controller.getPapEngine());
+ addPolicyToTable();
+ model.put("policyActivityTableDatas", mapper.writeValueAsString(policyActivityData));
+ JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+ JSONObject j = new JSONObject(msg);
+ response.getWriter().write(j.toString());
+ } catch (Exception e) {
+ policyLogger.error(exceptionOccured + e);
+ }
+ }
+
+ /*
+ * Add the PAP information to the PAP Table
+ */
+ public void addPAPToTable() {
+ papStatusData = new ArrayList<>();
+ String papStatus = null;
+ try {
+ PolicyController controller = getPolicyControllerInstance();
+ Set<OnapPDPGroup> groups = controller.getPapEngine().getOnapPDPGroups();
+ if (groups == null) {
+ throw new PAPException("PAP not running");
+ } else {
+ papStatus = "IS_OK";
+ }
+ } catch (PAPException | NullPointerException e1) {
+ papStatus = "CANNOT_CONNECT";
+ policyLogger.error("Error getting PAP status, PAP not responding to requests", e1);
+ }
+ String papURL = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL);
+ JSONObject object = new JSONObject();
+ object.put("system", papURL);
+ object.put("status", papStatus);
+ List<Object> data = commonClassDao.getDataByQuery("from PolicyEntity", new SimpleBindings());
+ object.put("noOfPolicy", data.size());
+ object.put("noOfConnectedTrap", pdpCount);
+ papStatusData.add(0, object);
+ }
+
+
+ /*
+ * Add the PAP Policy information to the PAP Table
+ */
+ public void addPolicyCrudInfoToTable() {
+ policyStatusCrudData = new ArrayList<>();
+ LocalDate now = LocalDate.now();
+ LocalDate lastThirtyDate = now.minusDays(30);
+ policyLogger.info("now: " + now);
+ policyLogger.info("thirty: " + lastThirtyDate);
+ String entityquery = "from PolicyEntity where created_date >= :createdDate";
+ SimpleBindings geParams = new SimpleBindings();
+ geParams.put(createDate, lastThirtyDate.toString());
+ List<Object> datas = commonClassDao.getDataByQuery(entityquery, geParams);
+
+ if (datas == null) {
+ return;
+ }
+
+ datas.stream().forEach((data) -> {
+ JSONObject object = new JSONObject();
+ object.put("id", ((PolicyEntity) data).getPolicyId());
+ object.put(scope, ((PolicyEntity) data).getScope());
+ object.put("policyName", ((PolicyEntity) data).getPolicyName());
+ object.put("version", ((PolicyEntity) data).getVersion());
+ if (isPushedToPDP(((PolicyEntity) data).getPolicyId())) {
+ object.put(stage, "PDP");
+ } else {
+ object.put(stage, "PAP");
+ }
+ object.put("createdBy", ((PolicyEntity) data).getCreatedBy());
+ object.put("deleted", ((PolicyEntity) data).isDeleted());
+ object.put("deleteReasonCode", ((PolicyEntity) data).getDeleteReasonCode());
+ object.put("deletedBy", ((PolicyEntity) data).getDeletedBy());
+ object.put("modifiedBy", ((PolicyEntity) data).getModifiedBy());
+ if (((PolicyEntity) data).getModifiedDate() != null) {
+ Timestamp ts = new Timestamp(((PolicyEntity) data).getModifiedDate().getTime());
+ Timestamp cts = new Timestamp(((PolicyEntity) data).getCreatedDate().getTime());
+ object.put(modifiedDate, ts.toString());
+ object.put(createDate, cts.toString());
+ } else {
+ object.put(modifiedDate, defaultTime);
+ object.put(createDate, defaultTime);
+ }
+ policyStatusCrudData.add(object);
+ });
+ }
+
+ /*
+ * Add the PDP Policy information to the PDP Table
+ */
+ private boolean isPushedToPDP(long policyId) {
+ try {
+ String groupEntityquery = "from PolicyGroupEntity where policyid = :policyEntityId";
+ SimpleBindings geParams = new SimpleBindings();
+ geParams.put("policyEntityId", policyId);
+ List<Object> groupobject = commonClassDao.getDataByQuery(groupEntityquery, geParams);
+ if (groupobject != null && groupobject.size() > 0) {
+ return true;
+ }
+ } catch (Exception e) {
+ policyLogger.error(exceptionOccured + e);
+ }
+
+ return false;
+ }
+
+ /*
+ * Add the Policy information to the policyStatusCRUDDataTable
+ */
+ private void getPolicyData(String inputScope, String inputStage, String isDeleted, String createdAfter, String createdBefore) {
+ policyStatusCrudData = new ArrayList<>();
+ List<Object> policyData = null;
+ SimpleBindings geParams = new SimpleBindings();
+ try {
+ StringBuilder entityquery = buildSqlQuery(inputScope, isDeleted, createdAfter, createdBefore);
+ if (entityquery == null) {
+ return;
+ }
+ policyLogger.info("entityquery: " + entityquery.toString());
+ policyLogger.info("geParams: " + geParams.toString());
+
+ policyData = commonClassDao.getDataByQuery(entityquery.toString(), geParams);
+ if (policyData == null) {
+ return;
+ }
+ policyData.stream().forEach((data) -> {
+ JSONObject object = populatePolicyData((PolicyEntity) data);
+
+ if (object.get(stage).equals("PDP") && "PDP".equalsIgnoreCase(inputStage)) {
+ policyStatusCrudData.add(object);
+ }
+ if (object.get(stage).equals("PAP") && "PAP".equalsIgnoreCase(inputStage)) {
+ policyStatusCrudData.add(object);
+ }
+ if ("both".equalsIgnoreCase(inputStage)) {
+ policyStatusCrudData.add(object);
+ }
+ });
+ } catch (Exception e) {
+ policyLogger.error(exceptionOccured, e);
+ }
+ }
+
+ /*
+ * Build SQL query
+ */
+ private StringBuilder buildSqlQuery(String scope, String isDeleted, String createdAfter, String createdBefore) {
+ SimpleBindings geParams = new SimpleBindings();
+
+ // since scope is required
+ if (scope == null || scope.isEmpty()) {
+ return null;
+ } else {
+ geParams.put(scope, "%" + scope + "%");
+ }
+ StringBuilder entityquery = new StringBuilder("from PolicyEntity where scope like :scope ");
+ if (!"both".equalsIgnoreCase(isDeleted)) {
+ entityquery.append(" and deleted = :isDeleted");
+ if ("Yes".equalsIgnoreCase(isDeleted)) {
+ geParams.put("isDeleted", true);
+ } else {
+ geParams.put("isDeleted", false);
+ }
+ }
+ if (createdAfter != null && !createdAfter.isEmpty()) {
+ entityquery.append(" and created_date >= :createdAfter");
+ geParams.put("createdAfter", createdAfter);
+ }
+ if (createdBefore != null && !createdBefore.isEmpty()) {
+ entityquery.append(" and created_date <= :createdBefore");
+ geParams.put("createdBefore", createdBefore);
+ }
+ return entityquery;
+ }
+
+ private JSONObject populatePolicyData(PolicyEntity data) {
+ JSONObject object = new JSONObject();
+ object.put("id", data.getPolicyId());
+ object.put(scope, data.getScope());
+ object.put("policyName", data.getPolicyName());
+ object.put("version", data.getVersion());
+ if (isPushedToPDP(data.getPolicyId())) {
+ object.put(stage, "PDP");
+ } else {
+ object.put(stage, "PAP");
+ }
+ object.put("createdBy", data.getCreatedBy());
+ object.put("deleted", data.isDeleted());
+ object.put("deleteReasonCode", data.getDeleteReasonCode());
+ object.put("deletedBy", data.getDeletedBy());
+ object.put("modifiedBy", data.getModifiedBy());
+ if (data.getModifiedDate() != null) {
+ Timestamp ts = new Timestamp(data.getModifiedDate().getTime());
+ Timestamp cts = new Timestamp(data.getCreatedDate().getTime());
+ object.put(modifiedDate, ts.toString());
+ object.put(createDate, cts.toString());
+ } else {
+ object.put(modifiedDate, defaultTime);
+ object.put(createDate, defaultTime);
+ }
+
+ return object;
+ }
+
+ /**
+ * Add PDP Information to the PDP Table
+ *
+ */
+ public void addPDPToTable() {
+ pdpCount = 0;
+ pdpStatusData = new ArrayList<>();
+ long naCount;
+ long denyCount = 0;
+ long permitCount = 0;
+ for (PDPGroup group : this.pdpConatiner.getGroups()) {
+ for (PDP pdp : group.getPdps()) {
+ naCount = -1;
+ if ("UP_TO_DATE".equals(pdp.getStatus().getStatus().toString()) && ((OnapPDP) pdp).getJmxPort() != 0) {
+ String pdpIpAddress = parseIPSystem(pdp.getId());
+ int port = ((OnapPDP) pdp).getJmxPort();
+ if (port != 0) {
+ policyLogger.debug("Getting JMX Response Counts from " + pdpIpAddress + " at JMX port " + port);
+ naCount = getRequestCounts(pdpIpAddress, port, "pdpEvaluationNA");
+ permitCount = getRequestCounts(pdpIpAddress, port, "PdpEvaluationPermit");
+ denyCount = getRequestCounts(pdpIpAddress, port, "PdpEvaluationDeny");
+ }
+ }
+ if (naCount == -1) {
+ JSONObject object = new JSONObject();
+ object.put("id", pdp.getId());
+ object.put("name", pdp.getName());
+ object.put("groupname", group.getName());
+ object.put("status", pdp.getStatus().getStatus().toString());
+ object.put("description", pdp.getDescription());
+ object.put("permitCount", "NA");
+ object.put("denyCount", "NA");
+ object.put("naCount", "NA");
+ pdpStatusData.add(object);
+ } else {
+ JSONObject object = new JSONObject();
+ object.put("id", pdp.getId());
+ object.put("name", pdp.getName());
+ object.put("groupname", group.getName());
+ object.put("status", pdp.getStatus().getStatus().toString());
+ object.put("description", pdp.getDescription());
+ object.put("permitCount", permitCount);
+ object.put("denyCount", denyCount);
+ object.put("naCount", naCount);
+ pdpStatusData.add(object);
+ }
+ pdpCount++;
+ }
+ }
+ }
+
+ private static String parseIPSystem(String line) {
+ Pattern pattern = Pattern.compile("://(.+?):");
+ Matcher ip = pattern.matcher(line);
+ if (ip.find()) {
+ return ip.group(1);
+ }
+ return null;
+ }
+
+ /*
+ * Contact JMX Connector Sever and return the value of the given jmxAttribute
+ */
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ private long getRequestCounts(String host, int port, String jmxAttribute) {
+
+ policyLogger.debug("Create an RMI connector client and connect it to the JMX connector server");
+ HashMap map = null;
+ try (JMXConnector jmxConnection = JMXConnectorFactory.newJMXConnector(createConnectionURL(host, port), map)) {
+ jmxConnection.connect();
+ Object o =
+ jmxConnection.getMBeanServerConnection().getAttribute(
+ new ObjectName("PdpRest:type=PdpRestMonitor"), jmxAttribute);
+ policyLogger.debug("pdpEvaluationNA value retreived: " + o);
+ return (long) o;
+ } catch (MalformedURLException e) {
+ policyLogger.error("MalformedURLException for JMX connection", e);
+ } catch (IOException e) {
+ policyLogger.error("Error in reteriving" + jmxAttribute + " from JMX connection", e);
+ } catch (AttributeNotFoundException e) {
+ policyLogger.error("AttributeNotFoundException " + jmxAttribute + " for JMX connection", e);
+ } catch (InstanceNotFoundException e) {
+ policyLogger.error("InstanceNotFoundException " + host + " for JMX connection", e);
+ } catch (MalformedObjectNameException e) {
+ policyLogger.error("MalformedObjectNameException for JMX connection", e);
+ } catch (MBeanException e) {
+ policyLogger.error("MBeanException for JMX connection");
+ policyLogger.error(exceptionOccured + e);
+ } catch (ReflectionException e) {
+ policyLogger.error("ReflectionException for JMX connection", e);
+ }
+
+ return -1;
+ }
+
+ private static JMXServiceURL createConnectionURL(String host, int port) throws MalformedURLException {
+ return new JMXServiceURL("rmi", "", 0, "/jndi/rmi://" + host + ":" + port + "/jmxrmi");
+ }
+
+
+ /*
+ * Add the information to the Policy Table
+ */
+ private void addPolicyToTable() {
+ policyActivityData = new ArrayList<>();
+ String policyID;
+ int policyFireCount;
+ Map<String, String> policyMap = new HashMap<>();
+ Object policyList;
+ // get list of policy
+
+ for (PDPGroup group : this.pdpConatiner.getGroups()) {
+ for (PDPPolicy policy : group.getPolicies()) {
+ try {
+ policyMap.put(policy.getPolicyId().replace(" ", ""), policy.getId());
+ } catch (Exception e) {
+ policyLogger.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID + policy.getName() + e);
+ }
+ }
+
+ for (PDP pdp : group.getPdps()) {
+ // Add rows to the Policy Table
+ policyList = null;
+ if ("UP_TO_DATE".equals(pdp.getStatus().getStatus().toString()) && ((OnapPDP) pdp).getJmxPort() != 0) {
+ String pdpIpAddress = parseIPSystem(pdp.getId());
+ policyList = getPolicy(pdpIpAddress, ((OnapPDP) pdp).getJmxPort(), "policyCount");
+ }
+ if (policyList != null && policyList.toString().length() > 3) {
+ String[] splitPolicy = policyList.toString().split(",");
+ for (String policyKeyValue : splitPolicy) {
+ policyID = urnPolicyID(policyKeyValue);
+ policyFireCount = countPolicyID(policyKeyValue);
+ if (policyID != null && policyMap.containsKey(policyID)) {
+ JSONObject object = new JSONObject();
+ object.put("policyId", policyMap.get(policyID));
+ object.put("fireCount", policyFireCount);
+ object.put("system", pdp.getId());
+ policyActivityData.add(object);
+ }
+ }
+ } else {
+ if (policyList != null) {
+ JSONObject object = new JSONObject();
+ object.put("policyId", "Unable to retrieve policy information");
+ object.put("fireCount", "NA");
+ object.put("system", pdp.getId());
+ policyActivityData.add(object);
+ } else {
+ JSONObject object = new JSONObject();
+ object.put("policyId", "Unable to access PDP JMX Server");
+ object.put("fireCount", "NA");
+ object.put("system", pdp.getId());
+ policyActivityData.add(object);
+ }
+ }
+ }
+ }
+ }
+
+ /*
+ * Contact JMX Connector Sever and return the list of {policy id , count}
+ */
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ private Object getPolicy(String host, int port, String jmxAttribute) {
+ policyLogger.debug("Create an RMI connector client and connect it to the JMX connector server for Policy: "
+ + host);
+ HashMap map = null;
+ try (JMXConnector jmxConnection = JMXConnectorFactory.newJMXConnector(createConnectionURL(host, port), map)) {
+ jmxConnection.connect();
+ Object o =
+ jmxConnection.getMBeanServerConnection().getAttribute(
+ new ObjectName("PdpRest:type=PdpRestMonitor"), "policyMap");
+ policyLogger.debug("policyMap value retreived: " + o);
+ return o;
+ } catch (MalformedURLException e) {
+ policyLogger.error("MalformedURLException for JMX connection", e);
+ } catch (IOException e) {
+ policyLogger.error("AttributeNotFoundException for policyMap", e);
+ } catch (AttributeNotFoundException e) {
+ policyLogger.error("AttributeNotFoundException for JMX connection", e);
+ } catch (InstanceNotFoundException e) {
+ policyLogger.error("InstanceNotFoundException " + host + " for JMX connection", e);
+ } catch (MalformedObjectNameException e) {
+ policyLogger.error("MalformedObjectNameException for JMX connection", e);
+ } catch (MBeanException e) {
+ policyLogger.error("MBeanException for JMX connection", e);
+ policyLogger.error(exceptionOccured + e);
+ } catch (ReflectionException e) {
+ policyLogger.error("ReflectionException for JMX connection", e);
+ }
+
+ return null;
+
+ }
+
+ private static String urnPolicyID(String line) {
+ String[] splitLine = line.split("=");
+ String removeSpaces = splitLine[0].replaceAll("\\s+", "");
+ return removeSpaces.replace("{", "");
+ }
+
+ private static Integer countPolicyID(String line) {
+ String[] splitLine = line.split("=");
+ String sCount = splitLine[1].replace("}", "");
+ return Integer.parseInt(sCount);
+ }
}
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dashboardCRUDController.js b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dashboardCRUDController.js
new file mode 100644
index 000000000..ce1af6b1a
--- /dev/null
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dashboardCRUDController.js
@@ -0,0 +1,156 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Engine
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. 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.
+ * ============LICENSE_END=========================================================
+ */
+
+app.controller('policyDashboardCRUDDataController', function ($scope, PolicyAppService, modalService, $modal){
+ console.log("policyDashboardCRUDDataController called");
+
+ $('#dashBoardAdvanceSearch').hide();
+
+ $scope.papCRUDTableDatasTemp = [];
+
+ $scope.dashboardAdsearch = { isDelected: 'both', stage: 'both', scope: "", ttlDate_after: "", ttlDate_before: ""};
+
+ PolicyAppService.getData('get_DashboardPolicyCRUDData').then(function(data){
+
+ var j = data;
+ $scope.data = JSON.parse(j.data);
+ console.log($scope.data);
+ $scope.papStatusCRUDDatas =JSON.parse($scope.data.papStatusCRUDData);
+ if($scope.papStatusCRUDDatas != null){
+ for(i = 0; i < $scope.papStatusCRUDDatas.length; i++){
+ $scope.papCRUDTableDatasTemp.push($scope.papStatusCRUDDatas[i].map);
+ }
+
+ $scope.papCRUDTableDatas = $scope.papCRUDTableDatasTemp;
+ }
+
+ },function(error){
+ console.log("failed");
+ });
+
+ $scope.papCRUDStatusDatas = {
+ data : 'papCRUDTableDatas',
+ enableFiltering: true,
+ columnDefs: [{ field: 'id', displayName :'id'},
+ {field: 'scope', displayName :'Scope'},
+ {field: 'policyName', displayName :'Policy Name'},
+ {field: 'version', displayName :'Version'},
+ {field: 'stage', displayName :'Stage'},
+ {field: 'createdBy', displayName :'Created By'},
+ {field: 'deleted', displayName :'Deleted'},
+ {field: 'deleteReasonCode', displayName :'Deleted Reason'},
+ {field: 'deletedBy' , displayName :'Deleted By'},
+ {field: 'modifiedBy' , displayName :'Modified By'},
+ {field: 'createdDate', displayName :'Created Date'},
+ {field: 'modifiedDate', displayName :'Modified Date'}
+ ],
+ onRegisterApi: function(gridApi){
+ $scope.gridApi = gridApi;
+ }
+ };
+
+ $('#ttlDate_after').datepicker({
+ dateFormat: 'yy-mm-dd',
+ changeMonth: true,
+ changeYear: true,
+ onSelect: function(date) {
+ angular.element($('#ttlDate_after')).triggerHandler('input');
+ }
+ });
+
+ $('#ttlDate_before').datepicker({
+ dateFormat: 'yy-mm-dd',
+ changeMonth: true,
+ changeYear: true,
+ onSelect: function(date) {
+ angular.element($('#ttlDate_before')).triggerHandler('input');
+ }
+ });
+
+ $scope.refresh = function(){
+ $scope.modal('advancedSearch', true);
+ $scope.temp.policy = "";
+ };
+
+
+ $scope.advancedSearch = function(){
+
+ $('#dashBoardAdvanceSearch').toggle();
+ if($('#advancedSearchArrow').hasClass('arrowdown')){
+ $('#advancedSearchArrow').removeClass("arrowdown");
+ $('#advancedSearchArrow').addClass("arrowup");
+
+ }else{
+ $('#advancedSearchArrow').removeClass("arrowup");
+ $('#advancedSearchArrow').addClass("arrowdown");
+ }
+ }
+
+
+ $scope.startAdvancedSearch = function(data){
+
+ console.log("startAdvancedSearch called");
+ console.log(data.isDelected);
+ console.log(data.stage);
+ console.log(data.scope);
+ console.log(data.ttlDate_after);
+ console.log(data.ttlDate_before);
+
+ if(data.scope == null){
+ return;
+ }
+
+ var uuu = "dashboardController/dashboardAdvancedSearch.htm";
+
+ var postData={policyData: data};
+ $.ajax({
+ type : 'POST',
+ url : uuu,
+ dataType: 'json',
+ contentType: 'application/json',
+ data: JSON.stringify(postData),
+ success : function(data){
+ console.log("dashboardAdvancedSearch data returned: " + data);
+
+ $scope.$apply(function(){
+
+ var j = data;
+ $scope.data = JSON.parse(j.data);
+ console.log($scope.data);
+ $scope.papStatusCRUDDatas =JSON.parse($scope.data.policyStatusCRUDData);
+
+ $scope.papCRUDTableDatasTemp = [];
+
+ for(i = 0; i < $scope.papStatusCRUDDatas.length; i++){
+ $scope.papCRUDTableDatasTemp.push($scope.papStatusCRUDDatas[i].map);
+ }
+
+ $scope.papCRUDTableDatas = $scope.papCRUDTableDatasTemp;
+
+ $scope.gridApi.grid.refresh();
+ });
+ },
+ error : function(data){
+ console.log("dashboardAdvancedSearch Failed: data returned as " + data);
+ }
+ });
+ };
+
+}); \ No newline at end of file
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/policyController.js b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/policyController.js
index a340c6764..702a54366 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/policyController.js
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/policyController.js
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP Policy Engine
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. 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.
@@ -53,6 +53,10 @@ app.config(function($routeProvider) {
templateUrl: 'app/policyApp/policy-models/policy_DashboardHealth.html',
controller : "policyDashboardHealthController"
})
+ .when('/Dashboard_crud', {
+ templateUrl: 'app/policyApp/policy-models/policy_DashboardCRUD.html',
+ controller : "policyDashboardCRUDDataController"
+ })
.when('/policy_SearchFilter', {
templateUrl: 'app/policyApp/policy-models/policy_SearchFilter.html',
controller : "PolicySearchController"
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/main/policyEditor.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/main/policyEditor.html
index 9be8d015a..430907a65 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/main/policyEditor.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/main/policyEditor.html
@@ -100,6 +100,7 @@
<script src= "app/policyApp/controller/policyAdminTabController.js"></script>
<script src= "app/policyApp/controller/dashboard_Logging_Controller.js"></script>
<script src= "app/policyApp/controller/dashboardController.js"></script>
+ <script src= "app/policyApp/controller/dashboardCRUDController.js"></script>
<script src= "app/policyApp/controller/pdpController.js"></script>
<script src= "app/policyApp/controller/pdpGroupPopUpController.js"></script>
<script src= "app/policyApp/controller/DictionaryController.js"></script>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/css/main.css b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/css/main.css
index 850adb338..d7c98b98c 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/css/main.css
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/css/main.css
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP Policy Engine
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. 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.
@@ -469,4 +469,85 @@ table th > a:focus {
.mstooltip:hover .tooltiptext {
visibility: visible;
+}
+
+
+.msloader {
+ border: 6px solid #a94442;
+ border-top: 6px solid #3498db; /* Blue */
+ border-radius: 50%;
+ width: 60px;
+ height: 60px;
+ animation: spin 2s linear infinite;
+}
+
+
+@-webkit-keyframes spin {
+ 0% { -webkit-transform: rotate(0deg); }
+ 100% { -webkit-transform: rotate(360deg); }
+}
+
+@keyframes spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
+
+#msPolicyloader {
+ display:block;
+ background-color:#c0c0c0;
+ width:20px;
+ height: 20px;
+ margin-left: 5px;
+}
+
+#msVersion {
+ width: 195px;
+ height: 20px;
+ border: 0px;
+ display: -webkit-flex; /* Safari */
+ -webkit-flex-flow: row-reverse wrap; /* Safari 6.1+ */
+ display: flex;
+ flex-flow: row-reverse wrap;
+}
+
+#advancedSearch i {
+ border: solid black;
+ border-width: 0 1px 1px 0;
+ display: inline-block;
+ padding: 3px;
+ margin-left:20px;
+}
+.arrowright {
+ transform: rotate(-45deg);
+ -webkit-transform: rotate(-45deg);
+}
+
+.arrowleft {
+ transform: rotate(135deg);
+ -webkit-transform: rotate(135deg);
+}
+
+.arrowup {
+ transform: rotate(-135deg);
+ -webkit-transform: rotate(-135deg);
+}
+
+.arrowdown {
+ transform: rotate(45deg);
+ -webkit-transform: rotate(45deg);
+}
+
+#dashBoardAdvanceSearch .well {
+ padding-bottom: 5px;
+}
+
+#dashBoardAdvanceSearch button {
+ float: left;
+ padding-bottom: 10px;
+ background: #f5f5f5;
+ color: black;
+ font-size: 22px;
+ border: 0px solid grey;
+ border-left: none;
+ cursor: pointer;
} \ No newline at end of file
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardCRUD.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardCRUD.html
new file mode 100644
index 000000000..cb02a1ca8
--- /dev/null
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardCRUD.html
@@ -0,0 +1,99 @@
+<!--/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Engine
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. 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.
+ * ============LICENSE_END=========================================================
+ */-->
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"/>
+<div id="page-content" style="margin-bottom: 20px; width: 100%" ng-app ng-controller = "policyDashboardCRUDDataController">
+ <div>
+ <h1 style="text-align: left;font-size: 25px;color: #066090;padding-top: 15px;">Policy Status Info</h1>
+ <div ng-show="showLoader" class="span loader-container">
+ <i class="icon-spinner" role="img"
+ aria-label="Please wait while we load your content"></i>
+ </div>
+ </div>
+ <div ng-hide="showLoader">
+ <div class="btn-group" role="group">
+ <button class="btn btn-secondary" type="button"
+ onClick="window.location='policy#/Dashboard';">Logging</button>
+ <button class="btn btn-secondary" type="button"
+ onClick="window.location='policy#/Dashboard_Health';">Health</button>
+ <button class="btn btn-primary" type="button"
+ onClick="window.location='policy#/Dashboard_crud';">CRUD Info</button>
+ </div>
+ </div>
+ <br>
+ <a id='advancedSearch' href="" ng-click="advancedSearch()" title="" class="ng-binding">Advanced Search<i id='advancedSearchArrow' class="arrowdown"></i></a>
+ <br>
+ <br>
+ <div id="dashBoardAdvanceSearch">
+ <form>
+ <div class="well">
+
+ <div class="row">
+ <div class="form-group col-sm-2">
+ <input type="text"
+ class="form-control"
+ ng-model="dashboardAdsearch.scope" required pattern="\S+"
+ title="Enter scope name without any spaces" placeholder="Scope like *" />
+ </div>
+ <div class="form-group col-sm-2">
+ <select
+ class="form-control"
+ ng-model="dashboardAdsearch.stage"
+ required pattern="\S+" title="Select the dropdown PAP or PDP.">
+ <option value="both" selected>Select Stage...</option>
+ <option>PAP</option>
+ <option>PDP</option>
+ </select>
+ </div>
+ <div class="form-group col-sm-2">
+ <select
+ class="form-control"
+ ng-model="dashboardAdsearch.isDelected"
+ required pattern="\S+" title="Select the dropdown Yes or No">
+ <option value="both" selected>Is Deleted ?</option>
+ <option>Yes</option>
+ <option>No</option>
+ </select>
+ </div>
+ <div class="form-group col-sm-2">
+ <input type="text" id="ttlDate_after"
+ class="form-control" name="ttlDate_after"
+ ng-model="dashboardAdsearch.ttlDate_after" title="Select the date from calender onclick on the field." placeholder="Creation Date After..." />
+ </div>
+ <div class="form-group col-sm-2">
+ <input type="text" id="ttlDate_before"
+ class="form-control" name="ttlDate_before"
+ ng-model="dashboardAdsearch.ttlDate_before" title="Select the date from calender onclick on the field." placeholder="Creation Date Before..."/>
+ </div>
+ <div class="form-group col-sm-2">
+ <button class="" herf="javascript:void(0)" ng-click="startAdvancedSearch(dashboardAdsearch);" title="Search the data entered in the Policy fields."><i class="fa fa-search"></i></button>
+ </div>
+
+ </div>
+ </div>
+
+ </form>
+ </div>
+ <p id=recordsMessage>Policies were retrieved for last 30 days...</p>
+ <h4 style="text-align: left; color: #157bb2"></h4>
+ <div ui-grid="papCRUDStatusDatas" ui-grid-pagination ui-grid-selection
+ ui-grid-resize-columns ui-grid-exporter class="grid" ></div>
+</div>
+
+ \ No newline at end of file
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardHealth.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardHealth.html
index 5fbdf528d..046643ea5 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardHealth.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardHealth.html
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP Policy Engine
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. 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.
@@ -19,7 +19,7 @@
*/-->
<div id="page-content" style="margin-bottom: 20px; width: 100%">
<div>
- <h1 style="text-align: left; color: #157bb2">Policy Engine Health</h1>
+ <h1 style="text-align: left;font-size: 25px;color: #066090;padding-top: 15px;">Policy Engine Health</h1>
<div ng-show="showLoader" class="span loader-container">
<i class="icon-spinner" role="img"
aria-label="Please wait while we load your content"></i>
@@ -31,6 +31,8 @@
onClick="window.location='policy#/Dashboard';">Logging</button>
<button class="btn btn-primary" type="button"
onClick="window.location='policy#/Dashboard_Health';">Health</button>
+ <button class="btn btn-secondary" type="button"
+ onClick="window.location='policy#/Dashboard_crud';">CRUD Info</button>
</div>
</div>
<br>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardLogging.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardLogging.html
index a42427fb5..8ec80dcba 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardLogging.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardLogging.html
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP Policy Engine
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. 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.
@@ -19,7 +19,7 @@
*/-->
<div id="page-content" style="margin-bottom: 20px; width: 100%">
<div>
- <h1 style="text-align: left; color: #157bb2">Dashboard Logging</h1>
+ <h1 style="text-align: left;font-size: 25px;color: #066090;padding-top: 15px;">Dashboard Logging</h1>
<div ng-show="showLoader" class="span loader-container">
<i class="icon-spinner" role="img"
aria-label="Please wait while we load your content"></i>
@@ -31,6 +31,8 @@
onClick="window.location='policy#/Dashboard';">Logging</button>
<button class="btn btn-secondary" type="button"
onClick="window.location='policy#/Dashboard_Health';">Health</button>
+ <button class="btn btn-secondary" type="button"
+ onClick="window.location='policy#/Dashboard_crud';">CRUD Info</button>
</div>
</div>
<br>