Catalog notification port 57/49257/2
authorayalaben <ayala.benzvi@amdocs.com>
Sun, 27 May 2018 10:54:38 +0000 (13:54 +0300)
committerAvi Gaffa <avi.gaffa@amdocs.com>
Tue, 29 May 2018 06:31:15 +0000 (06:31 +0000)
Change-Id: I714ac047c98551ddf29ca509811265bfd7c66f24
Issue-ID: SDC-1257
Signed-off-by: ayalaben <ayala.benzvi@amdocs.com>
openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/services/CatalogNotifier.java
openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/services/ItemsImpl.java

index f19de3d..4f2b7ae 100644 (file)
@@ -30,6 +30,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpPost;
@@ -44,15 +45,18 @@ import org.openecomp.sdc.logging.api.LoggerFactory;
 import org.openecomp.sdc.logging.api.LoggingContext;
 import org.openecomp.sdcrests.item.types.ItemAction;
 
-public class CatalogNotifier {
+ class CatalogNotifier {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(CatalogNotifier.class);
 
     private static final String USER_ID_HEADER_PARAM = "USER_ID";
     private static final String CONFIG_FILE = "configuration.yaml";
     private static final String PROTOCOL_KEY = "beProtocol";
+    private static final String HTTP_PROTOCOL = "http|HTTP";
+    private static final String HTTPS_PROTOCOL = "https|HTTPS";
     private static final String HOST_KEY = "beFqdn";
-    private static final String PORT_KEY = "beHttpPort";
+    private static final String HTTP_PORT_KEY = "beHttpPort";
+    private static final String HTTPS_PORT_KEY = "beSslPort";
     private static final String URL_KEY = "onboardCatalogNotificationUrl";
     private static final String URL_DEFAULT_FORMAT = "%s://%s:%s/sdc2/rest/v1/catalog/notif/vsp/";
 
@@ -60,7 +64,6 @@ public class CatalogNotifier {
     private static String notifyCatalogUrl;
 
     private static ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
-    private static boolean executeNotificationFlag = true;
 
 
     static {
@@ -75,11 +78,17 @@ public class CatalogNotifier {
             configurationMap = readFromFile(configurationYamlFile, reader);
             Object protocol = configurationMap.get(PROTOCOL_KEY);
             Object host = configurationMap.get(HOST_KEY);
-            Object port = configurationMap.get(PORT_KEY);
 
-            if (protocol == null || host == null || port == null) {
-                LOGGER.error("Could not read configuration file configuration.yaml");
-                executeNotificationFlag = false;
+            if (protocol == null || host == null) {
+                throw new ExceptionInInitializerError("Could not read configuration file configuration.yaml.");
+            }
+
+            Object port = null;
+            if (String.valueOf(protocol).matches(HTTP_PROTOCOL)) {
+                port = configurationMap.get(HTTP_PORT_KEY);
+            }
+            if (String.valueOf(protocol).matches(HTTPS_PROTOCOL)) {
+                port = configurationMap.get(HTTPS_PORT_KEY);
             }
 
             if (configurationMap.get(URL_KEY) != null) {
@@ -93,22 +102,20 @@ public class CatalogNotifier {
             }
 
         } catch (Exception e) {
-           LOGGER.error("Could not read configuration file configuration.yaml");
-           executeNotificationFlag = false;
+            throw new ExceptionInInitializerError(
+                    "Could not read configuration file configuration.yaml. Error: " + e.getMessage());
+
         }
     }
 
 
     public void execute(Collection<String> itemIds, ItemAction action, int numOfRetries) {
 
-        if (executeNotificationFlag) {
-
-            String userId = SessionContextProviderFactory.getInstance().createInterface().get().getUser().getUserId();
+        String userId = SessionContextProviderFactory.getInstance().createInterface().get().getUser().getUserId();
 
-            Callable callable = createCallable(JsonUtil.object2Json(itemIds), action, numOfRetries, userId);
+        Callable callable = createCallable(JsonUtil.object2Json(itemIds), action, numOfRetries, userId);
 
-            executor.submit(callable);
-        }
+        executor.submit(callable);
 
     }
 
@@ -121,22 +128,22 @@ public class CatalogNotifier {
     private Void handleHttpRequest(String url, String itemIds, ItemAction action, String userId,
             int numOfRetries) {
 
-        try (CloseableHttpClient httpclient =  HttpClients.createDefault()) {
+        try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
             HttpPost request = createPostRequest(url, itemIds, userId);
             HttpResponse response = httpclient.execute(request);
-            LOGGER.error(
-                    String.format("Catalog notification on vspId - %s action  - %s. Response: %s", itemIds,
-                            action.name(), response.getStatusLine()));
+            LOGGER.debug(String.format("Catalog notification on vspId - %s action  - %s. Response: %s", itemIds,
+                    action.name(), response.getStatusLine()));
 
-            if (numOfRetries > 1 && response.getStatusLine().getStatusCode() == 500) {
+            if (numOfRetries > 1 && response.getStatusLine().getStatusCode() == Response.Status.INTERNAL_SERVER_ERROR
+                                                                                        .getStatusCode()) {
                 Callable callable =
                         createCallable(getFailedIds(itemIds, response.getEntity()), action, --numOfRetries, userId);
-                executor.schedule(callable, 5 , TimeUnit.SECONDS);
+                executor.schedule(callable, 5, TimeUnit.SECONDS);
             }
 
         } catch (Exception e) {
-            LOGGER.error(String.format("Catalog notification on vspId - %s action  - %s FAILED. Error: %S",
-                    itemIds.toString(), action.name(), e.getMessage()));
+            LOGGER.error(String.format("Catalog notification on vspId - %s action  - %s FAILED. Error: %S", itemIds,
+                    action.name(), e.getMessage()));
         }
         return null;
     }
@@ -173,7 +180,7 @@ public class CatalogNotifier {
         } else if (action == ItemAction.RESTORE) {
             actionStr = "restored";
         }
-        LOGGER.error("Catalog notification on URL - " + notifyCatalogUrl + actionStr);
+        LOGGER.debug("Catalog notification URL - " + notifyCatalogUrl + actionStr);
         return notifyCatalogUrl + actionStr;
     }
 
index 359662a..afdac0a 100644 (file)
@@ -86,7 +86,7 @@ public class ItemsImpl implements Items {
     private NotificationPropagationManager notifier =
             NotificationPropagationManagerFactory.getInstance().createInterface();
 
-    private CatalogNotifier catalogNotifier = new CatalogNotifier();
+
 
     private Map<ItemAction, ActionSideAffects> actionSideAffectsMap = new EnumMap<>(ItemAction.class);
 
@@ -120,7 +120,12 @@ public class ItemsImpl implements Items {
         }
 
         actionSideAffectsMap.get(request.getAction()).execute(item, user);
-        catalogNotifier.execute(Collections.singleton(itemId),request.getAction(),2);
+        try {
+            CatalogNotifier catalogNotifier = new CatalogNotifier();
+            catalogNotifier.execute(Collections.singleton(itemId), request.getAction(), 2);
+        } catch (Exception e){
+            LOGGER.error("Failed to send catalog notification on item " + itemId + " Error: " + e.getMessage());
+        }
 
         return Response.ok().build();
     }