aboutsummaryrefslogtreecommitdiffstats
path: root/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DroolsPdpIntegrityMonitor.java
diff options
context:
space:
mode:
Diffstat (limited to 'feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DroolsPdpIntegrityMonitor.java')
-rw-r--r--feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DroolsPdpIntegrityMonitor.java413
1 files changed, 0 insertions, 413 deletions
diff --git a/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DroolsPdpIntegrityMonitor.java b/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DroolsPdpIntegrityMonitor.java
deleted file mode 100644
index da94302f..00000000
--- a/feature-state-management/src/main/java/org/onap/policy/drools/statemanagement/DroolsPdpIntegrityMonitor.java
+++ /dev/null
@@ -1,413 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2017-2021 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=========================================================
- */
-
-package org.onap.policy.drools.statemanagement;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Properties;
-import lombok.Getter;
-import lombok.Setter;
-import org.onap.policy.common.capabilities.Startable;
-import org.onap.policy.common.endpoints.http.server.HttpServletServer;
-import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
-import org.onap.policy.common.im.IntegrityMonitor;
-import org.onap.policy.common.im.IntegrityMonitorException;
-import org.onap.policy.drools.utils.PropertyUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This class extends 'IntegrityMonitor' for use in the 'Drools PDP' virtual machine. The included
- * audits are 'Database' and 'Repository'.
- */
-public class DroolsPdpIntegrityMonitor extends IntegrityMonitor {
-
- private static final String INVALID_PROPERTY_VALUE = "init: property {} does not have the expected value of {}";
-
- // get an instance of logger
- private static final Logger logger = LoggerFactory.getLogger(DroolsPdpIntegrityMonitor.class);
-
- // static global instance
- private static DroolsPdpIntegrityMonitor im = null;
-
- // list of audits to run
- private static final AuditBase[] audits = new AuditBase[] {DbAudit.getInstance(), RepositoryAudit.getInstance()};
-
- private static Properties subsystemTestProperties = null;
-
- private static final String PROPERTIES_NAME = "feature-state-management.properties";
-
- /**
- * Constructor - pass arguments to superclass, but remember properties.
- *
- * @param resourceName unique name of this Integrity Monitor
- * @param consolidatedProperties properties used locally, as well as by 'IntegrityMonitor'
- * @throws IntegrityMonitorException (passed from superclass)
- */
- private DroolsPdpIntegrityMonitor(String resourceName, Properties consolidatedProperties)
- throws IntegrityMonitorException {
- super(resourceName, consolidatedProperties);
- }
-
- private static void missingProperty(String prop) throws IntegrityMonitorException {
- String msg = "init: missing IntegrityMonitor property: ".concat(prop);
- logger.error(msg);
- throw new IntegrityMonitorException(msg);
- }
-
- private static void logPropertyValue(String prop, String val) {
- logger.info("\n\n init: property: {} = {}\n", prop, val);
- }
-
- /**
- * Static initialization -- create Drools Integrity Monitor, and an HTTP server to handle REST
- * 'test' requests.
- *
- * @throws IntegrityMonitorException exception
- */
- public static DroolsPdpIntegrityMonitor init(String configDir) throws IntegrityMonitorException {
-
- logger.info("init: Entering and invoking PropertyUtil.getProperties() on '{}'", configDir);
-
- // read in properties
- var stateManagementProperties = getProperties(configDir);
-
- // fetch and verify definitions of some properties, adding defaults where
- // appropriate
- // (the 'IntegrityMonitor' constructor does some additional verification)
-
- checkPropError(stateManagementProperties, StateManagementProperties.TEST_HOST);
- checkPropError(stateManagementProperties, StateManagementProperties.TEST_PORT);
-
- addDefaultPropError(stateManagementProperties, StateManagementProperties.TEST_SERVICES,
- StateManagementProperties.TEST_SERVICES_DEFAULT);
-
- addDefaultPropError(stateManagementProperties, StateManagementProperties.TEST_REST_CLASSES,
- StateManagementProperties.TEST_REST_CLASSES_DEFAULT);
-
- addDefaultPropWarn(stateManagementProperties, StateManagementProperties.TEST_MANAGED,
- StateManagementProperties.TEST_MANAGED_DEFAULT);
-
- addDefaultPropWarn(stateManagementProperties, StateManagementProperties.TEST_SWAGGER,
- StateManagementProperties.TEST_SWAGGER_DEFAULT);
-
- checkPropError(stateManagementProperties, StateManagementProperties.RESOURCE_NAME);
- checkPropError(stateManagementProperties, StateManagementProperties.FP_MONITOR_INTERVAL);
- checkPropError(stateManagementProperties, StateManagementProperties.FAILED_COUNTER_THRESHOLD);
- checkPropError(stateManagementProperties, StateManagementProperties.TEST_TRANS_INTERVAL);
- checkPropError(stateManagementProperties, StateManagementProperties.WRITE_FPC_INTERVAL);
- checkPropError(stateManagementProperties, StateManagementProperties.SITE_NAME);
- checkPropError(stateManagementProperties, StateManagementProperties.NODE_TYPE);
- checkPropError(stateManagementProperties, StateManagementProperties.DEPENDENCY_GROUPS);
- checkPropError(stateManagementProperties, StateManagementProperties.DB_TYPE);
- checkPropError(stateManagementProperties, StateManagementProperties.DB_DRIVER);
- checkPropError(stateManagementProperties, StateManagementProperties.DB_URL);
- checkPropError(stateManagementProperties, StateManagementProperties.DB_USER);
- checkPropError(stateManagementProperties, StateManagementProperties.DB_PWD);
-
- final String testHost = stateManagementProperties.getProperty(StateManagementProperties.TEST_HOST);
- final String testPort = stateManagementProperties.getProperty(StateManagementProperties.TEST_PORT);
- final String resourceName = stateManagementProperties.getProperty(StateManagementProperties.RESOURCE_NAME);
-
- subsystemTestProperties = stateManagementProperties;
-
- // Now that we've validated the properties, create Drools Integrity Monitor
- // with these properties.
- im = makeMonitor(resourceName, stateManagementProperties);
- logger.info("init: New DroolsPDPIntegrityMonitor instantiated, resourceName = {}", resourceName);
-
- // create http server
- makeRestServer(testHost, testPort, stateManagementProperties);
- logger.info("init: Exiting and returning DroolsPDPIntegrityMonitor");
-
- return im;
- }
-
- /**
- * Makes an Integrity Monitor.
- *
- * @param resourceName unique name of this Integrity Monitor
- * @param properties properties used to configure the Integrity Monitor
- * @return monitor object
- * @throws IntegrityMonitorException exception
- */
- private static DroolsPdpIntegrityMonitor makeMonitor(String resourceName, Properties properties)
- throws IntegrityMonitorException {
-
- try {
- return new DroolsPdpIntegrityMonitor(resourceName, properties);
-
- } catch (Exception e) {
- throw new IntegrityMonitorException(e);
- }
- }
-
- /**
- * Makes a rest server for the Integrity Monitor.
- *
- * @param testHost host name
- * @param testPort port
- * @param properties properties used to configure the rest server
- * @throws IntegrityMonitorException exception
- */
- private static void makeRestServer(String testHost, String testPort, Properties properties)
- throws IntegrityMonitorException {
-
- try {
- logger.info("init: Starting HTTP server, addr= {}:{}", testHost, testPort);
-
- new IntegrityMonitorRestServer(properties);
-
- } catch (Exception e) {
- logger.error("init: Caught Exception attempting to start server on testPort={}", testPort);
- throw new IntegrityMonitorException(e);
- }
- }
-
- /**
- * Gets the properties from the property file.
- *
- * @param configDir directory containing the property file
- * @return the properties
- * @throws IntegrityMonitorException exception
- */
- private static Properties getProperties(String configDir) throws IntegrityMonitorException {
- try {
- return PropertyUtil.getProperties(configDir + "/" + PROPERTIES_NAME);
-
- } catch (IOException e) {
- throw new IntegrityMonitorException(e);
- }
- }
-
- /**
- * Checks that a property is defined.
- *
- * @param props set of properties
- * @param name name of the property to check
- * @throws IntegrityMonitorException exception
- */
- private static void checkPropError(Properties props, String name) throws IntegrityMonitorException {
- String val = props.getProperty(name);
- if (val == null) {
- missingProperty(name);
- }
-
- logPropertyValue(name, val);
- }
-
- /**
- * Checks a property's value to verify that it matches the expected value. If the property is
- * not defined, then it is added to the property set, with the expected value. Logs an error if
- * the property is defined, but does not have the expected value.
- *
- * @param props set of properties
- * @param name name of the property to check
- * @param expected expected/default value
- */
- private static void addDefaultPropError(Properties props, String name, String expected) {
- String val = props.getProperty(name);
- if (val == null) {
- props.setProperty(name, expected);
-
- } else if (!val.equals(expected)) {
- logger.error(INVALID_PROPERTY_VALUE, name, expected);
- }
-
- logPropertyValue(name, val);
- }
-
- /**
- * Checks a property's value to verify that it matches the expected value. If the property is
- * not defined, then it is added to the property set, with the expected value. Logs a warning if
- * the property is defined, but does not have the expected value.
- *
- * @param props set of properties
- * @param name name of the property to check
- * @param dflt expected/default value
- */
- private static void addDefaultPropWarn(Properties props, String name, String dflt) {
- String val = props.getProperty(name);
- if (val == null) {
- props.setProperty(name, dflt);
-
- } else if (!val.equals(dflt)) {
- logger.warn(INVALID_PROPERTY_VALUE, name, dflt);
- }
-
- logPropertyValue(name, val);
- }
-
- /**
- * Run tests (audits) unique to Drools PDP VM (Database + Repository).
- */
- @Override
- public void subsystemTest() throws IntegrityMonitorException {
- logger.info("DroolsPDPIntegrityMonitor.subsystemTest called");
-
- // clear all responses (non-null values indicate an error)
- for (AuditBase audit : audits) {
- audit.setResponse(null);
- }
-
- // invoke all of the audits
- for (AuditBase audit : audits) {
- try {
- // invoke the audit (responses are stored within the audit object)
- audit.invoke(subsystemTestProperties);
- } catch (Exception e) {
- logger.error("{} audit error", audit.getName(), e);
- if (audit.getResponse() == null) {
- // if there is no current response, use the exception message
- audit.setResponse(e.getMessage());
- }
- }
- }
-
- // will contain list of subsystems where the audit failed
- var responseMsg = "";
-
- // Loop through all of the audits, and see which ones have failed.
- // NOTE: response information is stored within the audit objects
- // themselves -- only one can run at a time.
- for (AuditBase audit : audits) {
- String response = audit.getResponse();
- if (response != null) {
- // the audit has failed -- add subsystem and
- // and 'responseValue' with the new information
- responseMsg = responseMsg.concat("\n" + audit.getName() + ": " + response);
- }
- }
-
- if (!responseMsg.isEmpty()) {
- throw new IntegrityMonitorException(responseMsg);
- }
- }
-
- /* ============================================================ */
-
- /**
- * This is the base class for audits invoked in 'subsystemTest'.
- */
- @Getter
- public abstract static class AuditBase {
- // name of the audit
- protected String name;
-
- // non-null indicates the error response
- @Setter
- protected String response;
-
- /**
- * Constructor - initialize the name, and clear the initial response.
- *
- * @param name name of the audit
- */
- protected AuditBase(String name) {
- this.name = name;
- this.response = null;
- }
-
- /**
- * Abstract method to invoke the audit.
- *
- * @param persistenceProperties Used for DB access
- * @throws IntegrityMonitorException passed in by the audit
- */
- abstract void invoke(Properties persistenceProperties) throws IntegrityMonitorException;
- }
-
- public static class IntegrityMonitorRestServer implements Startable {
- protected HttpServletServer server = null;
- protected final Properties integrityMonitorRestServerProperties;
-
- public IntegrityMonitorRestServer(Properties props) {
- this.integrityMonitorRestServerProperties = props;
- this.start();
- }
-
- @Override
- public boolean start() {
- try {
- List<HttpServletServer> servers = HttpServletServerFactoryInstance.getServerFactory()
- .build(integrityMonitorRestServerProperties);
-
- if (!servers.isEmpty()) {
- server = servers.get(0);
-
- waitServerStart();
- }
- } catch (Exception e) {
- logger.error("Exception building servers", e);
- return false;
- }
-
- return true;
- }
-
- private void waitServerStart() {
- try {
- server.waitedStart(5);
- } catch (Exception e) {
- logger.error("Exception waiting for servers to start: ", e);
- Thread.currentThread().interrupt();
- }
- }
-
- @Override
- public boolean stop() {
- try {
- server.stop();
- } catch (Exception e) {
- logger.error("Exception during stop", e);
- }
-
- return true;
- }
-
- @Override
- public void shutdown() {
- this.stop();
- }
-
- @Override
- public synchronized boolean isAlive() {
- return this.integrityMonitorRestServerProperties != null;
- }
- }
-
- /**
- * Returns the instance.
- *
- * @return DroolsPDPIntegrityMonitor object
- * @throws IntegrityMonitorException exception
- */
- public static DroolsPdpIntegrityMonitor getInstance() throws IntegrityMonitorException {
- logger.debug("getInstance() called");
- if (im == null) {
- String msg = "No DroolsPDPIntegrityMonitor instance exists."
- + " Please use the method DroolsPDPIntegrityMonitor init(String configDir)";
- throw new IntegrityMonitorException(msg);
- } else {
- return im;
- }
- }
-}