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