aboutsummaryrefslogtreecommitdiffstats
path: root/services/services-engine/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'services/services-engine/src/main')
-rw-r--r--services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexEventUnmarshaller.java44
-rw-r--r--services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineWorker.java3
-rw-r--r--services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameterHandler.java58
3 files changed, 84 insertions, 21 deletions
diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexEventUnmarshaller.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexEventUnmarshaller.java
index 8f3bb858f..a5e823e97 100644
--- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexEventUnmarshaller.java
+++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexEventUnmarshaller.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* Copyright (C) 2016-2018 Ericsson. All rights reserved.
* Modifications Copyright (C) 2019-2021 Nordix Foundation.
- * Modifications Copyright (C) 2020-2021 Bell Canada. All rights reserved.
+ * Modifications Copyright (C) 2020-2022 Bell Canada. All rights reserved.
* Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -23,6 +23,8 @@
package org.onap.policy.apex.service.engine.main;
+import com.google.common.base.Strings;
+import io.prometheus.client.Counter;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
@@ -33,9 +35,11 @@ import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import lombok.Getter;
import lombok.NonNull;
+import org.apache.commons.lang3.EnumUtils;
import org.onap.policy.apex.core.infrastructure.threading.ApplicationThreadFactory;
import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities;
import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.apex.model.basicmodel.concepts.AxToscaPolicyProcessingStatus;
import org.onap.policy.apex.service.engine.event.ApexEvent;
import org.onap.policy.apex.service.engine.event.ApexEventConsumer;
import org.onap.policy.apex.service.engine.event.ApexEventException;
@@ -48,6 +52,9 @@ import org.onap.policy.apex.service.engine.event.impl.EventProtocolFactory;
import org.onap.policy.apex.service.parameters.engineservice.EngineServiceParameters;
import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters;
import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode;
+import org.onap.policy.common.utils.resources.PrometheusUtils;
+import org.onap.policy.models.pdp.concepts.PdpStatus;
+import org.onap.policy.models.pdp.enums.PdpResponseStatus;
import org.slf4j.ext.XLogger;
import org.slf4j.ext.XLoggerFactory;
@@ -67,6 +74,14 @@ public class ApexEventUnmarshaller implements ApexEventReceiver, Runnable {
// The amount of time to wait between polls of the event queue in milliseconds
private static final long EVENT_QUEUE_POLL_INTERVAL = 20;
+ private static final String PROMETHEUS_TOTAL_LABEL_VALUE = "TOTAL";
+
+ // prometheus registration for policy execution metrics
+ static final Counter POLICY_EXECUTED_COUNTER =
+ Counter.build().namespace(PrometheusUtils.PdpType.PDPA.getNamespace())
+ .name(PrometheusUtils.POLICY_EXECUTION_METRIC).labelNames(PrometheusUtils.STATUS_METRIC_LABEL)
+ .help(PrometheusUtils.POLICY_EXECUTION_HELP).register();
+
// The name of the unmarshaler
@Getter
private final String name;
@@ -218,11 +233,36 @@ public class ApexEventUnmarshaller implements ApexEventReceiver, Runnable {
synchronousEventCache.cacheSynchronizedEventToApex(apexEvent.getExecutionId(), apexEvent);
}
+ // Update policy execution metrics
+ updatePolicyExecutedMetrics(apexEvent.getToscaPolicyState());
+
// Enqueue the event
queue.add(apexEvent);
}
}
+ /**
+ * Increment Prometheus counters for TOSCA policy execution metrics.
+ *
+ * @param toscaPolicyState the TOSCA Policy state flag from the event
+ */
+ private void updatePolicyExecutedMetrics(String toscaPolicyState) {
+ // Skip events that are not flagged as TOSCA processing entry or exit points.
+ if (Strings.isNullOrEmpty(toscaPolicyState)
+ || !EnumUtils.isValidEnum(AxToscaPolicyProcessingStatus.class, toscaPolicyState)) {
+ return;
+ }
+
+ // Increment total, successful and failed policy executed counter.
+ if (AxToscaPolicyProcessingStatus.ENTRY.name().equals(toscaPolicyState)) {
+ POLICY_EXECUTED_COUNTER.labels(PROMETHEUS_TOTAL_LABEL_VALUE).inc();
+ } else if (AxToscaPolicyProcessingStatus.EXIT_SUCCESS.name().equals(toscaPolicyState)) {
+ POLICY_EXECUTED_COUNTER.labels(PdpResponseStatus.SUCCESS.name()).inc();
+ } else if (AxToscaPolicyProcessingStatus.EXIT_FAILURE.name().equals(toscaPolicyState)) {
+ POLICY_EXECUTED_COUNTER.labels(PdpResponseStatus.FAIL.name()).inc();
+ }
+ }
+
private List<ApexEvent> convertToApexEvents(final Object event) throws ApexEventException {
List<ApexEvent> apexEventList = null;
List<String> eventNamesList = null;
@@ -340,4 +380,4 @@ public class ApexEventUnmarshaller implements ApexEventReceiver, Runnable {
}
LOGGER.exit("shut down Apex event unmarshaller");
}
-}
+} \ No newline at end of file
diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineWorker.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineWorker.java
index f69eae664..ebb1cdf2d 100644
--- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineWorker.java
+++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineWorker.java
@@ -1,7 +1,7 @@
/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2016-2018 Ericsson. All rights reserved.
- * Modifications Copyright (C) 2019-2020 Nordix Foundation.
+ * Modifications Copyright (C) 2019-2020,2022 Nordix Foundation.
* Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -449,7 +449,6 @@ final class EngineWorker implements EngineService {
try {
final var baOutputStream = new ByteArrayOutputStream();
final ApexModelWriter<AxEngineModel> modelWriter = new ApexModelWriter<>(AxEngineModel.class);
- modelWriter.setJsonOutput(true);
modelWriter.write(apexEngineModel, baOutputStream);
return baOutputStream.toString();
} catch (final Exception e) {
diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameterHandler.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameterHandler.java
index cc19080f9..2e97c54fc 100644
--- a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameterHandler.java
+++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameterHandler.java
@@ -1,7 +1,7 @@
/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2016-2018 Ericsson. All rights reserved.
- * Modifications Copyright (C) 2019-2021 Nordix Foundation.
+ * Modifications Copyright (C) 2019-2022 Nordix Foundation.
* Modifications Copyright (C) 2020-2021 Bell Canada. All rights reserved.
* Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
* ================================================================================
@@ -41,6 +41,7 @@ import org.onap.policy.apex.service.parameters.eventprotocol.EventProtocolParame
import org.onap.policy.common.parameters.ParameterException;
import org.onap.policy.common.parameters.ParameterService;
import org.onap.policy.common.parameters.ValidationResult;
+import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.common.utils.coder.StandardCoder;
import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
import org.slf4j.ext.XLogger;
@@ -61,6 +62,8 @@ public class ApexParameterHandler {
private static final XLogger LOGGER = XLoggerFactory.getXLogger(ApexParameterHandler.class);
private static final String POLICY_TYPE_IMPL = "policy_type_impl";
+ private static final String APEX_POLICY_MODEL = "apexPolicyModel";
+
private String policyModel;
private String apexConfig;
@@ -81,13 +84,13 @@ public class ApexParameterHandler {
// Register the adapters for our carrier technologies and event protocols with GSON
// @formatter:off
final var gson = new GsonBuilder()
- .registerTypeAdapter(EngineParameters.class,
- new EngineServiceParametersJsonAdapter())
- .registerTypeAdapter(CarrierTechnologyParameters.class,
- new CarrierTechnologyParametersJsonAdapter())
- .registerTypeAdapter(EventProtocolParameters.class,
- new EventProtocolParametersJsonAdapter())
- .create();
+ .registerTypeAdapter(EngineParameters.class,
+ new EngineServiceParametersJsonAdapter())
+ .registerTypeAdapter(CarrierTechnologyParameters.class,
+ new CarrierTechnologyParametersJsonAdapter())
+ .registerTypeAdapter(EventProtocolParameters.class,
+ new EventProtocolParametersJsonAdapter())
+ .create();
// @formatter:on
parameters = gson.fromJson(apexConfig, ApexParameters.class);
} catch (final Exception e) {
@@ -135,13 +138,13 @@ public class ApexParameterHandler {
ParameterService.register(parameters.getEngineServiceParameters().getEngineParameters());
ParameterService.register(parameters.getEngineServiceParameters().getEngineParameters().getContextParameters());
ParameterService.register(parameters.getEngineServiceParameters().getEngineParameters().getContextParameters()
- .getSchemaParameters());
+ .getSchemaParameters());
ParameterService.register(parameters.getEngineServiceParameters().getEngineParameters().getContextParameters()
- .getDistributorParameters());
+ .getDistributorParameters());
ParameterService.register(parameters.getEngineServiceParameters().getEngineParameters().getContextParameters()
- .getLockManagerParameters());
+ .getLockManagerParameters());
ParameterService.register(parameters.getEngineServiceParameters().getEngineParameters().getContextParameters()
- .getPersistorParameters());
+ .getPersistorParameters());
}
private void parseConfigAndModel(final String toscaPolicyFilePath) throws ApexException {
@@ -162,11 +165,7 @@ public class ApexParameterHandler {
|| EVENT_OUTPUT_PARAMETERS.equals(property.getKey())) {
body = standardCoder.convert(property.getValue(), JsonObject.class);
if (ENGINE_SERVICE_PARAMETERS.equals(property.getKey())) {
- JsonElement policyModelObject = ((JsonObject) body).get(POLICY_TYPE_IMPL);
- if (null != policyModelObject) {
- policyModel = standardCoder.encode(policyModelObject);
- }
- ((JsonObject) body).remove(POLICY_TYPE_IMPL);
+ policyModel = extractPolicyModel(standardCoder, body);
}
}
apexConfigJsonObject.add(property.getKey(), body);
@@ -176,4 +175,29 @@ public class ApexParameterHandler {
throw new ApexException("Parsing config and model from the tosca policy failed.", e);
}
}
+
+ private String extractPolicyModel(StandardCoder standardCoder, JsonElement body) throws CoderException {
+ // Check for "policy_type_impl"
+ JsonElement policyTypeImplObject = ((JsonObject) body).get(POLICY_TYPE_IMPL);
+ if (null == policyTypeImplObject) {
+ return null;
+ }
+
+ // "policy_type_impl" found
+ if (policyTypeImplObject instanceof JsonObject) {
+
+ // Check for "apexPolicyModel", this is used to encapsulate policy models sometimes
+ JsonElement policyModelObject = ((JsonObject) policyTypeImplObject).get(APEX_POLICY_MODEL);
+
+ if (policyModelObject != null) {
+ // Policy model encased in an "apexPolicyModel" object
+ return standardCoder.encode(policyModelObject);
+ } else {
+ // No encasement
+ return standardCoder.encode(policyTypeImplObject);
+ }
+ } else {
+ return policyTypeImplObject.getAsString();
+ }
+ }
}