Merge "update scheduled tasks to have mdc setup"
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/CatalogDBApplication.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/CatalogDBApplication.java
index 6fb65ca..e5b51f7 100644
--- a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/CatalogDBApplication.java
+++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/CatalogDBApplication.java
@@ -28,7 +28,7 @@
 
 @SpringBootApplication(scanBasePackages = {"org.onap.so.adapters.catalogdb", "org.onap.so.db.catalog.client",
         "org.onap.so.logging.jaxrs.filter", "org.onap.so.logging.spring.interceptor", "org.onap.so.client",
-        "org.onap.so.configuration", "org.onap.so.db", "org.onap.logging.filter"})
+        "org.onap.so.configuration", "org.onap.so.db", "org.onap.logging.filter", "org.onap.so.logger"})
 @EnableJpaRepositories("org.onap.so.db.catalog.data.repository")
 @EntityScan("org.onap.so.db.catalog.beans")
 @EnableScheduling
diff --git a/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/ArchiveInfraRequestsScheduler.java b/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/ArchiveInfraRequestsScheduler.java
index 8c4150c..4ec4cc7 100644
--- a/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/ArchiveInfraRequestsScheduler.java
+++ b/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/ArchiveInfraRequestsScheduler.java
@@ -27,15 +27,19 @@
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
-import org.onap.so.logger.LoggingAnchor;
+import org.onap.logging.filter.base.ONAPComponents;
+import org.onap.logging.ref.slf4j.ONAPLogConstants;
 import org.onap.so.db.request.beans.ArchivedInfraRequests;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.data.repository.ArchivedInfraRequestsRepository;
 import org.onap.so.db.request.data.repository.InfraActiveRequestsRepository;
 import org.onap.so.logger.ErrorCode;
+import org.onap.so.logger.LoggingAnchor;
 import org.onap.so.logger.MessageEnum;
+import org.onap.so.logger.ScheduledTasksMDCSetup;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.domain.PageRequest;
@@ -52,6 +56,9 @@
     private InfraActiveRequestsRepository infraActiveRepo;
     @Autowired
     private ArchivedInfraRequestsRepository archivedInfraRepo;
+    @Autowired
+    private ScheduledTasksMDCSetup scheduledMDCSetup;
+
 
     @Value("${mso.infra-requests.archived.period}")
     private int archivedPeriod;
@@ -62,6 +69,7 @@
     @Scheduled(cron = "0 0 1 * * ?")
     @SchedulerLock(name = "archiveInfraRequestsScheduler")
     public void infraRequestsScheduledTask() {
+        scheduledMDCSetup.mdcSetup(ONAPComponents.REQUEST_DB, "infraRequestsScheduledTask");
         logger.debug("Start of archiveInfraRequestsScheduler");
 
         Date currentDate = new Date();
@@ -89,6 +97,7 @@
         } while (!requestsByStartTime.isEmpty());
 
         logger.debug("End of archiveInfraRequestsScheduler");
+        scheduledMDCSetup.exitAndClearMDC();
     }
 
     protected void archiveInfraRequests(List<InfraActiveRequests> requests) {
@@ -146,6 +155,8 @@
                 newArchivedReqs.add(archivedInfra);
                 oldInfraReqs.add(iar);
             } catch (Exception e) {
+                scheduledMDCSetup.errorMDCSetup(ErrorCode.UnknownError, e.getMessage());
+                MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, ONAPLogConstants.ResponseStatus.ERROR.toString());
                 logger.error(LoggingAnchor.TWO, MessageEnum.RA_GENERAL_EXCEPTION.toString(),
                         ErrorCode.UnknownError.getValue(), e);
             }
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/ASDCControllerSingleton.java b/asdc-controller/src/main/java/org/onap/so/asdc/ASDCControllerSingleton.java
index e00bb1e..ecffb68 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/ASDCControllerSingleton.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/ASDCControllerSingleton.java
@@ -22,16 +22,21 @@
 
 package org.onap.so.asdc;
 
+import java.security.SecureRandom;
 import javax.annotation.PreDestroy;
+import org.onap.logging.ref.slf4j.ONAPLogConstants;
 import org.onap.so.asdc.client.ASDCController;
 import org.onap.so.asdc.client.exceptions.ASDCControllerException;
+import org.onap.so.logger.ErrorCode;
+import org.onap.so.logger.ScheduledTasksMDCSetup;
+import org.onap.so.utils.Components;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Profile;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
-import java.security.SecureRandom;
 
 
 @Component
@@ -42,12 +47,16 @@
     private final ASDCController asdcController;
 
     @Autowired
+    private ScheduledTasksMDCSetup scheduledMDCSetup;
+
+    @Autowired
     public ASDCControllerSingleton(final ASDCController asdcController) {
         this.asdcController = asdcController;
     }
 
     @Scheduled(fixedRate = 50000)
     public void periodicControllerTask() {
+        scheduledMDCSetup.mdcSetup(Components.ASDC_CONTROLLER, "periodicControllerTask");
         try {
             final int randomNumber = new SecureRandom().nextInt(Integer.MAX_VALUE);
             asdcController.setControllerName("mso-controller" + randomNumber);
@@ -57,8 +66,11 @@
                 asdcController.initASDC();
             }
         } catch (final ASDCControllerException controllerException) {
+            scheduledMDCSetup.errorMDCSetup(ErrorCode.UnknownError, controllerException.getMessage());
+            MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, ONAPLogConstants.ResponseStatus.ERROR.toString());
             logger.error("Exception occurred", controllerException);
         }
+        scheduledMDCSetup.exitAndClearMDC();
     }
 
     @PreDestroy
diff --git a/common/src/main/java/org/onap/so/db/connections/ScheduledDnsLookup.java b/common/src/main/java/org/onap/so/db/connections/ScheduledDnsLookup.java
index 14f2f5e..40acac5 100644
--- a/common/src/main/java/org/onap/so/db/connections/ScheduledDnsLookup.java
+++ b/common/src/main/java/org/onap/so/db/connections/ScheduledDnsLookup.java
@@ -8,6 +8,11 @@
 import javax.management.MBeanServer;
 import javax.management.ObjectInstance;
 import javax.management.ObjectName;
+import org.jboss.logging.MDC;
+import org.onap.logging.filter.base.ONAPComponents;
+import org.onap.logging.ref.slf4j.ONAPLogConstants;
+import org.onap.so.logger.ErrorCode;
+import org.onap.so.logger.ScheduledTasksMDCSetup;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,16 +32,22 @@
     @Autowired
     private DbDnsIpAddress dnsIpAddress;
 
+    @Autowired
+    private ScheduledTasksMDCSetup scheduledMDCSetup;
+
     private static Logger logger = LoggerFactory.getLogger(ScheduledDnsLookup.class);
 
     @Scheduled(fixedRate = 15000)
     public void performDnsLookup() {
-
+        scheduledMDCSetup.mdcSetup(ONAPComponents.SO, "performDnsLookup");
         String dnsUrl = System.getenv(DB_HOST);
 
         try {
             if (dnsUrl == null) {
+                scheduledMDCSetup.errorMDCSetup(ErrorCode.DataError, "Database DNS is not provided.");
                 logger.error("Database DNS is not provided. Please verify the configuration");
+                MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, ONAPLogConstants.ResponseStatus.ERROR.toString());
+                scheduledMDCSetup.exitAndClearMDC();
                 return;
             }
 
@@ -46,6 +57,7 @@
             /* This is in initial state */
             if (currentIpAddress == null) {
                 dnsIpAddress.setIpAddress(ipAddress);
+                scheduledMDCSetup.exitAndClearMDC();
                 return;
             }
 
@@ -57,7 +69,7 @@
         } catch (UnknownHostException e) {
             logger.warn("Database DNS %s is not resolvable to an IP Address", dnsUrl);
         }
-
+        scheduledMDCSetup.exitAndClearMDC();
     }
 
     private void softEvictConnectionPool() {
diff --git a/common/src/main/java/org/onap/so/logger/ScheduledTasksMDCSetup.java b/common/src/main/java/org/onap/so/logger/ScheduledTasksMDCSetup.java
new file mode 100644
index 0000000..6a20932
--- /dev/null
+++ b/common/src/main/java/org/onap/so/logger/ScheduledTasksMDCSetup.java
@@ -0,0 +1,75 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * 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.so.logger;
+
+import java.util.UUID;
+import org.onap.logging.filter.base.Constants;
+import org.onap.logging.filter.base.MDCSetup;
+import org.onap.logging.filter.base.ONAPComponentsList;
+import org.onap.logging.ref.slf4j.ONAPLogConstants;
+import org.slf4j.MDC;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ScheduledTasksMDCSetup extends MDCSetup {
+
+    public void mdcSetup(ONAPComponentsList targetEntity, String serviceName) {
+        try {
+            setEntryTimeStamp();
+            setServerFQDN();
+            MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, ONAPLogConstants.ResponseStatus.INPROGRESS.toString());
+            MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, UUID.randomUUID().toString());
+            MDC.put(ONAPLogConstants.MDCs.TARGET_ENTITY, targetEntity.toString());
+            MDC.put(ONAPLogConstants.MDCs.TARGET_SERVICE_NAME, Constants.DefaultValues.UNKNOWN);
+            MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, serviceName);
+            setLogTimestamp();
+            setElapsedTime();
+            MDC.put(ONAPLogConstants.MDCs.PARTNER_NAME, getProperty(Constants.Property.PARTNER_NAME));
+            logger.info(ONAPLogConstants.Markers.ENTRY, "Entering");
+        } catch (Exception e) {
+            logger.warn("Error in ScheduledTasksMDCSetup mdcSetup: {}", e.getMessage());
+        }
+    }
+
+    public void errorMDCSetup(ErrorCode errorCode, String errorDescription) {
+        MDC.put(ONAPLogConstants.MDCs.ERROR_CODE, errorCode.toString());
+        MDC.put(ONAPLogConstants.MDCs.ERROR_DESC, errorDescription);
+    }
+
+    public void exitAndClearMDC() {
+        try {
+            setStatusCode();
+            setLogTimestamp();
+            setElapsedTime();
+            logger.info(ONAPLogConstants.Markers.EXIT, "Exiting.");
+        } catch (Exception e) {
+            logger.warn("Error in ScheduledTasksMDCSetup clear MDC: {}", e.getMessage());
+        }
+        MDC.clear();
+    }
+
+    public void setStatusCode() {
+        String currentStatusCode = MDC.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE);
+        if (currentStatusCode == null || !currentStatusCode.equals(ONAPLogConstants.ResponseStatus.ERROR.toString())) {
+            MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, ONAPLogConstants.ResponseStatus.COMPLETE.toString());
+        }
+    }
+}
diff --git a/common/src/main/java/org/onap/so/utils/Components.java b/common/src/main/java/org/onap/so/utils/Components.java
index 0713723..d8d703a 100644
--- a/common/src/main/java/org/onap/so/utils/Components.java
+++ b/common/src/main/java/org/onap/so/utils/Components.java
@@ -1,7 +1,22 @@
 package org.onap.so.utils;
 
+import java.util.EnumSet;
+import java.util.Set;
+import org.onap.logging.filter.base.ONAPComponents;
 import org.onap.logging.filter.base.ONAPComponentsList;
 
 public enum Components implements ONAPComponentsList {
-    OPENSTACK, UNKNOWN;
+    OPENSTACK, UNKNOWN, ASDC_CONTROLLER, APIH;
+
+    public static Set<Components> getSOInternalComponents() {
+        return EnumSet.of(ASDC_CONTROLLER, APIH);
+    }
+
+    @Override
+    public String toString() {
+        if (getSOInternalComponents().contains(this))
+            return ONAPComponents.SO + "." + this.name();
+        else
+            return this.name();
+    }
 }
diff --git a/common/src/test/java/org/onap/so/logger/ScheduledTasksMDCSetupTest.java b/common/src/test/java/org/onap/so/logger/ScheduledTasksMDCSetupTest.java
new file mode 100644
index 0000000..8db611b
--- /dev/null
+++ b/common/src/test/java/org/onap/so/logger/ScheduledTasksMDCSetupTest.java
@@ -0,0 +1,83 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * 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.so.logger;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import org.junit.After;
+import org.junit.Test;
+import org.onap.logging.filter.base.Constants;
+import org.onap.logging.ref.slf4j.ONAPLogConstants;
+import org.onap.so.utils.Components;
+import org.onap.so.utils.UUIDChecker;
+import org.slf4j.MDC;
+
+public class ScheduledTasksMDCSetupTest {
+    private ScheduledTasksMDCSetup tasksMDCSetup = new ScheduledTasksMDCSetup();
+
+    @After
+    public void tearDown() {
+        MDC.clear();
+        System.clearProperty("partnerName");
+    }
+
+    @Test
+    public void mdcSetupTest() {
+        System.setProperty("partnerName", Components.APIH.toString());
+        tasksMDCSetup.mdcSetup(Components.APIH, "mdcSetupTest");
+
+        assertTrue(UUIDChecker.isValidUUID(MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)));
+        assertEquals(Components.APIH.toString(), MDC.get(ONAPLogConstants.MDCs.TARGET_ENTITY));
+        assertEquals(Components.APIH.toString(), MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME));
+        assertEquals("mdcSetupTest", MDC.get(ONAPLogConstants.MDCs.SERVICE_NAME));
+        assertEquals(Constants.DefaultValues.UNKNOWN, MDC.get(ONAPLogConstants.MDCs.TARGET_SERVICE_NAME));
+        assertNotNull(MDC.get(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP));
+        assertNotNull(MDC.get(ONAPLogConstants.MDCs.ELAPSED_TIME));
+        assertNotNull(MDC.get(ONAPLogConstants.MDCs.LOG_TIMESTAMP));
+        assertNotNull(MDC.get(ONAPLogConstants.MDCs.SERVER_FQDN));
+    }
+
+    @Test
+    public void errorMDCSetupTest() {
+        tasksMDCSetup.errorMDCSetup(ErrorCode.UnknownError, "Error");
+
+        assertEquals(ErrorCode.UnknownError.toString(), MDC.get(ONAPLogConstants.MDCs.ERROR_CODE));
+        assertEquals("Error", MDC.get(ONAPLogConstants.MDCs.ERROR_DESC));
+    }
+
+    @Test
+    public void setStatusCodeTest() {
+        tasksMDCSetup.setStatusCode();
+
+        assertEquals(ONAPLogConstants.ResponseStatus.COMPLETE.toString(),
+                MDC.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE));
+    }
+
+    @Test
+    public void setStatusCodeErrorTest() {
+        MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, ONAPLogConstants.ResponseStatus.ERROR.toString());
+        tasksMDCSetup.setStatusCode();
+
+        assertEquals(ONAPLogConstants.ResponseStatus.ERROR.toString(),
+                MDC.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE));
+    }
+}
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/JerseyConfiguration.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/JerseyConfiguration.java
index 271efdd..b7288e4 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/JerseyConfiguration.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/JerseyConfiguration.java
@@ -45,6 +45,7 @@
 import org.onap.so.apihandlerinfra.tenantisolation.CloudResourcesOrchestration;
 import org.onap.so.apihandlerinfra.tenantisolation.ModelDistributionRequest;
 import org.onap.so.logging.jaxrs.filter.SOAuditLogContainerFilter;
+import org.onap.so.utils.Components;
 import org.onap.so.web.exceptions.RuntimeExceptionMapper;
 import org.springframework.context.annotation.Configuration;
 import io.swagger.v3.jaxrs2.integration.JaxrsOpenApiContextBuilder;
@@ -61,7 +62,7 @@
 
     @PostConstruct
     public void setUp() {
-        System.setProperty(Constants.Property.PARTNER_NAME, "SO.APIH");
+        System.setProperty(Constants.Property.PARTNER_NAME, Components.APIH.toString());
         register(GlobalHealthcheckHandler.class);
         register(NodeHealthcheckHandler.class);
         register(ServiceInstances.class);