Plugin pubsub implementation
[sdc.git] / catalog-fe / src / main / java / org / openecomp / sdc / fe / impl / PluginStatusBL.java
1 package org.openecomp.sdc.fe.impl;
2
3 import java.io.IOException;
4 import java.util.ArrayList;
5 import java.util.List;
6
7 import org.apache.http.client.config.RequestConfig;
8 import org.apache.http.client.methods.CloseableHttpResponse;
9 import org.apache.http.client.methods.HttpHead;
10 import org.apache.http.impl.client.CloseableHttpClient;
11 import org.apache.http.impl.client.HttpClients;
12 import org.openecomp.sdc.fe.config.ConfigurationManager;
13 import org.openecomp.sdc.fe.config.PluginsConfiguration;
14 import org.openecomp.sdc.fe.config.PluginsConfiguration.Plugin;
15 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory;
17
18 import com.google.gson.Gson;
19 import com.google.gson.GsonBuilder;
20
21 public class PluginStatusBL {
22
23         private static Logger log = LoggerFactory.getLogger(PluginStatusBL.class.getName());
24         private static  Gson gson = new GsonBuilder().setPrettyPrinting().create();
25         private CloseableHttpClient client = null;
26         
27         public PluginStatusBL() {
28                 this.client = HttpClients.createDefault();
29         }
30         
31         public PluginStatusBL(CloseableHttpClient client) {
32                 this.client = client;
33                                 
34         }
35
36         public String checkPluginsListAvailability() {
37                 String result = null;
38
39                 PluginsConfiguration pluginsConfiguration = ConfigurationManager.getConfigurationManager()
40                                 .getPluginsConfiguration();
41
42                 if (pluginsConfiguration == null || pluginsConfiguration.getPluginsList() == null) {
43                         log.warn("Configuration of type {} was not found", PluginsConfiguration.class);
44                 } else {
45                         log.debug("The value returned from getConfig is {}", pluginsConfiguration);
46
47                         List<Plugin> availablePluginsList = new ArrayList<>();
48
49                         pluginsConfiguration.getPluginsList().forEach(value -> {
50                                 if (checkPluginAvailability(value)) {
51                                         availablePluginsList.add(value);
52                                 }
53
54                         });
55                         result = gson.toJson(availablePluginsList);
56                 }
57                 return result;
58         }
59
60         private boolean checkPluginAvailability(Plugin plugin) {
61                 boolean result = false;
62
63                 HttpHead head = new HttpHead(plugin.getPluginDiscoveryUrl());
64                 RequestConfig requestConfig = RequestConfig.custom()
65                                 .setSocketTimeout(1000)
66                                 .setConnectTimeout(1000)
67                                 .setConnectionRequestTimeout(1000).build();
68
69                 head.setConfig(requestConfig);
70
71                 try (CloseableHttpResponse response = this.client.execute(head)) {
72                         result = response != null && response.getStatusLine().getStatusCode() == 200;
73                 } catch (IOException e) {
74                         log.debug("The plugin {} is offline", plugin.getPluginId());
75                 }
76
77                 return result;
78         }
79
80 }