1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.bitrepository.monitoringservice;
23
24 import java.util.Map;
25 import javax.jms.JMSException;
26 import access.AccessComponentFactory;
27 import access.getstatus.GetStatusClient;
28 import org.bitrepository.common.settings.Settings;
29 import org.bitrepository.common.utils.SettingsUtils;
30 import org.bitrepository.monitoringservice.alarm.BasicMonitoringServiceAlerter;
31 import org.bitrepository.monitoringservice.alarm.MonitorAlerter;
32 import org.bitrepository.monitoringservice.collector.StatusCollector;
33 import org.bitrepository.monitoringservice.status.ComponentStatus;
34 import org.bitrepository.monitoringservice.status.ComponentStatusStore;
35 import org.bitrepository.monitoringservice.status.StatusStore;
36 import org.bitrepository.protocol.messagebus.MessageBus;
37 import org.bitrepository.protocol.messagebus.MessageBusManager;
38 import org.bitrepository.protocol.security.SecurityManager;
39 import org.bitrepository.service.LifeCycledService;
40 import org.bitrepository.settings.referencesettings.AlarmLevel;
41 import org.slf4j.Logger;
42 import org.slf4j.LoggerFactory;
43
44
45
46
47 public class MonitoringService implements LifeCycledService {
48 private final Logger log = LoggerFactory.getLogger(getClass());
49
50 private final Settings settings;
51
52 private final StatusStore statusStore;
53
54 private final GetStatusClient getStatusClient;
55
56 private final MonitorAlerter alerter;
57
58 private final StatusCollector collector;
59
60
61
62
63
64
65 public MonitoringService(Settings settings, SecurityManager securityManager) {
66 this.settings = settings;
67 SettingsUtils.initialize(settings);
68 MessageBus messageBus = MessageBusManager.getMessageBus(settings, securityManager);
69 statusStore = new ComponentStatusStore(SettingsUtils.getStatusContributorsForCollection());
70 alerter = new BasicMonitoringServiceAlerter(settings, messageBus, AlarmLevel.ERROR, statusStore);
71 getStatusClient = AccessComponentFactory.getInstance().createGetStatusClient(settings, securityManager,
72 settings.getReferenceSettings().getMonitoringServiceSettings().getID());
73 collector = new StatusCollector(getStatusClient, settings, statusStore, alerter);
74 collector.start();
75 }
76
77
78
79
80 public Map<String, ComponentStatus> getStatus() {
81 return statusStore.getStatusMap();
82 }
83
84 @Override
85 public void start() {}
86
87
88
89
90 public int getMaxRetries() {
91 return settings.getReferenceSettings().getMonitoringServiceSettings().getMaxRetries().intValue();
92 }
93
94
95
96
97 public long getCollectionInterval() {
98 return settings.getReferenceSettings().getMonitoringServiceSettings().getCollectionInterval();
99 }
100
101 @Override
102 public void shutdown() {
103 collector.stop();
104 MessageBus messageBus = MessageBusManager.getMessageBus();
105 if ( messageBus != null) {
106 try {
107 messageBus.close();
108 } catch (JMSException e) {
109 log.warn("Failed to close message bus cleanly, " + e.getMessage());
110 }
111 }
112 }
113 }