add polling rule task
[holmes/rule-management.git] / rulemgt / src / main / java / org / onap / holmes / rulemgt / dcae / DaceConfigurationPolling.java
1 /**
2  * Copyright 2017 ZTE Corporation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5  * in compliance with the License. You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software distributed under the License
10  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11  * or implied. See the License for the specific language governing permissions and limitations under
12  * the License.
13  */
14 package org.onap.holmes.rulemgt.dcae;
15
16 import com.fasterxml.jackson.core.JsonProcessingException;
17 import com.fasterxml.jackson.databind.ObjectMapper;
18 import java.util.List;
19 import javax.ws.rs.client.Client;
20 import javax.ws.rs.client.ClientBuilder;
21 import javax.ws.rs.client.Entity;
22 import javax.ws.rs.client.WebTarget;
23 import javax.ws.rs.core.MediaType;
24 import lombok.extern.slf4j.Slf4j;
25 import org.glassfish.jersey.client.ClientConfig;
26 import org.onap.holmes.common.config.MicroServiceConfig;
27 import org.onap.holmes.common.dcae.entity.DcaeConfigurations;
28 import org.onap.holmes.common.dcae.entity.Rule;
29 import org.onap.holmes.common.dcae.utils.DcaeConfigurationParser;
30 import org.onap.holmes.common.exception.CorrelationException;
31 import org.onap.holmes.rulemgt.bean.request.RuleCreateRequest;
32 import org.onap.holmes.rulemgt.bean.response.RuleQueryListResponse;
33 import org.onap.holmes.rulemgt.bean.response.RuleResult4API;
34
35 @Slf4j
36 public class DaceConfigurationPolling implements Runnable {
37
38     public static long POLLING_PERIOD = 10 * 1000;
39
40     private String hostname;
41
42     private String url = "http://127.0.0.1/api/holmes-rule-mgmt/v1/rule";
43
44     public DaceConfigurationPolling(String hostname) {
45         this.hostname = hostname;
46     }
47
48     @Override
49     public void run() {
50         DcaeConfigurations dcaeConfigurations = null;
51         try {
52             dcaeConfigurations = getDcaeConfigurations();
53         } catch (CorrelationException e) {
54             log.error("Failed to polling dcae configurations" + e.getMessage());
55         }
56         if (dcaeConfigurations != null) {
57             RuleQueryListResponse ruleQueryListResponse = getAllCorrelationRules();
58             List<RuleResult4API> ruleResult4APIs = ruleQueryListResponse.getCorrelationRules();
59             deleteAllCorrelationRules(ruleResult4APIs);
60             try {
61                 addAllCorrelationRules(dcaeConfigurations);
62             } catch (CorrelationException e) {
63                 log.error("Failed to add rules" + e.getMessage());
64             }
65         }
66     }
67
68     private DcaeConfigurations getDcaeConfigurations() throws CorrelationException {
69         String serviceAddrInfo = MicroServiceConfig.getServiceAddrInfoFromCBS(hostname);
70         DcaeConfigurations dcaeConfigurations = null;
71         dcaeConfigurations = DcaeConfigurationParser.parse(serviceAddrInfo);
72         return dcaeConfigurations;
73     }
74
75     private RuleQueryListResponse getAllCorrelationRules() {
76         Client client = ClientBuilder.newClient(new ClientConfig());
77         WebTarget webTarget = client.target(url);
78         return webTarget.request("application/json").get()
79                 .readEntity(RuleQueryListResponse.class);
80     }
81
82     private void addAllCorrelationRules(DcaeConfigurations dcaeConfigurations) throws CorrelationException {
83         for (Rule rule : dcaeConfigurations.getDefaultRules()) {
84             RuleCreateRequest ruleCreateRequest = getRuleCreateRequest(rule);
85             Client client = ClientBuilder.newClient(new ClientConfig());
86             ObjectMapper mapper = new ObjectMapper();
87             String content = null;
88             try {
89                 content = mapper.writeValueAsString(ruleCreateRequest);
90             } catch (JsonProcessingException e) {
91                 throw new CorrelationException("Failed to convert the message object to a json string.", e);
92             }
93             WebTarget webTarget = client.target(url);
94             webTarget.request(MediaType.APPLICATION_JSON)
95                     .put(Entity.entity(content, MediaType.APPLICATION_JSON));
96         }
97     }
98
99     private void deleteAllCorrelationRules(List<RuleResult4API> ruleResult4APIs){
100         ruleResult4APIs.forEach(correlationRule ->{
101             Client client = ClientBuilder.newClient(new ClientConfig());
102             WebTarget webTarget = client.target(url + "/" + correlationRule.getRuleId());
103             webTarget.request(MediaType.APPLICATION_JSON).delete();
104         });
105     }
106
107     private RuleCreateRequest getRuleCreateRequest(Rule rule) {
108         RuleCreateRequest ruleCreateRequest = new RuleCreateRequest();
109         ruleCreateRequest.setRuleName(rule.getName());
110         ruleCreateRequest.setContent(rule.getContents());
111         ruleCreateRequest.setDescription("");
112         ruleCreateRequest.setEnabled(1);
113         return ruleCreateRequest;
114     }
115 }