Fix logging issues 11/85811/4
authorxg353y <xg353y@intl.att.com>
Fri, 19 Apr 2019 11:55:40 +0000 (13:55 +0200)
committerxg353y <xg353y@intl.att.com>
Tue, 23 Apr 2019 09:22:27 +0000 (11:22 +0200)
Fix the logging issues created by the api defined by camel. Adding the
entering/exiting and invoking/invoking return logs as based on the ONAP
Logging Requirement.

Issue-ID: CLAMP-351
Change-Id: I5cb314ade5a716993206a917dfdbdab3f2572b3a
Signed-off-by: xg353y <xg353y@intl.att.com>
src/main/java/org/onap/clamp/clds/util/LoggingUtils.java
src/main/java/org/onap/clamp/clds/util/ONAPLogConstants.java
src/main/java/org/onap/clamp/flow/log/FlowLogOperation.java [new file with mode: 0644]
src/main/java/org/onap/clamp/loop/LoopOperation.java
src/main/resources/clds/camel/rest/clamp-api-v2.xml
src/main/resources/clds/camel/routes/flexible-flow.xml
src/main/resources/logback-default.xml

index 08bb976..cbe7eba 100644 (file)
-/*-\r
- * ============LICENSE_START=======================================================\r
- * ONAP CLAMP\r
- * ================================================================================\r
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights\r
- *                             reserved.\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ============LICENSE_END============================================\r
- * ===================================================================\r
- *\r
- */\r
-\r
-package org.onap.clamp.clds.util;\r
-\r
-import com.att.eelf.configuration.EELFLogger;\r
-import com.att.eelf.configuration.EELFManager;\r
-\r
-import java.net.HttpURLConnection;\r
-import java.net.InetAddress;\r
-import java.net.UnknownHostException;\r
-import java.text.DateFormat;\r
-import java.text.SimpleDateFormat;\r
-import java.time.ZoneOffset;\r
-import java.time.ZonedDateTime;\r
-import java.time.format.DateTimeFormatter;\r
-import java.util.Date;\r
-import java.util.TimeZone;\r
-import java.util.UUID;\r
-\r
-import javax.net.ssl.HttpsURLConnection;\r
-import javax.servlet.http.HttpServletRequest;\r
-import javax.validation.constraints.NotNull;\r
-\r
-import org.onap.clamp.clds.service.DefaultUserNameHandler;\r
-import org.slf4j.MDC;\r
-import org.slf4j.event.Level;\r
-import org.springframework.security.core.context.SecurityContextHolder;\r
-\r
-/**\r
- * This class handles the special info that appear in the log, like RequestID,\r
- * time context, ...\r
- */\r
-public class LoggingUtils {\r
-    protected static final EELFLogger logger = EELFManager.getInstance().getLogger(LoggingUtils.class);\r
-\r
-    private static final DateFormat DATE_FORMAT = createDateFormat();\r
-\r
-    /** String constant for messages <tt>ENTERING</tt>, <tt>EXITING</tt>, etc. */\r
-    private static final String EMPTY_MESSAGE = "";\r
-\r
-    /** Logger delegate. */\r
-    private EELFLogger mlogger;\r
-    /** Automatic UUID, overrideable per adapter or per invocation. */\r
-    private static UUID sInstanceUUID = UUID.randomUUID();\r
-\r
-    /**\r
-     * Constructor.\r
-     */\r
-    public LoggingUtils(final EELFLogger loggerP) {\r
-        this.mlogger = checkNotNull(loggerP);\r
-    }\r
-\r
-    /**\r
-     * Set request related logging variables in thread local data via MDC\r
-     *\r
-     * @param service Service Name of API (ex. "PUT template")\r
-     * @param partner Partner name (client or user invoking API)\r
-     */\r
-    public static void setRequestContext(String service, String partner) {\r
-        MDC.put("RequestId", UUID.randomUUID().toString());\r
-        MDC.put("ServiceName", service);\r
-        MDC.put("PartnerName", partner);\r
-        //Defaulting to HTTP/1.1 protocol\r
-        MDC.put("Protocol", "HTTP/1.1");\r
-        try {\r
-            MDC.put("ServerFQDN", InetAddress.getLocalHost().getCanonicalHostName());\r
-            MDC.put("ServerIPAddress", InetAddress.getLocalHost().getHostAddress());\r
-        } catch (UnknownHostException e) {\r
-            logger.error("Failed to initiate setRequestContext", e);\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Set time related logging variables in thread local data via MDC.\r
-     *\r
-     * @param beginTimeStamp Start time\r
-     * @param endTimeStamp End time\r
-     */\r
-    public static void setTimeContext(@NotNull Date beginTimeStamp, @NotNull Date endTimeStamp) {\r
-        MDC.put("BeginTimestamp", generateTimestampStr(beginTimeStamp));\r
-        MDC.put("EndTimestamp", generateTimestampStr(endTimeStamp));\r
-        MDC.put("ElapsedTime", String.valueOf(endTimeStamp.getTime() - beginTimeStamp.getTime()));\r
-    }\r
-\r
-    /**\r
-     * Set response related logging variables in thread local data via MDC.\r
-     *\r
-     * @param code Response code ("0" indicates success)\r
-     * @param description Response description\r
-     * @param className class name of invoking class\r
-     */\r
-    public static void setResponseContext(String code, String description, String className) {\r
-        MDC.put("ResponseCode", code);\r
-        MDC.put("StatusCode", code.equals("0") ? "COMPLETE" : "ERROR");\r
-        MDC.put("ResponseDescription", description != null ? description : "");\r
-        MDC.put("ClassName", className != null ? className : "");\r
-    }\r
-\r
-    /**\r
-     * Set target related logging variables in thread local data via MDC\r
-     *\r
-     * @param targetEntity Target entity (an external/sub component, for ex. "sdc")\r
-     * @param targetServiceName Target service name (name of API invoked on target)\r
-     */\r
-    public static void setTargetContext(String targetEntity, String targetServiceName) {\r
-        MDC.put("TargetEntity", targetEntity != null ? targetEntity : "");\r
-        MDC.put("TargetServiceName", targetServiceName != null ? targetServiceName : "");\r
-    }\r
-\r
-    /**\r
-     * Set error related logging variables in thread local data via MDC.\r
-     *\r
-     * @param code Error code\r
-     * @param description Error description\r
-     */\r
-    public static void setErrorContext(String code, String description) {\r
-        MDC.put("ErrorCode", code);\r
-        MDC.put("ErrorDescription", description != null ? description : "");\r
-    }\r
-\r
-    private static String generateTimestampStr(Date timeStamp) {\r
-        return DATE_FORMAT.format(timeStamp);\r
-    }\r
-\r
-    /**\r
-     * Get a previously stored RequestID for the thread local data via MDC. If\r
-     * one was not previously stored, generate one, store it, and return that\r
-     * one.\r
-     *\r
-     * @return A string with the request ID\r
-     */\r
-    public static String getRequestId() {\r
-        String requestId = MDC.get(ONAPLogConstants.MDCs.REQUEST_ID);\r
-        if (requestId == null || requestId.isEmpty()) {\r
-            requestId = UUID.randomUUID().toString();\r
-            MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, requestId);\r
-        }\r
-        return requestId;\r
-    }\r
-\r
-    private static DateFormat createDateFormat() {\r
-        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");\r
-        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));\r
-        return dateFormat;\r
-    }\r
-\r
-\r
-\r
-    /*********************************************************************************************\r
-     * Method for ONAP Application Logging Specification v1.2\r
-     ********************************************************************************************/\r
-\r
-    /**\r
-     * Report <tt>ENTERING</tt> marker.\r
-     *\r
-     * @param request non-null incoming request (wrapper)\r
-     * @param serviceName service name\r
-     */\r
-    public void entering(HttpServletRequest request, String serviceName) {\r
-        MDC.clear();\r
-        checkNotNull(request);\r
-        // Extract MDC values from standard HTTP headers.\r
-        final String requestId = defaultToUUID(request.getHeader(ONAPLogConstants.Headers.REQUEST_ID));\r
-        final String invocationId = defaultToUUID(request.getHeader(ONAPLogConstants.Headers.INVOCATION_ID));\r
-        final String partnerName = defaultToEmpty(request.getHeader(ONAPLogConstants.Headers.PARTNER_NAME));\r
-\r
-        // Default the partner name to the user name used to login to clamp\r
-        if (partnerName.equalsIgnoreCase(EMPTY_MESSAGE)) {\r
-            MDC.put(ONAPLogConstants.MDCs.PARTNER_NAME, new DefaultUserNameHandler()\r
-                    .retrieveUserName(SecurityContextHolder.getContext()));\r
-        }\r
-\r
-        // Set standard MDCs. Override this entire method if you want to set\r
-        // others, OR set them BEFORE or AFTER the invocation of #entering,\r
-        // depending on where you need them to appear, OR extend the\r
-        // ServiceDescriptor to add them.\r
-        MDC.put(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP,\r
-            ZonedDateTime.now(ZoneOffset.UTC)\r
-            .format(DateTimeFormatter.ISO_INSTANT));\r
-        MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, requestId);\r
-        MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID, invocationId);\r
-        MDC.put(ONAPLogConstants.MDCs.CLIENT_IP_ADDRESS, defaultToEmpty(request.getRemoteAddr()));\r
-        MDC.put(ONAPLogConstants.MDCs.SERVER_FQDN, defaultToEmpty(request.getServerName()));\r
-        MDC.put(ONAPLogConstants.MDCs.INSTANCE_UUID, defaultToEmpty(sInstanceUUID));\r
-\r
-        // Default the service name to the requestURI, in the event that\r
-        // no value has been provided.\r
-        if (serviceName == null\r
-                || serviceName.equalsIgnoreCase(EMPTY_MESSAGE)) {\r
-            MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, request.getRequestURI());\r
-        } else {\r
-            MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, serviceName);\r
-        }\r
-\r
-        this.mlogger.info(ONAPLogConstants.Markers.ENTRY);\r
-    }\r
-\r
-    /**\r
-     * Report <tt>EXITING</tt> marker.\r
-     *\r
-     * @param code response code\r
-     * @param descrption response description\r
-     * @param severity response severity\r
-     * @param status response status code\r
-     */\r
-    public void exiting(String code, String descrption, Level severity, ONAPLogConstants.ResponseStatus status) {\r
-        try {\r
-            MDC.put(ONAPLogConstants.MDCs.RESPONSE_CODE, defaultToEmpty(code));\r
-            MDC.put(ONAPLogConstants.MDCs.RESPONSE_DESCRIPTION, defaultToEmpty(descrption));\r
-            MDC.put(ONAPLogConstants.MDCs.RESPONSE_SEVERITY, defaultToEmpty(severity));\r
-            MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, defaultToEmpty(status));\r
-            this.mlogger.info(ONAPLogConstants.Markers.EXIT);\r
-        }\r
-        finally {\r
-            MDC.clear();\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Report pending invocation with <tt>INVOKE</tt> marker,\r
-     * setting standard ONAP logging headers automatically.\r
-     *\r
-     * @param con http URL connection\r
-     * @param targetEntity target entity\r
-     * @param targetServiceName target service name\r
-     * @return invocation ID to be passed with invocation\r
-     */\r
-    public HttpURLConnection invoke(final HttpURLConnection con, String targetEntity, String targetServiceName) {\r
-        final String invocationId = UUID.randomUUID().toString();\r
-\r
-        // Set standard HTTP headers on (southbound request) builder.\r
-        con.setRequestProperty(ONAPLogConstants.Headers.REQUEST_ID,\r
-            defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)));\r
-        con.setRequestProperty(ONAPLogConstants.Headers.INVOCATION_ID,\r
-            invocationId);\r
-        con.setRequestProperty(ONAPLogConstants.Headers.PARTNER_NAME,\r
-            defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME)));\r
-\r
-        invokeContext(targetEntity, targetServiceName, invocationId);\r
-\r
-        // Log INVOKE*, with the invocationID as the message body.\r
-        // (We didn't really want this kind of behavior in the standard,\r
-        // but is it worse than new, single-message MDC?)\r
-        this.mlogger.info(ONAPLogConstants.Markers.INVOKE);\r
-        this.mlogger.info(ONAPLogConstants.Markers.INVOKE_SYNC + "{" + invocationId + "}");\r
-        return con;\r
-    }\r
-\r
-    /**\r
-     * Report pending invocation with <tt>INVOKE</tt> marker,\r
-     * setting standard ONAP logging headers automatically.\r
-     *\r
-     * @param con http URL connection\r
-     * @param targetEntity target entity\r
-     * @param targetServiceName target service name\r
-     * @return invocation ID to be passed with invocation\r
-     */\r
-    public HttpsURLConnection invokeHttps(final HttpsURLConnection con, String targetEntity, String targetServiceName) {\r
-        final String invocationId = UUID.randomUUID().toString();\r
-\r
-        // Set standard HTTP headers on (southbound request) builder.\r
-        con.setRequestProperty(ONAPLogConstants.Headers.REQUEST_ID,\r
-            defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)));\r
-        con.setRequestProperty(ONAPLogConstants.Headers.INVOCATION_ID,\r
-            invocationId);\r
-        con.setRequestProperty(ONAPLogConstants.Headers.PARTNER_NAME,\r
-            defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME)));\r
-\r
-        invokeContext(targetEntity, targetServiceName, invocationId);\r
-\r
-        // Log INVOKE*, with the invocationID as the message body.\r
-        // (We didn't really want this kind of behavior in the standard,\r
-        // but is it worse than new, single-message MDC?)\r
-        this.mlogger.info(ONAPLogConstants.Markers.INVOKE);\r
-        this.mlogger.info(ONAPLogConstants.Markers.INVOKE_SYNC + "{" + invocationId + "}");\r
-        return con;\r
-    }\r
-\r
-    /**\r
-     * Invokes return context.\r
-     */\r
-    public void invokeReturn() {\r
-        // Add the Invoke-return marker and clear the needed MDC\r
-        this.mlogger.info(ONAPLogConstants.Markers.INVOKE_RETURN);\r
-        invokeReturnContext();\r
-    }\r
-\r
-    /**\r
-     * Dependency-free nullcheck.\r
-     *\r
-     * @param in to be checked\r
-     * @param <T> argument (and return) type\r
-     * @return input arg\r
-     */\r
-    private static <T> T checkNotNull(final T in) {\r
-        if (in == null) {\r
-            throw new NullPointerException();\r
-        }\r
-        return in;\r
-    }\r
-\r
-    /**\r
-     * Dependency-free string default.\r
-     *\r
-     * @param in to be filtered\r
-     * @return input string or null\r
-     */\r
-    private static String defaultToEmpty(final Object in) {\r
-        if (in == null) {\r
-            return "";\r
-        }\r
-        return in.toString();\r
-    }\r
-\r
-    /**\r
-     * Dependency-free string default.\r
-     *\r
-     * @param in to be filtered\r
-     * @return input string or null\r
-     */\r
-    private static String defaultToUUID(final String in) {\r
-        if (in == null) {\r
-            return UUID.randomUUID().toString();\r
-        }\r
-        return in;\r
-    }\r
-\r
-    /**\r
-     * Set target related logging variables in thread local data via MDC.\r
-     *\r
-     * @param targetEntity Target entity (an external/sub component, for ex. "sdc")\r
-     * @param targetServiceName Target service name (name of API invoked on target)\r
-     * @param invocationID The invocation ID\r
-     */\r
-    private void invokeContext(String targetEntity, String targetServiceName, String invocationID) {\r
-        MDC.put(ONAPLogConstants.MDCs.TARGET_ENTITY, defaultToEmpty(targetEntity));\r
-        MDC.put(ONAPLogConstants.MDCs.TARGET_SERVICE_NAME, defaultToEmpty(targetServiceName));\r
-        MDC.put(ONAPLogConstants.MDCs.INVOCATIONID_OUT, invocationID);\r
-        MDC.put(ONAPLogConstants.MDCs.INVOKE_TIMESTAMP,\r
-            ZonedDateTime.now(ZoneOffset.UTC)\r
-            .format(DateTimeFormatter.ISO_INSTANT));\r
-    }\r
-\r
-    /**\r
-     * Clear target related logging variables in thread local data via MDC.\r
-     */\r
-    private void invokeReturnContext() {\r
-        MDC.remove(ONAPLogConstants.MDCs.TARGET_ENTITY);\r
-        MDC.remove(ONAPLogConstants.MDCs.TARGET_SERVICE_NAME);\r
-        MDC.remove(ONAPLogConstants.MDCs.INVOCATIONID_OUT);\r
-    }\r
-}\r
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * 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.
+ * 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.clamp.clds.util;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+import java.net.HttpURLConnection;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.Date;
+import java.util.TimeZone;
+import java.util.UUID;
+
+import javax.net.ssl.HttpsURLConnection;
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.constraints.NotNull;
+
+import org.onap.clamp.clds.service.DefaultUserNameHandler;
+import org.slf4j.MDC;
+import org.slf4j.event.Level;
+import org.springframework.security.core.context.SecurityContextHolder;
+
+/**
+ * This class handles the special info that appear in the log, like RequestID,
+ * time context, ...
+ */
+public class LoggingUtils {
+    protected static final EELFLogger logger = EELFManager.getInstance().getLogger(LoggingUtils.class);
+
+    private static final DateFormat DATE_FORMAT = createDateFormat();
+
+    /** String constant for messages <tt>ENTERING</tt>, <tt>EXITING</tt>, etc. */
+    private static final String EMPTY_MESSAGE = "";
+
+    /** Logger delegate. */
+    private EELFLogger mlogger;
+
+    /** Automatic UUID, overrideable per adapter or per invocation. */
+    private static UUID sInstanceUUID = UUID.randomUUID();
+
+    /**
+     * Constructor.
+     */
+    public LoggingUtils(final EELFLogger loggerP) {
+        this.mlogger = checkNotNull(loggerP);
+    }
+
+    /**
+     * Set request related logging variables in thread local data via MDC.
+     *
+     * @param service Service Name of API (ex. "PUT template")
+     * @param partner Partner name (client or user invoking API)
+     */
+    public static void setRequestContext(String service, String partner) {
+        MDC.put("RequestId", UUID.randomUUID().toString());
+        MDC.put("ServiceName", service);
+        MDC.put("PartnerName", partner);
+        //Defaulting to HTTP/1.1 protocol
+        MDC.put("Protocol", "HTTP/1.1");
+        try {
+            MDC.put("ServerFQDN", InetAddress.getLocalHost().getCanonicalHostName());
+            MDC.put("ServerIPAddress", InetAddress.getLocalHost().getHostAddress());
+        } catch (UnknownHostException e) {
+            logger.error("Failed to initiate setRequestContext", e);
+        }
+    }
+
+    /**
+     * Set time related logging variables in thread local data via MDC.
+     *
+     * @param beginTimeStamp Start time
+     * @param endTimeStamp End time
+     */
+    public static void setTimeContext(@NotNull Date beginTimeStamp, @NotNull Date endTimeStamp) {
+        MDC.put("EntryTimestamp", generateTimestampStr(beginTimeStamp));
+        MDC.put("EndTimestamp", generateTimestampStr(endTimeStamp));
+        MDC.put("ElapsedTime", String.valueOf(endTimeStamp.getTime() - beginTimeStamp.getTime()));
+    }
+
+    /**
+     * Set response related logging variables in thread local data via MDC.
+     *
+     * @param code Response code ("0" indicates success)
+     * @param description Response description
+     * @param className class name of invoking class
+     */
+    public static void setResponseContext(String code, String description, String className) {
+        MDC.put("ResponseCode", code);
+        MDC.put("StatusCode", code.equals("0") ? "COMPLETE" : "ERROR");
+        MDC.put("ResponseDescription", description != null ? description : "");
+        MDC.put("ClassName", className != null ? className : "");
+    }
+
+    /**
+     * Set target related logging variables in thread local data via MDC.
+     *
+     * @param targetEntity Target entity (an external/sub component, for ex. "sdc")
+     * @param targetServiceName Target service name (name of API invoked on target)
+     */
+    public static void setTargetContext(String targetEntity, String targetServiceName) {
+        MDC.put("TargetEntity", targetEntity != null ? targetEntity : "");
+        MDC.put("TargetServiceName", targetServiceName != null ? targetServiceName : "");
+    }
+
+    /**
+     * Set error related logging variables in thread local data via MDC.
+     *
+     * @param code Error code
+     * @param description Error description
+     */
+    public static void setErrorContext(String code, String description) {
+        MDC.put("ErrorCode", code);
+        MDC.put("ErrorDescription", description != null ? description : "");
+    }
+
+    private static String generateTimestampStr(Date timeStamp) {
+        return DATE_FORMAT.format(timeStamp);
+    }
+
+    /**
+     * Get a previously stored RequestID for the thread local data via MDC. If
+     * one was not previously stored, generate one, store it, and return that
+     * one.
+     *
+     * @return A string with the request ID
+     */
+    public static String getRequestId() {
+        String requestId = MDC.get(ONAPLogConstants.MDCs.REQUEST_ID);
+        if (requestId == null || requestId.isEmpty()) {
+            requestId = UUID.randomUUID().toString();
+            MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, requestId);
+        }
+        return requestId;
+    }
+
+    private static DateFormat createDateFormat() {
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
+        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+        return dateFormat;
+    }
+
+
+
+    /*********************************************************************************************
+     * Method for ONAP Application Logging Specification v1.2
+     ********************************************************************************************/
+
+    /**
+     * Report <tt>ENTERING</tt> marker.
+     *
+     * @param request non-null incoming request (wrapper)
+     * @param serviceName service name
+     */
+    public void entering(HttpServletRequest request, String serviceName) {
+        MDC.clear();
+        checkNotNull(request);
+        // Extract MDC values from standard HTTP headers.
+        final String requestId = defaultToUUID(request.getHeader(ONAPLogConstants.Headers.REQUEST_ID));
+        final String invocationId = defaultToUUID(request.getHeader(ONAPLogConstants.Headers.INVOCATION_ID));
+        final String partnerName = defaultToEmpty(request.getHeader(ONAPLogConstants.Headers.PARTNER_NAME));
+
+        // Default the partner name to the user name used to login to clamp
+        if (partnerName.equalsIgnoreCase(EMPTY_MESSAGE)) {
+            MDC.put(ONAPLogConstants.MDCs.PARTNER_NAME, new DefaultUserNameHandler()
+                    .retrieveUserName(SecurityContextHolder.getContext()));
+        }
+
+        // Set standard MDCs. Override this entire method if you want to set
+        // others, OR set them BEFORE or AFTER the invocation of #entering,
+        // depending on where you need them to appear, OR extend the
+        // ServiceDescriptor to add them.
+        MDC.put(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP,
+            ZonedDateTime.now(ZoneOffset.UTC)
+            .format(DateTimeFormatter.ISO_INSTANT));
+        MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, requestId);
+        MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID, invocationId);
+        MDC.put(ONAPLogConstants.MDCs.CLIENT_IP_ADDRESS, defaultToEmpty(request.getRemoteAddr()));
+        MDC.put(ONAPLogConstants.MDCs.SERVER_FQDN, defaultToEmpty(request.getServerName()));
+        MDC.put(ONAPLogConstants.MDCs.INSTANCE_UUID, defaultToEmpty(sInstanceUUID));
+
+        // Default the service name to the requestURI, in the event that
+        // no value has been provided.
+        if (serviceName == null
+                || serviceName.equalsIgnoreCase(EMPTY_MESSAGE)) {
+            MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, request.getRequestURI());
+        } else {
+            MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, serviceName);
+        }
+
+        this.mlogger.info(ONAPLogConstants.Markers.ENTRY);
+    }
+
+    /**
+     * Report <tt>EXITING</tt> marker.
+     *
+
+     * @param code response code
+     * @param descrption response description
+     * @param severity response severity
+     * @param status response status code
+     */
+    public void exiting(String code, String descrption, Level severity, ONAPLogConstants.ResponseStatus status) {
+        try {
+            MDC.put(ONAPLogConstants.MDCs.RESPONSE_CODE, defaultToEmpty(code));
+            MDC.put(ONAPLogConstants.MDCs.RESPONSE_DESCRIPTION, defaultToEmpty(descrption));
+            MDC.put(ONAPLogConstants.MDCs.RESPONSE_SEVERITY, defaultToEmpty(severity));
+            MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, defaultToEmpty(status));
+
+            ZonedDateTime startTime = ZonedDateTime.parse(MDC.get(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP),
+                DateTimeFormatter.ISO_INSTANT.withZone(ZoneOffset.UTC));
+            ZonedDateTime endTime = ZonedDateTime.now(ZoneOffset.UTC);
+            MDC.put(ONAPLogConstants.MDCs.END_TIMESTAMP, endTime.format(DateTimeFormatter.ISO_INSTANT));
+            long duration = ChronoUnit.MILLIS.between(startTime, endTime);
+            MDC.put(ONAPLogConstants.MDCs.ELAPSED_TIMESTAMP, String.valueOf(duration)); 
+            this.mlogger.info(ONAPLogConstants.Markers.EXIT);
+        }
+        finally {
+            MDC.clear();
+        }
+    }
+
+    /**
+     * Get the property value.
+     *
+     * @param name The name of the property
+     * @return The value of the property
+     */
+    public String getProperties(String name) {
+        return MDC.get(name);
+    }
+    
+    /**
+     * Report pending invocation with <tt>INVOKE</tt> marker,
+     * setting standard ONAP logging headers automatically.
+     *
+     * @param con The HTTP url connection
+     * @param targetEntity The target entity
+     * @param targetServiceName The target service name
+     * @return The HTTP url connection
+     */
+    public HttpURLConnection invoke(final HttpURLConnection con, String targetEntity, String targetServiceName) {
+        final String invocationId = UUID.randomUUID().toString();
+
+        // Set standard HTTP headers on (southbound request) builder.
+        con.setRequestProperty(ONAPLogConstants.Headers.REQUEST_ID,
+            defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)));
+        con.setRequestProperty(ONAPLogConstants.Headers.INVOCATION_ID,
+            invocationId);
+        con.setRequestProperty(ONAPLogConstants.Headers.PARTNER_NAME,
+            defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME)));
+
+        invokeContext(targetEntity, targetServiceName, invocationId);
+
+        // Log INVOKE*, with the invocationID as the message body.
+        // (We didn't really want this kind of behavior in the standard,
+        // but is it worse than new, single-message MDC?)
+        this.mlogger.info(ONAPLogConstants.Markers.INVOKE);
+        this.mlogger.info(ONAPLogConstants.Markers.INVOKE_SYNC + "{" + invocationId + "}");
+        return con;
+    }
+
+    /**
+     * Report pending invocation with <tt>INVOKE</tt> marker,
+     * setting standard ONAP logging headers automatically.
+     *
+     * @param targetEntity The target entity
+     * @param targetServiceName The target service name
+     */
+    public void invoke(String targetEntity, String targetServiceName) {
+        final String invocationId = UUID.randomUUID().toString();
+
+        invokeContext(targetEntity, targetServiceName, invocationId);
+
+        // Log INVOKE*, with the invocationID as the message body.
+        // (We didn't really want this kind of behavior in the standard,
+        // but is it worse than new, single-message MDC?)
+        this.mlogger.info(ONAPLogConstants.Markers.INVOKE);
+        this.mlogger.info(ONAPLogConstants.Markers.INVOKE_SYNC + "{" + invocationId + "}");
+    }
+
+    /**
+     * Report pending invocation with <tt>INVOKE</tt> marker,
+     * setting standard ONAP logging headers automatically.
+     *
+     * @param con The HTTPS url connection
+     * @param targetEntity The target entity
+     * @param targetServiceName The target service name
+     * @return The HTTPS url connection
+     */
+    public HttpsURLConnection invokeHttps(final HttpsURLConnection con, String targetEntity, String targetServiceName) {
+        final String invocationId = UUID.randomUUID().toString();
+
+        // Set standard HTTP headers on (southbound request) builder.
+        con.setRequestProperty(ONAPLogConstants.Headers.REQUEST_ID,
+            defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)));
+        con.setRequestProperty(ONAPLogConstants.Headers.INVOCATION_ID,
+            invocationId);
+        con.setRequestProperty(ONAPLogConstants.Headers.PARTNER_NAME,
+            defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME)));
+
+        invokeContext(targetEntity, targetServiceName, invocationId);
+
+        // Log INVOKE*, with the invocationID as the message body.
+        // (We didn't really want this kind of behavior in the standard,
+        // but is it worse than new, single-message MDC?)
+        this.mlogger.info(ONAPLogConstants.Markers.INVOKE);
+        this.mlogger.info(ONAPLogConstants.Markers.INVOKE_SYNC + "{" + invocationId + "}");
+        return con;
+    }
+
+    /**
+     * Report pending invocation with <tt>INVOKE-RETURN</tt> marker.
+     */
+    public void invokeReturn() {
+        // Add the Invoke-return marker and clear the needed MDC
+        this.mlogger.info(ONAPLogConstants.Markers.INVOKE_RETURN);
+        invokeReturnContext();
+    }
+
+    /**
+     * Dependency-free nullcheck.
+     *
+     * @param in to be checked
+     * @param <T> argument (and return) type
+     * @return input arg
+     */
+    private static <T> T checkNotNull(final T in) {
+        if (in == null) {
+            throw new NullPointerException();
+        }
+        return in;
+    }
+
+    /**
+     * Dependency-free string default.
+     *
+     * @param in to be filtered
+     * @return input string or null
+     */
+    private static String defaultToEmpty(final Object in) {
+        if (in == null) {
+            return "";
+        }
+        return in.toString();
+    }
+
+    /**
+     * Dependency-free string default.
+     *
+     * @param in to be filtered
+     * @return input string or null
+     */
+    private static String defaultToUUID(final String in) {
+        if (in == null) {
+            return UUID.randomUUID().toString();
+        }
+        return in;
+    }
+
+    /**
+     * Set target related logging variables in thread local data via MDC.
+     *
+     * @param targetEntity Target entity (an external/sub component, for ex. "sdc")
+     * @param targetServiceName Target service name (name of API invoked on target)
+     * @param invocationID The invocation ID
+     */
+    private void invokeContext(String targetEntity, String targetServiceName, String invocationID) {
+        MDC.put(ONAPLogConstants.MDCs.TARGET_ENTITY, defaultToEmpty(targetEntity));
+        MDC.put(ONAPLogConstants.MDCs.TARGET_SERVICE_NAME, defaultToEmpty(targetServiceName));
+        MDC.put(ONAPLogConstants.MDCs.INVOCATIONID_OUT, invocationID);
+        MDC.put(ONAPLogConstants.MDCs.INVOKE_TIMESTAMP,
+            ZonedDateTime.now(ZoneOffset.UTC)
+            .format(DateTimeFormatter.ISO_INSTANT));
+    }
+
+    /**
+     * Clear target related logging variables in thread local data via MDC.
+     */
+    private void invokeReturnContext() {
+        MDC.remove(ONAPLogConstants.MDCs.TARGET_ENTITY);
+        MDC.remove(ONAPLogConstants.MDCs.TARGET_SERVICE_NAME);
+        MDC.remove(ONAPLogConstants.MDCs.INVOCATIONID_OUT);
+        MDC.remove(ONAPLogConstants.MDCs.INVOKE_TIMESTAMP);
+    }
+}
index eea01a3..906f8e0 100644 (file)
@@ -122,7 +122,8 @@ public final class ONAPLogConstants {
          * </p>
          * */
         public static final String ENTRY_TIMESTAMP = "EntryTimestamp";
-
+        public static final String END_TIMESTAMP = "EndTimestamp";
+        public static final String ELAPSED_TIMESTAMP = "ElapsedTime";
         /** MDC recording timestamp at the start of the current invocation. */
         public static final String INVOKE_TIMESTAMP = "InvokeTimestamp";
 
diff --git a/src/main/java/org/onap/clamp/flow/log/FlowLogOperation.java b/src/main/java/org/onap/clamp/flow/log/FlowLogOperation.java
new file mode 100644 (file)
index 0000000..ae96f6a
--- /dev/null
@@ -0,0 +1,104 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * 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.clamp.flow.log;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.camel.Exchange;
+import org.onap.clamp.clds.util.LoggingUtils;
+import org.onap.clamp.clds.util.ONAPLogConstants;
+import org.slf4j.event.Level;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Component;
+
+/**
+ * The Flow log operations.
+ */
+@Component
+public class FlowLogOperation {
+
+    protected static final EELFLogger logger = EELFManager.getInstance().getLogger(FlowLogOperation.class);
+    protected static final EELFLogger auditLogger = EELFManager.getInstance().getMetricsLogger();
+    private LoggingUtils util = new LoggingUtils(logger);
+
+    @Autowired
+    private HttpServletRequest request;
+
+    /**
+     * Generate the entry log.
+     *
+     * @param serviceDesc The service description
+     *        the loop name
+     */
+    public void startLog(Exchange exchange, String serviceDesc) {
+        util.entering(request, serviceDesc);
+        exchange.getIn().setHeader(ONAPLogConstants.Headers.REQUEST_ID, 
+            util.getProperties(ONAPLogConstants.MDCs.REQUEST_ID));
+        exchange.getIn().setHeader(ONAPLogConstants.Headers.INVOCATION_ID, 
+            util.getProperties(ONAPLogConstants.MDCs.INVOCATION_ID));
+        exchange.getIn().setHeader(ONAPLogConstants.Headers.PARTNER_NAME, 
+            util.getProperties(ONAPLogConstants.MDCs.PARTNER_NAME));
+    }
+
+    /**
+     * Generate the exiting log.
+     */
+    public void endLog() {
+        util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, 
+            ONAPLogConstants.ResponseStatus.COMPLETED);
+    }
+
+    /**
+     * Generate the error exiting log.
+     */
+    public void errorLog() {
+        util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), "Failed",
+            Level.INFO, ONAPLogConstants.ResponseStatus.ERROR);
+    }
+    
+    /**
+     * Generate the error exiting log.
+     */
+    public void httpErrorLog() {
+
+    }
+
+    /**
+     * Generate the invoke log.
+     */
+    public void invokeLog(String targetEntity, String targetServiceName) {
+        util.invoke(targetEntity, targetServiceName);
+    }
+
+    /**
+     * Generate the invoke return marker.
+     */
+    public void invokeReturnLog() {
+        util.invokeReturn();
+    }
+}
index d9ea248..3f4c529 100644 (file)
@@ -52,7 +52,7 @@ import org.springframework.stereotype.Component;
 import org.yaml.snakeyaml.Yaml;
 
 /**
- * Closed loop operations
+ * Closed loop operations.
  */
 @Component
 public class LoopOperation {
@@ -72,15 +72,15 @@ public class LoopOperation {
         this.loopService = loopService;
         this.dcaeDispatcherServices = dcaeDispatcherServices;
     }
-
+    
     /**
      * Deploy the closed loop.
      *
      * @param loopName
      *        the loop name
      * @return the updated loop
-     * @throws Exceptions
-     *         during the operation
+     * @throws OperationException
+     *         Exception during the operation
      */
     public Loop deployLoop(Exchange camelExchange, String loopName) throws OperationException {
         util.entering(request, "CldsService: Deploy model");
@@ -172,32 +172,35 @@ public class LoopOperation {
         return loop;
     }
 
-    private JsonElement wrapSnakeObject(Object o) {
+    private JsonElement wrapSnakeObject(Object obj) {
         // NULL => JsonNull
-        if (o == null)
+        if (obj == null) {
             return JsonNull.INSTANCE;
+        }
 
         // Collection => JsonArray
-        if (o instanceof Collection) {
+        if (obj instanceof Collection) {
             JsonArray array = new JsonArray();
-            for (Object childObj : (Collection<?>) o)
+            for (Object childObj : (Collection<?>) obj) {
                 array.add(wrapSnakeObject(childObj));
+            }
             return array;
         }
 
         // Array => JsonArray
-        if (o.getClass().isArray()) {
+        if (obj.getClass().isArray()) {
             JsonArray array = new JsonArray();
 
             int length = Array.getLength(array);
-            for (int i = 0; i < length; i++)
+            for (int i = 0; i < length; i++) {
                 array.add(wrapSnakeObject(Array.get(array, i)));
+            }
             return array;
         }
 
         // Map => JsonObject
-        if (o instanceof Map) {
-            Map<?, ?> map = (Map<?, ?>) o;
+        if (obj instanceof Map) {
+            Map<?, ?> map = (Map<?, ?>) obj;
 
             JsonObject jsonObject = new JsonObject();
             for (final Map.Entry<?, ?> entry : map.entrySet()) {
@@ -209,7 +212,7 @@ public class LoopOperation {
         }
 
         // otherwise take it as a string
-        return new JsonPrimitive(String.valueOf(o));
+        return new JsonPrimitive(String.valueOf(obj));
     }
 
 }
index a823c09..6bd1132 100644 (file)
@@ -5,10 +5,23 @@
                        outType="java.lang.String[]"
                        produces="application/json">
                        <route>
-                               <to
-                                       uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
-                               <to
-                                       uri="bean:org.onap.clamp.loop.LoopController?method=getLoopNames()" />
+                               <doTry>
+                               <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Get All ClosedLoop')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopController?method=getLoopNames()" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                               <doCatch>
+                               <exception>java.lang.Exception</exception>
+                               <handled>
+                                       <constant>false</constant>
+                               </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                               </doCatch>
+                       </doTry>
                        </route>
                </get>
                <get
                        outType="org.onap.clamp.loop.Loop"
                        produces="application/json">
                        <route>
-                               <to
-                                       uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
-                               <to
-                                       uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
+                               <doTry>
+                               <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Get Closed Loop')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                               <doCatch>
+                               <exception>java.lang.Exception</exception>
+                               <handled>
+                                       <constant>false</constant>
+                               </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                               </doCatch>
+                       </doTry>
                        </route>
                </get>
                <get
                        outType="java.lang.String"
                        produces="application/xml">
                        <route>
-                               <to
-                                       uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
-                               <to
-                                       uri="bean:org.onap.clamp.loop.LoopController?method=getSVGRepresentation(${header.loopName})" />
+                               <doTry>
+                               <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Get SVG Representation')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopController?method=getSVGRepresentation(${header.loopName})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                               <doCatch>
+                               <exception>java.lang.Exception</exception>
+                               <handled>
+                                       <constant>false</constant>
+                               </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                               </doCatch>
+                       </doTry>
                        </route>
                </get>
 
                        outType="org.onap.clamp.loop.Loop"
                        produces="application/json">
                        <route>
-                               <to
-                                       uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
-                               <setHeader headerName="GlobalPropertiesJson">
-                                       <simple>${body}</simple>
-                               </setHeader>
-                               <to uri="direct:load-loop" />
-                               <to
-                                       uri="bean:org.onap.clamp.loop.LoopController?method=updateGlobalPropertiesJson(${header.loopName},${header.GlobalPropertiesJson})" />
-                               <to
-                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Global Properties UPDATED','INFO',${header.LoopObject})" />
+                               <doTry>
+                               <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Update the global properties')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <setHeader headerName="GlobalPropertiesJson">
+                                               <simple>${body}</simple>
+                                       </setHeader>
+                                       <to uri="direct:load-loop" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopController?method=updateGlobalPropertiesJson(${header.loopName},${header.GlobalPropertiesJson})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Global Properties UPDATED','INFO',${header.LoopObject})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                               <doCatch>
+                               <exception>java.lang.Exception</exception>
+                               <handled>
+                                       <constant>false</constant>
+                               </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                               </doCatch>
+                       </doTry>
                        </route>
                </post>
                <post
                        outType="org.onap.clamp.loop.Loop"
                        produces="application/json">
                        <route>
-                               <to
-                                       uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
-                               <setHeader headerName="OperationalPoliciesArray">
-                                       <simple>${body}</simple>
-                               </setHeader>
-                               <to uri="direct:load-loop" />
-                               <to
-                                       uri="bean:org.onap.clamp.loop.LoopController?method=updateOperationalPolicies(${header.loopName},${header.OperationalPoliciesArray})" />
-                               <to
-                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Operational and Guard policies UPDATED','INFO',${header.LoopObject})" />
+                               <doTry>
+                               <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Update operational policies')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <setHeader headerName="OperationalPoliciesArray">
+                                               <simple>${body}</simple>
+                                       </setHeader>
+                                       <to uri="direct:load-loop" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopController?method=updateOperationalPolicies(${header.loopName},${header.OperationalPoliciesArray})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Operational and Guard policies UPDATED','INFO',${header.LoopObject})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                               <doCatch>
+                               <exception>java.lang.Exception</exception>
+                               <handled>
+                                       <constant>false</constant>
+                               </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                               </doCatch>
+                       </doTry>
                        </route>
                </post>
                <post
                        outType="org.onap.clamp.policy.microservice.MicroServicePolicy"
                        produces="application/json">
                        <route>
-                               <to
-                                       uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
-                               <setHeader headerName="MicroServicePolicyObject">
-                                       <simple>${body}</simple>
-                               </setHeader>
+                               <doTry>
+                               <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Update Microservice policies')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <setHeader headerName="MicroServicePolicyObject">
+                                               <simple>${body}</simple>
+                                       </setHeader>
 
-                               <to uri="direct:load-loop" />
-                               <to
-                                       uri="bean:org.onap.clamp.loop.LoopController?method=updateMicroservicePolicy(${header.loopName},${header.MicroServicePolicyObject})" />
-                               <to
-                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Micro Service policies UPDATED','INFO',${header.LoopObject})" />
+                                       <to uri="direct:load-loop" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopController?method=updateMicroservicePolicy(${header.loopName},${header.MicroServicePolicyObject})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Micro Service policies UPDATED','INFO',${header.LoopObject})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                               <doCatch>
+                               <exception>java.lang.Exception</exception>
+                               <handled>
+                                       <constant>false</constant>
+                               </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                               </doCatch>
+                       </doTry>
                        </route>
                </post>
                <put
                        outType="org.onap.clamp.loop.Loop"
                        produces="application/json">
                        <route>
-                               <to
-                                       uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
-                               <to
-                                       uri="bean:org.onap.clamp.operation.LoopOperation?method=deployLoop(*,${header.loopName})" />
+                               <doTry>
+                               <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Deploy the closed loop')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.operation.LoopOperation?method=deployLoop(*,${header.loopName})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                               <doCatch>
+                               <exception>java.lang.Exception</exception>
+                               <handled>
+                                       <constant>false</constant>
+                               </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                               </doCatch>
+                       </doTry>
                        </route>
                </put>
                <put
                        outType="org.onap.clamp.loop.Loop"
                        produces="application/json">
                        <route>
-                               <to
-                                       uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
-                               <to
-                                       uri="bean:org.onap.clamp.operation.LoopOperation?method=unDeployLoop(${header.loopName})" />
+                               <doTry>
+                               <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Undeploy the closed loop')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.operation.LoopOperation?method=unDeployLoop(${header.loopName})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                               <doCatch>
+                               <exception>java.lang.Exception</exception>
+                               <handled>
+                                       <constant>false</constant>
+                               </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                               </doCatch>
+                       </doTry>
                        </route>
                </put>
                <put
                        outType="org.onap.clamp.loop.Loop"
                        produces="application/json">
                        <route>
-                               <log
-                                       loggingLevel="INFO"
-                                       message="Receive STOP request for loop: ${header.loopName}" />
+                               <doTry>
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="Receive STOP request for loop: ${header.loopName}" />
+                               <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog('Stop the closed loop')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <to uri="direct:load-loop" />
+
+                                       <doTry> 
+                                               <to uri="direct:remove-all-policy-from-active-pdp-group" />
+                                               <doCatch>
+                                       <exception>java.lang.Exception</exception>
+                                       <handled>
+                                               <constant>false</constant>
+                                       </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                       </doCatch>
+                                       </doTry>
+
+
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="STOP request successfully executed for loop: ${body}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('STOP request successfully executed','INFO',${header.LoopObject})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                               <doCatch>
+                               <exception>java.lang.Exception</exception>
+                               <handled>
+                                       <constant>false</constant>
+                               </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                               </doCatch>
+                       </doTry>
                        </route>
-                       <to
-                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
-                       <to uri="direct:load-loop" />
-                       <to uri="direct:remove-all-policy-from-active-pdp-group" />
-                       <log
-                               loggingLevel="INFO"
-                               message="STOP request successfully executed for loop: ${body}" />
-                       <to
-                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('STOP request successfully executed','INFO',${header.LoopObject})" />
-                       <to
-                               uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
                </put>
                <put
                        uri="/v2/loop/start/{loopName}"
                        outType="org.onap.clamp.loop.Loop"
                        produces="application/json">
                        <route>
-                               <log
-                                       loggingLevel="INFO"
-                                       message="Receive START request for loop: ${header.loopName}" />
+                               <doTry>
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="Receive START request for loop: ${header.loopName}" />
+                               <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog('Start the closed loop')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <to uri="direct:load-loop" />
+                                       
+                                       <doTry> 
+                                               <to uri="direct:add-all-to-active-pdp-group" />
+                                               <doCatch>
+                                       <exception>java.lang.Exception</exception>
+                                       <handled>
+                                               <constant>false</constant>
+                                       </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                       </doCatch>
+                                       </doTry>
+
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="START request successfully executed for loop: ${body}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('START request successfully executed','INFO',${header.LoopObject})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                               <doCatch>
+                               <exception>java.lang.Exception</exception>
+                               <handled>
+                                       <constant>false</constant>
+                               </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                               </doCatch>
+                       </doTry>
                        </route>
-                       <to
-                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
-                       <to uri="direct:load-loop" />
-                       <to uri="direct:add-all-to-active-pdp-group" />
-                       <log
-                               loggingLevel="INFO"
-                               message="START request successfully executed for loop: ${body}" />
-                       <to
-                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('START request successfully executed','INFO',${header.LoopObject})" />
-                       <to
-                               uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
                </put>
                <put
                        uri="/v2/loop/submit/{loopName}"
                        outType="org.onap.clamp.loop.Loop"
                        produces="application/json">
                        <route>
-                               <log
-                                       loggingLevel="INFO"
-                                       message="Receive SUBMIT request for loop: ${header.loopName}" />
-                               <to
-                                       uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
-                               <to uri="direct:load-loop" />
-                               <to
-                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Receive SUBMIT request','INFO',${header.LoopObject})" />
-                               <setHeader headerName="RaiseHttpExceptionFlag">
-                                       <simple resultType="java.lang.Boolean">false</simple>
-                               </setHeader>
-                               <to uri="direct:remove-all-policy-from-active-pdp-group" />
-                               <log
-                                       loggingLevel="INFO"
-                                       message="Processing all MICRO-SERVICES policies defined in loop ${header.LoopObject.getName()}" />
-                               <split>
-                                       <simple>${header.LoopObject.getMicroServicePolicies()}
-                                       </simple>
-                                       <setHeader headerName="microServicePolicy">
-                                               <simple>${body}</simple>
-                                       </setHeader>
+                               <doTry>
                                        <log
                                                loggingLevel="INFO"
-                                               message="Processing Micro Service Policy: ${header.microServicePolicy.getName()}" />
+                                               message="Receive SUBMIT request for loop: ${header.loopName}" />
+                               <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Submit the closed loop')" />     
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <to uri="direct:load-loop" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Receive SUBMIT request','INFO',${header.LoopObject})" />
                                        <setHeader headerName="RaiseHttpExceptionFlag">
                                                <simple resultType="java.lang.Boolean">false</simple>
                                        </setHeader>
-                                       <to uri="direct:delete-micro-service-policy" />
-
-                                       <to uri="direct:create-micro-service-policy" />
-                               </split>
+                                       
+                                       <doTry> 
+                                               <to uri="direct:remove-all-policy-from-active-pdp-group" />
+                                               <doCatch>
+                                       <exception>java.lang.Exception</exception>
+                                       <handled>
+                                               <constant>false</constant>
+                                       </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                       </doCatch>
+                                       </doTry>
 
-                               <log
-                                       loggingLevel="INFO"
-                                       message="Processing all OPERATIONAL policies defined in loop ${header.LoopObject.getName()}" />
-                               <split>
-                                       <simple>${header.LoopObject.getOperationalPolicies()}
-                                       </simple>
-                                       <setHeader headerName="operationalPolicy">
-                                               <simple>${body}</simple>
-                                       </setHeader>
                                        <log
                                                loggingLevel="INFO"
-                                               message="Processing Operational Policy: ${header.operationalPolicy.getName()}" />
-                                       <setHeader headerName="RaiseHttpExceptionFlag">
-                                               <simple resultType="java.lang.Boolean">false</simple>
-                                       </setHeader>
-                                       <to uri="direct:delete-operational-policy" />
+                                               message="Processing all MICRO-SERVICES policies defined in loop ${header.LoopObject.getName()}" />
+                                       <split>
+                                               <simple>${header.LoopObject.getMicroServicePolicies()}
+                                               </simple>
+                                               <setHeader headerName="microServicePolicy">
+                                                       <simple>${body}</simple>
+                                               </setHeader>
+                                               <log
+                                                       loggingLevel="INFO"
+                                                       message="Processing Micro Service Policy: ${header.microServicePolicy.getName()}" />
+                                               <setHeader headerName="RaiseHttpExceptionFlag">
+                                                       <simple resultType="java.lang.Boolean">false</simple>
+                                               </setHeader>
+
+                                               <doTry> 
+                                                       <to uri="direct:delete-micro-service-policy" />
+                                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                       <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                               </doCatch>
+                                               </doTry>
 
-                                       <to uri="direct:create-operational-policy" />
+                                               <doTry> 
+                                                       <to uri="direct:create-micro-service-policy" />
+                                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                       <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                               </doCatch>
+                                               </doTry>
+                                               
+                                       </split>
                                        <log
                                                loggingLevel="INFO"
-                                               message="Processing all GUARD policies defined in loop ${header.LoopObject.getName()}" />
+                                               message="Processing all OPERATIONAL policies defined in loop ${header.LoopObject.getName()}" />
                                        <split>
-                                               <simple>${header.operationalPolicy.createGuardPolicyPayloads().entrySet()}
+                                               <simple>${header.LoopObject.getOperationalPolicies()}
                                                </simple>
-                                               <setHeader headerName="guardPolicy">
+                                               <setHeader headerName="operationalPolicy">
                                                        <simple>${body}</simple>
                                                </setHeader>
                                                <log
                                                        loggingLevel="INFO"
-                                                       message="Processing Guard Policy: ${header.guardPolicy.getKey()}" />
-
+                                                       message="Processing Operational Policy: ${header.operationalPolicy.getName()}" />
                                                <setHeader headerName="RaiseHttpExceptionFlag">
                                                        <simple resultType="java.lang.Boolean">false</simple>
-                                               </setHeader>
-                                               <to uri="direct:delete-guard-policy" />
+                                               </setHeader>    
+
+                                               <doTry> 
+                                                       <to uri="direct:delete-operational-policy" />
+                                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                       <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                               </doCatch>
+                                               </doTry>
+
+                                               <doTry> 
+                                                       <to uri="direct:create-operational-policy" />
+                                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                       <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                               </doCatch>
+                                               </doTry>
+
+                                               
+                                               <log
+                                                       loggingLevel="INFO"
+                                                       message="Processing all GUARD policies defined in loop ${header.LoopObject.getName()}" />
+                                               <split>
+                                                       <simple>${header.operationalPolicy.createGuardPolicyPayloads().entrySet()}
+                                                       </simple>
+                                                       <setHeader headerName="guardPolicy">
+                                                               <simple>${body}</simple>
+                                                       </setHeader>
+                                                       <log
+                                                               loggingLevel="INFO"
+                                                               message="Processing Guard Policy: ${header.guardPolicy.getKey()}" />
+
+                                                       <setHeader headerName="RaiseHttpExceptionFlag">
+                                                               <simple resultType="java.lang.Boolean">false</simple>
+                                                       </setHeader>
+                                                       
+                                                       <doTry> 
+                                                               <to uri="direct:delete-guard-policy" />
+                                                               <doCatch>
+                                                       <exception>java.lang.Exception</exception>
+                                                       <handled>
+                                                               <constant>false</constant>
+                                                       </handled>
+                                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                                       </doCatch>
+                                                       </doTry>
 
-                                               <to uri="direct:create-guard-policy" />
+                                                       <doTry> 
+                                                               <to uri="direct:create-guard-policy" />
+                                                               <doCatch>
+                                                       <exception>java.lang.Exception</exception>
+                                                       <handled>
+                                                               <constant>false</constant>
+                                                       </handled>
+                                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                                       </doCatch>
+                                                       </doTry>
+
+                                               </split>
                                        </split>
-                               </split>
-                               <to uri="direct:add-all-to-active-pdp-group" />
+                                       
+                                       
+                                       <doTry> 
+                                               <to uri="direct:add-all-to-active-pdp-group" />
+                                               <doCatch>
+                                       <exception>java.lang.Exception</exception>
+                                       <handled>
+                                               <constant>false</constant>
+                                       </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                       </doCatch>
+                                       </doTry>
+                                       
+
 
-                               <log
-                                       loggingLevel="INFO"
-                                       message="SUBMIT request successfully executed for loop: ${body}" />
-                               <to
-                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('SUBMIT request successfully executed','INFO',${header.LoopObject})" />
-                               <to
-                                       uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="SUBMIT request successfully executed for loop: ${body}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('SUBMIT request successfully executed','INFO',${header.LoopObject})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                               <doCatch>
+                               <exception>java.lang.Exception</exception>
+                               <handled>
+                                       <constant>false</constant>
+                               </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                               </doCatch>
+                       </doTry>
                        </route>
                </put>
                <put uri="/v2/loop/delete/{loopName}">
                        <route>
-                               <log
-                                       loggingLevel="INFO"
-                                       message="Receive DELETE request for loop: ${header.loopName}" />
-                               <to
-                                       uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
-                               <to uri="direct:load-loop" />
-                               <to
-                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Receive DELETE request','INFO',${header.LoopObject})" />
-                               <to uri="direct:remove-all-policy-from-active-pdp-group" />
-                               <split>
-                                       <simple>${header.LoopObject.getMicroServicePolicies()}
-                                       </simple>
-                                       <setHeader headerName="microServicePolicy">
-                                               <simple>${body}</simple>
-                                       </setHeader>
+                               <doTry>
                                        <log
                                                loggingLevel="INFO"
-                                               message="Processing Micro Service Policy: ${header.microServicePolicy.getName()}" />
+                                               message="Receive DELETE request for loop: ${header.loopName}" />
+                               <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog('Delete the closed loop')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <to uri="direct:load-loop" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Receive DELETE request','INFO',${header.LoopObject})" />
 
-                                       <to uri="direct:delete-micro-service-policy" />
-                               </split>
+                                       <doTry> 
+                                               <to uri="direct:remove-all-policy-from-active-pdp-group" />
+                                               <doCatch>
+                                       <exception>java.lang.Exception</exception>
+                                       <handled>
+                                               <constant>false</constant>
+                                       </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                       </doCatch>
+                                       </doTry>
 
-                               <log
-                                       loggingLevel="INFO"
-                                       message="Processing all OPERATIONAL policies defined in loop ${header.LoopObject.getName()}" />
-                               <split>
-                                       <simple>${header.LoopObject.getOperationalPolicies()}
-                                       </simple>
-                                       <setHeader headerName="operationalPolicy">
-                                               <simple>${body}</simple>
-                                       </setHeader>
-                                       <log
-                                               loggingLevel="INFO"
-                                               message="Processing Operational Policy: ${header.operationalPolicy.getName()}" />
+                                       
+                                       <split>
+                                               <simple>${header.LoopObject.getMicroServicePolicies()}
+                                               </simple>
+                                               <setHeader headerName="microServicePolicy">
+                                                       <simple>${body}</simple>
+                                               </setHeader>
+                                               <log
+                                                       loggingLevel="INFO"
+                                                       message="Processing Micro Service Policy: ${header.microServicePolicy.getName()}" />
+
+                                               <doTry> 
+                                                       <to uri="direct:delete-micro-service-policy" />
+                                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                       <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                               </doCatch>
+                                               </doTry>
+
+                                       </split>
 
-                                       <to uri="direct:delete-operational-policy" />
                                        <log
                                                loggingLevel="INFO"
-                                               message="Processing all GUARD policies defined in loop ${header.LoopObject.getName()}" />
+                                               message="Processing all OPERATIONAL policies defined in loop ${header.LoopObject.getName()}" />
                                        <split>
-                                               <simple>${header.operationalPolicy.createGuardPolicyPayloads().entrySet()}
+                                               <simple>${header.LoopObject.getOperationalPolicies()}
                                                </simple>
-                                               <setHeader headerName="guardPolicy">
+                                               <setHeader headerName="operationalPolicy">
                                                        <simple>${body}</simple>
                                                </setHeader>
                                                <log
                                                        loggingLevel="INFO"
-                                                       message="Processing Guard Policy: ${header.guardPolicy.getKey()}" />
+                                                       message="Processing Operational Policy: ${header.operationalPolicy.getName()}" />
+                                               
+                                               <doTry> 
+                                                       <to uri="direct:delete-operational-policy" />
+                                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                       <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                               </doCatch>
+                                               </doTry>
+
+                                               <log
+                                                       loggingLevel="INFO"
+                                                       message="Processing all GUARD policies defined in loop ${header.LoopObject.getName()}" />
+                                               <split>
+                                                       <simple>${header.operationalPolicy.createGuardPolicyPayloads().entrySet()}
+                                                       </simple>
+                                                       <setHeader headerName="guardPolicy">
+                                                               <simple>${body}</simple>
+                                                       </setHeader>
+                                                       <log
+                                                               loggingLevel="INFO"
+                                                               message="Processing Guard Policy: ${header.guardPolicy.getKey()}" />
 
-                                               <to uri="direct:delete-guard-policy" />
+                                                       <doTry> 
+                                                               <to uri="direct:delete-guard-policy" />
+                                                               <doCatch>
+                                                       <exception>java.lang.Exception</exception>
+                                                       <handled>
+                                                               <constant>false</constant>
+                                                       </handled>
+                                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                                       </doCatch>
+                                                       </doTry>
+
+                                               </split>
                                        </split>
-                               </split>
-                               <to
-                                       uri="bean:org.onap.clamp.loop.log.LoopService?method=deleteLoop(${header.loopName})" />
-                               <log
-                                       loggingLevel="INFO"
-                                       message="DELETE request successfully executed for loop: ${body}" />
-                               <to
-                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DELETE request successfully executed','INFO',${header.LoopObject})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopService?method=deleteLoop(${header.loopName})" />
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="DELETE request successfully executed for loop: ${body}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DELETE request successfully executed','INFO',${header.LoopObject})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                               <doCatch>
+                               <exception>java.lang.Exception</exception>
+                               <handled>
+                                       <constant>false</constant>
+                               </handled>
+                               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                               </doCatch>
+                       </doTry>
                        </route>
                </put>
        </rest>
 </rests>
-
index 683737a..808e1d8 100644 (file)
                        <stop />
                </when>
        </route>
-
        <route id="create-micro-service-policy">
                <from uri="direct:create-micro-service-policy" />
                
                <log
                        loggingLevel="INFO"
                        message="Creating Micro Service Policy: ${header.microServicePolicy.getName()}" />
+               <to
+                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Micro Service Policy')" />
                <setBody>
                        <simple>${header.microServicePolicy.createPolicyPayload()}
                        </simple>
                        <simple>{{clamp.config.policy.url}}/policy/api/v1/policyTypes/${header.microServicePolicy.getModelType()}/versions/1.0.0/policies
                        </simple>
                </setHeader>
+               <setHeader headerName="X-ONAP-RequestID">
+                       <simple>${header.X-ONAP-REAUESTID}
+                       </simple>
+               </setHeader>
+               <setHeader headerName="X-ONAP-InvocationID">
+                       <simple>${header.X-ONAP-InvocationID}
+                       </simple>
+               </setHeader>
+               <setHeader headerName="X-ONAP-PartnerName">
+                       <simple>${header.X-ONAP-PartnerName}
+                       </simple>
+               </setHeader>
                <log
                        loggingLevel="INFO"
                        message="Endpoint to create microservice policy: ${header.CamelHttpMethod} ${header.CamelHttpUri}"></log>
                <to
                        uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('MicroService policy created successfully','INFO',${header.LoopObject})" />
                <to uri="direct:reset-raise-http-exception-flag" />
+       <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        </route>
        <route id="delete-micro-service-policy">
                <from uri="direct:delete-micro-service-policy" />
                <log
                        loggingLevel="INFO"
                        message="Deleting Micro Service Policy: ${header.microServicePolicy.getName()}" />
+               <to
+                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Micro Service Policy')" />
                <setBody>
                        <constant>null</constant>
                </setBody>
                        <simple>{{clamp.config.policy.url}}/policy/api/v1/policyTypes/${header.microServicePolicy.getModelType()}/versions/1.0.0/policies/${header.microServicePolicy.getName()}
                        </simple>
                </setHeader>
+               <setHeader headerName="X-ONAP-RequestID">
+                       <simple>${header.X-ONAP-REAUESTID}
+                       </simple>
+               </setHeader>
+               <setHeader headerName="X-ONAP-InvocationID">
+                       <simple>${header.X-ONAP-InvocationID}
+                       </simple>
+               </setHeader>
+               <setHeader headerName="X-ONAP-PartnerName">
+                       <simple>${header.X-ONAP-PartnerName}
+                       </simple>
+               </setHeader>
                <log
                        loggingLevel="INFO"
                        message="Endpoint to delete microservice policy: ${header.CamelHttpMethod} ${header.CamelHttpUri}"></log>
                <to
                        uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('MicroService policy deleted successfully','INFO',${header.LoopObject})" />
                <to uri="direct:reset-raise-http-exception-flag" />
+               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        </route>
 
        <route id="create-operational-policy">
                <log
                        loggingLevel="INFO"
                        message="Creating Operational Policy: ${header.operationalPolicy.getName()}" />
+               <to
+                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Operational Policy')" />
                <setBody>
                        <simple>${header.operationalPolicy.createPolicyPayload()}
                        </simple>
                        <simple>{{clamp.config.policy.url}}/policy/api/v1/policyTypes/onap.policies.controloop.operational/versions/1.0.0/policies
                        </simple>
                </setHeader>
+               <setHeader headerName="X-ONAP-RequestID">
+                       <simple>${header.X-ONAP-REAUESTID}
+                       </simple>
+               </setHeader>
+               <setHeader headerName="X-ONAP-InvocationID">
+                       <simple>${header.X-ONAP-InvocationID}
+                       </simple>
+               </setHeader>
+               <setHeader headerName="X-ONAP-PartnerName">
+                       <simple>${header.X-ONAP-PartnerName}
+                       </simple>
+               </setHeader>
                <log
                        loggingLevel="INFO"
                        message="Endpoint to create operational policy: ${header.CamelHttpMethod} ${header.CamelHttpUri}"></log>
                <to
                        uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Operational policy created successfully','INFO',${header.LoopObject})" />
                <to uri="direct:reset-raise-http-exception-flag" />
+               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        </route>
        <route id="delete-operational-policy">
                <from uri="direct:delete-operational-policy" />
                <log
                        loggingLevel="INFO"
                        message="Deleting Operational Policy: ${header.operationalPolicy.getName()}" />
+               <to
+                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Operational Policy')" />
                <setBody>
                        <constant>null</constant>
                </setBody>
                        <simple>{{clamp.config.policy.url}}/policy/api/v1/policyTypes/onap.policies.controloop.operational/versions/1.0.0/policies/${header.operationalPolicy.getName()}
                        </simple>
                </setHeader>
+               <setHeader headerName="X-ONAP-RequestID">
+                       <simple>${header.X-ONAP-REAUESTID}
+                       </simple>
+               </setHeader>
+               <setHeader headerName="X-ONAP-InvocationID">
+                       <simple>${header.X-ONAP-InvocationID}
+                       </simple>
+               </setHeader>
+               <setHeader headerName="X-ONAP-PartnerName">
+                       <simple>${header.X-ONAP-PartnerName}
+                       </simple>
+               </setHeader>
                <log
                        loggingLevel="INFO"
                        message="Endpoint to delete operational policy: ${header.CamelHttpMethod} ${header.CamelHttpUri}"></log>
                <to
                        uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Operational policy deleted successfully','INFO',${header.LoopObject})" />
                <to uri="direct:reset-raise-http-exception-flag" />
+               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        </route>
 
        <route id="create-guard-policy">
                <log
                        loggingLevel="INFO"
                        message="Creating Guard Policy: ${header.guardPolicy.getKey()}" />
+               <to
+                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Guard Policy')" />
                <setBody>
                        <simple>${header.guardPolicy.getValue()}
                        </simple>
                        <simple>{{clamp.config.policy.url}}/policy/api/v1/policyTypes/onap.policies.controlloop.Guard/versions/1.0.0/policies
                        </simple>
                </setHeader>
+               <setHeader headerName="X-ONAP-RequestID">
+                       <simple>${header.X-ONAP-REAUESTID}
+                       </simple>
+               </setHeader>
+               <setHeader headerName="X-ONAP-InvocationID">
+                       <simple>${header.X-ONAP-InvocationID}
+                       </simple>
+               </setHeader>
+               <setHeader headerName="X-ONAP-PartnerName">
+                       <simple>${header.X-ONAP-PartnerName}
+                       </simple>
+               </setHeader>
                <log
                        loggingLevel="INFO"
                        message="Endpoint to create guard policy: ${header.CamelHttpMethod} ${header.CamelHttpUri}"></log>
                <to
                        uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Guard policy created successfully','INFO',${header.LoopObject})" />
                <to uri="direct:reset-raise-http-exception-flag" />
+               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        </route>
        <route id="delete-guard-policy">
                <from uri="direct:delete-guard-policy" />
                <log
                        loggingLevel="INFO"
                        message="Deleting Guard Policy: ${header.guardPolicy.getKey()}" />
+               <to
+                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Guard Policy')" />
                <setBody>
                        <constant>null</constant>
                </setBody>
                        <simple>{{clamp.config.policy.url}}/policy/api/v1/policyTypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/${header.guardPolicy.getKey()}
                        </simple>
                </setHeader>
+               <setHeader headerName="X-ONAP-RequestID">
+                       <simple>${header.X-ONAP-REAUESTID}
+                       </simple>
+               </setHeader>
+               <setHeader headerName="X-ONAP-InvocationID">
+                       <simple>${header.X-ONAP-InvocationID}
+                       </simple>
+               </setHeader>
+               <setHeader headerName="X-ONAP-PartnerName">
+                       <simple>${header.X-ONAP-PartnerName}
+                       </simple>
+               </setHeader>
                <log
                        loggingLevel="INFO"
                        message="Endpoint to delete guard policy: ${header.CamelHttpMethod} ${header.CamelHttpUri}"></log>
                <to
                        uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Guard policy deleted successfully','INFO',${header.LoopObject})" />
                <to uri="direct:reset-raise-http-exception-flag" />
+               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        </route>
        <route id="add-all-to-active-pdp-group">
                <from uri="direct:add-all-to-active-pdp-group" />
                <log
                        loggingLevel="INFO"
                        message="Adding loop policies to PDP Group: ${header.LoopObject.getName()}" />
+               <to
+                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Add policies to PDP group')" />
                <setBody>
                        <simple>${header.LoopObject.createPoliciesPayloadPdpGroup()}
                        </simple>
                        <simple>{{clamp.config.policy.url}}/policy/pap/v1/pdps
                        </simple>
                </setHeader>
+               <setHeader headerName="X-ONAP-RequestID">
+                       <simple>${header.X-ONAP-REAUESTID}
+                       </simple>
+               </setHeader>
+               <setHeader headerName="X-ONAP-InvocationID">
+                       <simple>${header.X-ONAP-InvocationID}
+                       </simple>
+               </setHeader>
+               <setHeader headerName="X-ONAP-PartnerName">
+                       <simple>${header.X-ONAP-PartnerName}
+                       </simple>
+               </setHeader>
                <log
                        loggingLevel="INFO"
                        message="Endpoint to add policies to PDP Group: ${header.CamelHttpMethod} ${header.CamelHttpUri}"></log>
                <to
                        uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Policies pushed to PDP Group successfully','INFO',${header.LoopObject})" />
                <to uri="direct:reset-raise-http-exception-flag" />
+               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        </route>
 
        <route id="remove-all-policy-from-active-pdp-group">
                <log
                        loggingLevel="INFO"
                        message="Removing policies from active PDP group for loop: ${header.LoopObject.getName()}" />
+               <to
+                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Removing policies PDP group')" />
                <split>
                        <simple>${header.LoopObject.listPolicyNamesPdpGroup()}</simple>
                        <setHeader headerName="PolicyName">
                                <simple>{{clamp.config.policy.url}}/pdps/policies/${header.PolicyName}/versions/1.0.0
                                </simple>
                        </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${header.X-ONAP-REAUESTID}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${header.X-ONAP-InvocationID}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${header.X-ONAP-PartnerName}
+                               </simple>
+                       </setHeader>
                        <log
                                loggingLevel="INFO"
                                message="Endpoint to delete policy from PDP Group: ${header.CamelHttpMethod} ${header.CamelHttpUri}"></log>
                                uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog(${header.PolicyName}' Policy removed from PDP Group successfully','INFO',${header.LoopObject})" />
                </split>
                <to uri="direct:reset-raise-http-exception-flag" />
+               <to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        </route>
-
        <route id="reset-raise-http-exception-flag">
                <from uri="direct:reset-raise-http-exception-flag" />
                <setHeader headerName="RaiseHttpExceptionFlag">
index c2524be..2eba127 100644 (file)
                <appender-ref ref="DEBUG" />
        </logger>
        <!-- CLDS related loggers -->
-       <logger name="org.onap.clamp.clds" level="INFO"
+       <logger name="org.onap.clamp" level="INFO"
                additivity="true">
                <appender-ref ref="ERROR" />
        </logger>