From a156cf3cbad6512510ae9a02a13c0408f901c734 Mon Sep 17 00:00:00 2001 From: Jim Hahn Date: Mon, 5 Aug 2019 15:27:16 -0400 Subject: Fix sonar issues in drools-pdp Address sonar issue, "Move constants to a class or enum", by moving them from interfaces to classes: ActiveStandbyFeatureApi StateManagementFeatureApi PolicyResourceLockFeatureApi PolicySessionFeatureApi DroolsController DroolsControllerFeatureApi PolicyControllerFeatureApi PolicyEngineFeatureApi HealthCheck SystemPersistence EventProtocolCoder PolicyController PolicyEngine TestTransaction MdcTransaction Address sonar issue, "Move constants to a class or enum", by change the interface to a class: DroolsProperties Address sonar issue, "Override the "equals" method in this class", by adding equals & hashCode to: DroolsPdpEntity DroolsPdpImpl Use lombok for a number of getters & setters. Address sonar issue, "Define a constant instead of duplicating this literal" in: DroolsPdpsElectionHandler JpaDroolsPdpsConnector MavenDroolsController GenericEventProtocolCoder GsonProtocolCoderToolset RestManager Address sonar issue, "Remove the parentheses around the parameter" in: MavenDroolsController Address sonar issue, "Replace this lambda with a method reference" in: LifecycleFsm Address sonar issue, "Move this constructor to comply with Java Code Conventions" in: LifecycleStateRunning Address sonar issue, "Replace this 'switch' statement by 'if' statements to increase readability", as specified in: PolicyEngineManager Address sonar issue, "Rename field to prevent any misunderstanding/clash with field" in: MdcTransactionImpl Address sonar issue, "Either log or rethrow this exception", in: RestManager Address sonar issue, "Rename this constant name to" uppercase, by replacing enums with static lists in: RestManager Addressed review comments: Fixed license dates. Renamed getSiteName/setSiteName methods to getSite/setSite in the interface to match the field names in the implementation classes. Renamed *Instance classes to *Constants. Next round of review comments. Change-Id: I1c26af9f194833dd773f2b25dc5f60cde163201c Issue-ID: POLICY-1968 Signed-off-by: Jim Hahn --- .../policy/drools/healthcheck/HealthCheck.java | 5 - .../drools/healthcheck/HealthCheckConstants.java | 36 +++ .../drools/healthcheck/HealthCheckFeature.java | 18 +- .../drools/healthcheck/HealthCheckManager.java | 251 +++++++++++++++++++++ .../drools/healthcheck/HealthCheckMonitor.java | 250 -------------------- .../policy/drools/healthcheck/RestHealthCheck.java | 18 +- 6 files changed, 305 insertions(+), 273 deletions(-) create mode 100644 feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckConstants.java create mode 100644 feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckManager.java delete mode 100644 feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckMonitor.java (limited to 'feature-healthcheck/src/main/java/org/onap') diff --git a/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheck.java b/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheck.java index 1a4dab6b..b1b28f79 100644 --- a/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheck.java +++ b/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheck.java @@ -29,11 +29,6 @@ import org.onap.policy.common.capabilities.Startable; */ public interface HealthCheck extends Startable { - /** - * Healthcheck Monitor. - */ - public static final HealthCheck monitor = new HealthCheckMonitor(); - /** * Healthcheck Report. */ diff --git a/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckConstants.java b/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckConstants.java new file mode 100644 index 00000000..70b241dd --- /dev/null +++ b/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckConstants.java @@ -0,0 +1,36 @@ +/* + * ============LICENSE_START======================================================= + * feature-healthcheck + * ================================================================================ + * Copyright (C) 2019 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.healthcheck; + +import lombok.Getter; + +public class HealthCheckConstants { + + /** + * Healthcheck Monitor. + */ + @Getter + private static final HealthCheck manager = new HealthCheckManager(); + + private HealthCheckConstants() { + // do nothing + } +} diff --git a/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckFeature.java b/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckFeature.java index af638c75..961f4a1d 100644 --- a/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckFeature.java +++ b/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckFeature.java @@ -7,9 +7,9 @@ * 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. @@ -33,7 +33,7 @@ public class HealthCheckFeature implements PolicyEngineFeatureApi { /** * Logger. */ - private static Logger logger = LoggerFactory.getLogger(HealthCheckFeature.class); + private static Logger logger = LoggerFactory.getLogger(HealthCheckFeature.class); /** * Properties Configuration Name. @@ -48,7 +48,7 @@ public class HealthCheckFeature implements PolicyEngineFeatureApi { @Override public boolean afterStart(PolicyEngine engine) { try { - getMonitor().start(); + getManager().start(); } catch (IllegalStateException e) { logger.error("Healthcheck Monitor cannot be started", e); } @@ -59,7 +59,7 @@ public class HealthCheckFeature implements PolicyEngineFeatureApi { @Override public boolean afterShutdown(PolicyEngine engine) { try { - getMonitor().stop(); + getManager().stop(); } catch (IllegalStateException e) { logger.error("Healthcheck Monitor cannot be stopped", e); } @@ -69,11 +69,11 @@ public class HealthCheckFeature implements PolicyEngineFeatureApi { /** * Gets the monitor. - * - * @return the healthcheck monitor + * + * @return the healthcheck manager */ - public HealthCheck getMonitor() { - return HealthCheck.monitor; + public HealthCheck getManager() { + return HealthCheckConstants.getManager(); } } diff --git a/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckManager.java b/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckManager.java new file mode 100644 index 00000000..f0b9313a --- /dev/null +++ b/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckManager.java @@ -0,0 +1,251 @@ +/* + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2019 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.healthcheck; + +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; +import javax.ws.rs.core.Response; +import org.onap.policy.common.endpoints.http.client.HttpClient; +import org.onap.policy.common.endpoints.http.client.HttpClientFactory; +import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance; +import org.onap.policy.common.endpoints.http.server.HttpServletServer; +import org.onap.policy.common.endpoints.http.server.HttpServletServerFactory; +import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance; +import org.onap.policy.drools.persistence.SystemPersistenceConstants; +import org.onap.policy.drools.system.PolicyEngine; +import org.onap.policy.drools.system.PolicyEngineConstants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * Healthcheck Monitor. + */ +public class HealthCheckManager implements HealthCheck { + + /** + * Logger. + */ + private static Logger logger = LoggerFactory.getLogger(HealthCheckManager.class); + + /** + * Attached http servers. + */ + protected List servers = new ArrayList<>(); + + /** + * Attached http clients. + */ + protected List clients = new ArrayList<>(); + + /** + * Healthcheck configuration. + */ + protected Properties healthCheckProperties = null; + + /** + * {@inheritDoc}. + */ + @Override + public Reports healthCheck() { + Reports reports = new Reports(); + boolean thisEngineIsAlive = getEngineManager().isAlive(); + reports.setHealthy(thisEngineIsAlive); + + HealthCheck.Report engineReport = new Report(); + engineReport.setHealthy(thisEngineIsAlive); + engineReport.setName("PDP-D"); + engineReport.setUrl("self"); + engineReport.setCode(thisEngineIsAlive ? 200 : 500); + engineReport.setMessage(thisEngineIsAlive ? "alive" : "not alive"); + reports.getDetails().add(engineReport); + + for (HttpClient client : clients) { + HealthCheck.Report report = new Report(); + report.setName(client.getName()); + report.setUrl(client.getBaseUrl()); + report.setHealthy(true); + try { + Response response = client.get(); + report.setCode(response.getStatus()); + if (report.getCode() != 200) { + report.setHealthy(false); + reports.setHealthy(false); + } + + report.setMessage(getHttpBody(response, client)); + } catch (Exception e) { + logger.warn("{}: cannot contact http-client {}", this, client, e); + + report.setHealthy(false); + reports.setHealthy(false); + } + reports.getDetails().add(report); + } + return reports; + } + + /** + * {@inheritDoc}. + */ + @Override + public boolean start() { + + try { + this.healthCheckProperties = getPersistentProperties(HealthCheckFeature.CONFIGURATION_PROPERTIES_NAME); + this.servers = getServerFactory().build(healthCheckProperties); + this.clients = getClientFactory().build(healthCheckProperties); + + for (HttpServletServer server : servers) { + if (server.isAaf()) { + server.addFilterClass(null, AafHealthCheckFilter.class.getName()); + } + startServer(server); + } + } catch (Exception e) { + logger.warn("{}: cannot start {}", this, e); + return false; + } + + return true; + } + + /** + * {@inheritDoc}. + */ + @Override + public boolean stop() { + + for (HttpServletServer server : servers) { + try { + server.stop(); + } catch (Exception e) { + logger.warn("{}: cannot stop http-server {}", this, server, e); + } + } + + for (HttpClient client : clients) { + try { + client.stop(); + } catch (Exception e) { + logger.warn("{}: cannot stop http-client {}", this, client, e); + } + } + + return true; + } + + /** + * {@inheritDoc}. + */ + @Override + public void shutdown() { + this.stop(); + } + + /** + * {@inheritDoc}. + */ + @Override + public synchronized boolean isAlive() { + return this.healthCheckProperties != null; + } + + /** + * Get servers. + * + * @return list of attached Http Servers + */ + public List getServers() { + return this.servers; + } + + /** + * Get clients. + * + * @return list of attached Http Clients + */ + public List getClients() { + return this.clients; + } + + /** + * Gets the body from the response. + * + * @param response response from which to get the body + * @param client HTTP client from which the response was received + * @return the response body + */ + public String getHttpBody(Response response, HttpClient client) { + + String body = null; + try { + body = HttpClient.getBody(response, String.class); + } catch (Exception e) { + logger.info("{}: cannot get body from http-client {}", this, client, e); + } + + return body; + } + + /** + * Starts an HTTP server. + * + * @param server server to be started + */ + public void startServer(HttpServletServer server) { + try { + server.start(); + } catch (Exception e) { + logger.warn("{}: cannot start http-server {}", this, server, e); + } + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("HealthCheckMonitor [servers="); + builder.append(servers); + builder.append(", clients="); + builder.append(clients); + builder.append("]"); + return builder.toString(); + } + + // the following methods may be overridden by junit tests + + protected PolicyEngine getEngineManager() { + return PolicyEngineConstants.getManager(); + } + + protected HttpServletServerFactory getServerFactory() { + return HttpServletServerFactoryInstance.getServerFactory(); + } + + protected HttpClientFactory getClientFactory() { + return HttpClientFactoryInstance.getClientFactory(); + } + + protected Properties getPersistentProperties(String propertyName) { + return SystemPersistenceConstants.getManager().getProperties(propertyName); + } +} diff --git a/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckMonitor.java b/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckMonitor.java deleted file mode 100644 index cca56e01..00000000 --- a/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/HealthCheckMonitor.java +++ /dev/null @@ -1,250 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2019 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.healthcheck; - -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; -import javax.ws.rs.core.Response; -import org.onap.policy.common.endpoints.http.client.HttpClient; -import org.onap.policy.common.endpoints.http.client.HttpClientFactory; -import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance; -import org.onap.policy.common.endpoints.http.server.HttpServletServer; -import org.onap.policy.common.endpoints.http.server.HttpServletServerFactory; -import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance; -import org.onap.policy.drools.persistence.SystemPersistence; -import org.onap.policy.drools.system.PolicyEngine; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - - -/** - * Healthcheck Monitor. - */ -public class HealthCheckMonitor implements HealthCheck { - - /** - * Logger. - */ - private static Logger logger = LoggerFactory.getLogger(HealthCheckMonitor.class); - - /** - * Attached http servers. - */ - protected List servers = new ArrayList<>(); - - /** - * Attached http clients. - */ - protected List clients = new ArrayList<>(); - - /** - * Healthcheck configuration. - */ - protected Properties healthCheckProperties = null; - - /** - * {@inheritDoc}. - */ - @Override - public Reports healthCheck() { - Reports reports = new Reports(); - boolean thisEngineIsAlive = getEngineManager().isAlive(); - reports.setHealthy(thisEngineIsAlive); - - HealthCheck.Report engineReport = new Report(); - engineReport.setHealthy(thisEngineIsAlive); - engineReport.setName("PDP-D"); - engineReport.setUrl("self"); - engineReport.setCode(thisEngineIsAlive ? 200 : 500); - engineReport.setMessage(thisEngineIsAlive ? "alive" : "not alive"); - reports.getDetails().add(engineReport); - - for (HttpClient client : clients) { - HealthCheck.Report report = new Report(); - report.setName(client.getName()); - report.setUrl(client.getBaseUrl()); - report.setHealthy(true); - try { - Response response = client.get(); - report.setCode(response.getStatus()); - if (report.getCode() != 200) { - report.setHealthy(false); - reports.setHealthy(false); - } - - report.setMessage(getHttpBody(response, client)); - } catch (Exception e) { - logger.warn("{}: cannot contact http-client {}", this, client, e); - - report.setHealthy(false); - reports.setHealthy(false); - } - reports.getDetails().add(report); - } - return reports; - } - - /** - * {@inheritDoc}. - */ - @Override - public boolean start() { - - try { - this.healthCheckProperties = getPersistentProperties(HealthCheckFeature.CONFIGURATION_PROPERTIES_NAME); - this.servers = getServerFactory().build(healthCheckProperties); - this.clients = getClientFactory().build(healthCheckProperties); - - for (HttpServletServer server : servers) { - if (server.isAaf()) { - server.addFilterClass(null, AafHealthCheckFilter.class.getName()); - } - startServer(server); - } - } catch (Exception e) { - logger.warn("{}: cannot start {}", this, e); - return false; - } - - return true; - } - - /** - * {@inheritDoc}. - */ - @Override - public boolean stop() { - - for (HttpServletServer server : servers) { - try { - server.stop(); - } catch (Exception e) { - logger.warn("{}: cannot stop http-server {}", this, server, e); - } - } - - for (HttpClient client : clients) { - try { - client.stop(); - } catch (Exception e) { - logger.warn("{}: cannot stop http-client {}", this, client, e); - } - } - - return true; - } - - /** - * {@inheritDoc}. - */ - @Override - public void shutdown() { - this.stop(); - } - - /** - * {@inheritDoc}. - */ - @Override - public synchronized boolean isAlive() { - return this.healthCheckProperties != null; - } - - /** - * Get servers. - * - * @return list of attached Http Servers - */ - public List getServers() { - return this.servers; - } - - /** - * Get clients. - * - * @return list of attached Http Clients - */ - public List getClients() { - return this.clients; - } - - /** - * Gets the body from the response. - * - * @param response response from which to get the body - * @param client HTTP client from which the response was received - * @return the response body - */ - public String getHttpBody(Response response, HttpClient client) { - - String body = null; - try { - body = HttpClient.getBody(response, String.class); - } catch (Exception e) { - logger.info("{}: cannot get body from http-client {}", this, client, e); - } - - return body; - } - - /** - * Starts an HTTP server. - * - * @param server server to be started - */ - public void startServer(HttpServletServer server) { - try { - server.start(); - } catch (Exception e) { - logger.warn("{}: cannot start http-server {}", this, server, e); - } - } - - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append("HealthCheckMonitor [servers="); - builder.append(servers); - builder.append(", clients="); - builder.append(clients); - builder.append("]"); - return builder.toString(); - } - - // the following methods may be overridden by junit tests - - protected PolicyEngine getEngineManager() { - return PolicyEngine.manager; - } - - protected HttpServletServerFactory getServerFactory() { - return HttpServletServerFactoryInstance.getServerFactory(); - } - - protected HttpClientFactory getClientFactory() { - return HttpClientFactoryInstance.getClientFactory(); - } - - protected Properties getPersistentProperties(String propertyName) { - return SystemPersistence.manager.getProperties(propertyName); - } -} diff --git a/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/RestHealthCheck.java b/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/RestHealthCheck.java index 5047cb26..954a2c55 100644 --- a/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/RestHealthCheck.java +++ b/feature-healthcheck/src/main/java/org/onap/policy/drools/healthcheck/RestHealthCheck.java @@ -2,14 +2,14 @@ * ============LICENSE_START======================================================= * feature-healthcheck * ================================================================================ - * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2019 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. @@ -56,24 +56,24 @@ public class RestHealthCheck { @Path("healthcheck") @Produces(MediaType.APPLICATION_JSON) @ApiOperation( - value = "Perform a system healthcheck", + value = "Perform a system healthcheck", notes = "Provides healthy status of the PDP-D plus the components defined in its " + "configuration by using a REST interface", response = Reports.class ) - public Response healthcheck() { - return Response.status(Response.Status.OK).entity(HealthCheck.monitor.healthCheck()).build(); + public Response healthcheck() { + return Response.status(Response.Status.OK).entity(HealthCheckConstants.getManager().healthCheck()).build(); } @GET @Path("healthcheck/configuration") @Produces(MediaType.APPLICATION_JSON) @ApiOperation( - value = "Configuration", + value = "Configuration", notes = "Provides the Healthcheck server configuration and monitored REST clients", response = HealthCheck.class ) - public HealthCheck configuration() { - return HealthCheck.monitor; + public HealthCheck configuration() { + return HealthCheckConstants.getManager(); } } -- cgit 1.2.3-korg