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.alarm;
23
24 import java.math.BigInteger;
25 import java.util.ArrayList;
26 import java.util.List;
27 import java.util.Map;
28 import org.bitrepository.bitrepositoryelements.Alarm;
29 import org.bitrepository.bitrepositoryelements.AlarmCode;
30 import org.bitrepository.common.settings.Settings;
31 import org.bitrepository.monitoringservice.status.ComponentStatus;
32 import org.bitrepository.monitoringservice.status.StatusStore;
33 import org.bitrepository.protocol.messagebus.MessageSender;
34 import org.bitrepository.service.AlarmDispatcher;
35 import org.bitrepository.settings.referencesettings.AlarmLevel;
36
37
38
39
40 public class BasicMonitoringServiceAlerter extends AlarmDispatcher implements MonitorAlerter {
41
42 private final StatusStore statusStore;
43
44 private final BigInteger maxRetries;
45
46
47
48
49
50
51
52 public BasicMonitoringServiceAlerter(
53 Settings settings, MessageSender sender, AlarmLevel alarmLevel, StatusStore statusStore) {
54 super(settings, sender, alarmLevel);
55 this.statusStore = statusStore;
56 maxRetries = settings.getReferenceSettings().getMonitoringServiceSettings().getMaxRetries();
57 }
58
59 @Override
60 public void checkStatuses() {
61 Map<String, ComponentStatus> statusMap = statusStore.getStatusMap();
62 List<String> nonRespondingComponents = new ArrayList<String>();
63 for(String ID : statusMap.keySet()) {
64 ComponentStatus componentStatus = statusMap.get(ID);
65 if(componentStatus.getNumberOfMissingReplies() >= maxRetries.intValue()) {
66 componentStatus.markAsUnresponsive();
67 if(!componentStatus.hasAlarmed()) {
68 nonRespondingComponents.add(ID);
69 componentStatus.alarmed();
70 }
71 }
72 }
73
74 if(!nonRespondingComponents.isEmpty()) {
75 Alarm alarm = new Alarm();
76 alarm.setAlarmCode(AlarmCode.COMPONENT_FAILURE);
77 alarm.setAlarmText("The following components has become unresponsive: "
78 + nonRespondingComponents.toString());
79 error(alarm);
80 }
81 }
82 }