Divide the MSB source codes into two repos
[msb/apigateway.git] / apiroute / apiroute-service / src / main / java / org / onap / msb / apiroute / wrapper / consulextend / expose / CheckServiceDataEmptyAndAutoStopWatchFilter.java
1 package org.onap.msb.apiroute.wrapper.consulextend.expose;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import org.onap.msb.apiroute.SyncDataManager;
7 import org.onap.msb.apiroute.wrapper.consulextend.model.health.ImmutableService;
8 import org.onap.msb.apiroute.wrapper.consulextend.model.health.ImmutableServiceHealth;
9 import org.onap.msb.apiroute.wrapper.consulextend.model.health.Service;
10 import org.onap.msb.apiroute.wrapper.consulextend.model.health.ServiceHealth;
11 import org.onap.msb.apiroute.wrapper.queue.QueueManager;
12 import org.onap.msb.apiroute.wrapper.queue.ServiceData;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15
16 import com.orbitz.consul.model.ConsulResponse;
17 import com.orbitz.consul.model.health.ImmutableNode;
18
19
20
21 public class CheckServiceDataEmptyAndAutoStopWatchFilter implements
22                 WatchTask.Filter<List<ServiceHealth>> {
23
24         private final static Logger LOGGER = LoggerFactory
25                         .getLogger(CheckServiceDataEmptyAndAutoStopWatchFilter.class);
26         private final String serviceName;
27
28         public CheckServiceDataEmptyAndAutoStopWatchFilter(
29                         final String serviceName) {
30                 this.serviceName = serviceName;
31         }
32
33         @Override
34         public boolean filter(ConsulResponse<List<ServiceHealth>> object) {
35                 // TODO Auto-generated method stub
36                 boolean result = check(object);
37
38                 if (!result) {
39                         // create delete
40                         writeServiceToQueue4Del();
41                         // stop watch
42                         SyncDataManager.stopWatchService(serviceName);
43                 }
44
45                 return result;
46         }
47
48         // when:
49         // 1)service had been deleted
50         // 2)service Health check was not passing
51         // single service return [],size==0
52         // stop this service watching task and create delete event
53         private boolean check(ConsulResponse<List<ServiceHealth>> object) {
54                 boolean result = true;
55
56                 if (object == null || object.getResponse() == null
57                                 || object.getResponse().size() == 0) {
58                         LOGGER.info("check service-{},its data is empty",
59                                         serviceName);
60                         return false;
61                 }
62
63                 return result;
64         }
65
66         private void writeServiceToQueue4Del() {
67                 ServiceData<List<ServiceHealth>> data = new ServiceData<List<ServiceHealth>>();
68                 data.setDataType(ServiceData.DataType.service);
69                 data.setOperate(ServiceData.Operate.delete);
70                 
71                 // tell the subsequent operation the service name which will be deleted
72                 Service service = ImmutableService.builder().id("").port(0).address("")
73                                 .service(serviceName).addTags("").createIndex(0).modifyIndex(0).build();
74                 ServiceHealth serviceHealth = ImmutableServiceHealth.builder()
75                                 .service(service)
76                                 .node(ImmutableNode.builder().node("").address("").build())
77                                 .build();
78                 List<ServiceHealth> serviceHealthList = new ArrayList<ServiceHealth>();
79                 serviceHealthList.add(serviceHealth);
80
81                 data.setData(serviceHealthList);
82
83                 LOGGER.info("put delete service["
84                                 + serviceName
85                                 + "] to service queue :because of deleted ");
86
87                 try {
88                         QueueManager.getInstance().putIn(data);
89                 } catch (InterruptedException e) {
90                         // TODO Auto-generated catch block
91                         LOGGER.warn(
92                                         "put delete service["
93                                                         + serviceName
94                                                         + "]  to  service queue interrupted because of deleted:",
95                                         e);
96                 }
97         }
98 }