summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java27
-rw-r--r--feature-lifecycle/src/test/java/org/onap/policy/drools/server/restful/RestLifecycleManagerTest.java29
2 files changed, 52 insertions, 4 deletions
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java
index e0ac880e..611ac240 100644
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP
* ================================================================================
- * Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019-2022 AT&T Intellectual Property. All rights reserved.
* Modifications Copyright (C) 2021 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -22,6 +22,7 @@
package org.onap.policy.drools.lifecycle;
import com.google.re2j.Pattern;
+import io.prometheus.client.Counter;
import java.lang.reflect.InvocationTargetException;
import java.time.Instant;
import java.util.ArrayList;
@@ -53,6 +54,7 @@ import org.onap.policy.common.endpoints.listeners.MessageTypeDispatcher;
import org.onap.policy.common.endpoints.listeners.ScoListener;
import org.onap.policy.common.gson.annotation.GsonJsonIgnore;
import org.onap.policy.common.utils.coder.StandardCoderObject;
+import org.onap.policy.common.utils.resources.PrometheusUtils;
import org.onap.policy.drools.persistence.SystemPersistenceConstants;
import org.onap.policy.drools.policies.DomainMaker;
import org.onap.policy.drools.system.PolicyController;
@@ -64,6 +66,7 @@ import org.onap.policy.models.pdp.concepts.PdpStatus;
import org.onap.policy.models.pdp.concepts.PdpUpdate;
import org.onap.policy.models.pdp.enums.PdpHealthStatus;
import org.onap.policy.models.pdp.enums.PdpMessageType;
+import org.onap.policy.models.pdp.enums.PdpResponseStatus;
import org.onap.policy.models.pdp.enums.PdpState;
import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
@@ -100,6 +103,16 @@ public class LifecycleFsm implements Startable {
protected static final ToscaConceptIdentifier POLICY_TYPE_DROOLS_NATIVE_CONTROLLER =
new ToscaConceptIdentifier("onap.policies.native.drools.Controller", "1.0.0");
+ protected static final String PROMETHEUS_NAMESPACE = "pdpd";
+
+ protected static final Counter deploymentsCounter =
+ Counter.build().namespace(PROMETHEUS_NAMESPACE).name(PrometheusUtils.POLICY_DEPLOYMENTS_METRIC)
+ .labelNames(PrometheusUtils.STATE_METRIC_LABEL,
+ PrometheusUtils.OPERATION_METRIC_LABEL,
+ PrometheusUtils.STATUS_METRIC_LABEL)
+ .help(PrometheusUtils.POLICY_DEPLOYMENT_HELP)
+ .register();
+
@Getter
protected final Properties properties;
@@ -436,6 +449,9 @@ public class LifecycleFsm implements Startable {
policiesMap.computeIfAbsent(policy.getIdentifier(), key -> {
// avoid counting reapplies in a second pass when a mix of native and non-native
// policies are present.
+ deploymentsCounter.labels(state.state().name(),
+ PrometheusUtils.DEPLOY_OPERATION,
+ PdpResponseStatus.SUCCESS.name()).inc();
getStats().setPolicyDeployCount(getStats().getPolicyDeployCount() + 1);
getStats().setPolicyDeploySuccessCount(getStats().getPolicyDeploySuccessCount() + 1);
return policy;
@@ -446,6 +462,9 @@ public class LifecycleFsm implements Startable {
policiesMap.computeIfPresent(policy.getIdentifier(), (key, value) -> {
// avoid counting reapplies in a second pass when a mix of native and non-native
// policies are present.
+ deploymentsCounter.labels(state.state().name(),
+ PrometheusUtils.UNDEPLOY_OPERATION,
+ PdpResponseStatus.SUCCESS.name()).inc();
getStats().setPolicyUndeployCount(getStats().getPolicyUndeployCount() + 1);
getStats().setPolicyUndeploySuccessCount(getStats().getPolicyUndeploySuccessCount() + 1);
return null;
@@ -453,11 +472,17 @@ public class LifecycleFsm implements Startable {
}
protected void failedDeployPolicyAction(@NonNull ToscaPolicy failedPolicy) { // NOSONAR
+ deploymentsCounter.labels(state.state().name(),
+ PrometheusUtils.DEPLOY_OPERATION,
+ PdpResponseStatus.FAIL.name()).inc();
getStats().setPolicyDeployCount(getStats().getPolicyDeployCount() + 1);
getStats().setPolicyDeployFailCount(getStats().getPolicyDeployFailCount() + 1);
}
protected void failedUndeployPolicyAction(ToscaPolicy failedPolicy) {
+ deploymentsCounter.labels(state.state().name(),
+ PrometheusUtils.UNDEPLOY_OPERATION,
+ PdpResponseStatus.FAIL.name()).inc();
getStats().setPolicyUndeployCount(getStats().getPolicyUndeployCount() + 1);
getStats().setPolicyUndeployFailCount(getStats().getPolicyUndeployFailCount() + 1);
policiesMap.remove(failedPolicy.getIdentifier());
diff --git a/feature-lifecycle/src/test/java/org/onap/policy/drools/server/restful/RestLifecycleManagerTest.java b/feature-lifecycle/src/test/java/org/onap/policy/drools/server/restful/RestLifecycleManagerTest.java
index 65228a9b..cb2d5add 100644
--- a/feature-lifecycle/src/test/java/org/onap/policy/drools/server/restful/RestLifecycleManagerTest.java
+++ b/feature-lifecycle/src/test/java/org/onap/policy/drools/server/restful/RestLifecycleManagerTest.java
@@ -1,6 +1,6 @@
/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019-2022 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.
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import io.prometheus.client.CollectorRegistry;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
@@ -65,7 +66,6 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
* REST Lifecycle Manager Test.
*/
public class RestLifecycleManagerTest {
-
// Native Drools Policy
private static final String EXAMPLE_NATIVE_CONTROLLER_POLICY_NAME = "example.controller";
private static final String EXAMPLE_NATIVE_CONTROLLER_POLICY_JSON =
@@ -91,6 +91,13 @@ public class RestLifecycleManagerTest {
private static final String VCPE_OPERATIONAL_DROOLS_POLICY_JSON =
"policies/vCPE.policy.operational.input.tosca.json";
+ public static final String PROM_DEPLOY_REQUESTS_TOTAL_UNDEPLOY_ACCEPTED =
+ "pdpd_policy_deployments_total{state=\"ACTIVE\",operation=\"undeploy\",status=\"SUCCESS\",}";
+ public static final String PDPD_DEPLOY_REQUESTS_TOTAL_DEPLOY_ACCEPTED =
+ "pdpd_policy_deployments_total{state=\"ACTIVE\",operation=\"deploy\",status=\"SUCCESS\",}";
+ public static final String PDPD_DEPLOY_REQUESTS_TOTAL_DEPLOY_DECLINED =
+ "pdpd_policy_deployments_total{state=\"ACTIVE\",operation=\"deploy\",status=\"FAIL\",}";
+
private static final StandardCoder coder = new StandardCoder();
private static final ControllerSupport controllerSupport = new ControllerSupport("lifecycle");
@@ -102,6 +109,8 @@ public class RestLifecycleManagerTest {
*/
@Before
public void setUp() throws Exception {
+ CollectorRegistry.defaultRegistry.clear();
+
SystemPersistenceConstants.getManager().setConfigurationDir("target/test-classes");
fsm = newFsmInstance();
@@ -123,8 +132,9 @@ public class RestLifecycleManagerTest {
.build());
HttpServletServer server =
- HttpServletServerFactoryInstance.getServerFactory().build("lifecycle", "localhost", 8765, "/",
+ HttpServletServerFactoryInstance.getServerFactory().build("lifecycle", "localhost", 8765, "/",
true, true);
+ server.setPrometheus("/policy/pdp/engine/lifecycle/metrics");
server.setSerializationProvider(
String.join(",", JacksonHandler.class.getName(), YamlJacksonHandler.class.getName()));
server.addServletClass("/*", RestLifecycleManager.class.getName());
@@ -159,6 +169,8 @@ public class RestLifecycleManagerTest {
PolicyControllerConstants.getFactory().destroy();
SystemPersistenceConstants.getManager().setConfigurationDir(null);
+
+ CollectorRegistry.defaultRegistry.clear();
}
@Test
@@ -329,6 +341,8 @@ public class RestLifecycleManagerTest {
assertThat(
listPost("policies/operations/validation", toString(opPolicy),
Status.NOT_ACCEPTABLE.getStatusCode())).isNotEmpty();
+
+ metrics();
}
private void testNotNativePolicy(ToscaPolicy toscaPolicy) throws CoderException {
@@ -439,6 +453,15 @@ public class RestLifecycleManagerTest {
assertEquals("GG", HttpClient.getBody(response, String.class));
}
+ private void metrics() {
+ Response response = client.get("metrics");
+ assertEquals(Status.OK.getStatusCode(), response.getStatus());
+ String body = HttpClient.getBody(response, String.class);
+ assertThat(body).contains(PROM_DEPLOY_REQUESTS_TOTAL_UNDEPLOY_ACCEPTED);
+ assertThat(body).contains(PDPD_DEPLOY_REQUESTS_TOTAL_DEPLOY_ACCEPTED);
+ assertThat(body).contains(PDPD_DEPLOY_REQUESTS_TOTAL_DEPLOY_DECLINED);
+ }
+
private LifecycleFsm newFsmInstance() throws NoSuchFieldException, IllegalAccessException {
LifecycleFsm fsm = new LifecycleFsm();
ControllerSupport.setStaticField(LifecycleFeature.class, "fsm", fsm);