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