/
NodeDiscoveryMonitorManager.java
75 lines (59 loc) · 2.39 KB
/
NodeDiscoveryMonitorManager.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package com.netflix.astyanax.connectionpool.impl;
import java.lang.management.ManagementFactory;
import java.util.HashMap;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import com.google.common.collect.Maps;
import com.netflix.astyanax.connectionpool.NodeDiscovery;
import com.netflix.astyanax.connectionpool.NodeDiscoveryMonitor;
import com.netflix.astyanax.connectionpool.NodeDiscoveryMonitorMBean;
public class NodeDiscoveryMonitorManager {
private MBeanServer mbs;
private static class LazyHolder {
private static final NodeDiscoveryMonitorManager instance = new NodeDiscoveryMonitorManager();
}
private HashMap<String, NodeDiscoveryMonitorMBean> monitors;
private NodeDiscoveryMonitorManager() {
mbs = ManagementFactory.getPlatformMBeanServer();
monitors = Maps.newHashMap();
}
public static NodeDiscoveryMonitorManager getInstance() {
return LazyHolder.instance;
}
public synchronized void registerMonitor(String monitorName, NodeDiscovery discovery) {
monitorName = generateMonitorName(monitorName);
if (!monitors.containsKey(monitorName)) {
NodeDiscoveryMonitorMBean mbean;
try {
ObjectName oName = new ObjectName(monitorName);
mbean = new NodeDiscoveryMonitor(discovery);
monitors.put(monitorName, mbean);
mbs.registerMBean(mbean, oName);
}
catch (Exception e) {
monitors.remove(monitorName);
}
}
}
public synchronized void unregisterMonitor(String monitorName, NodeDiscovery discovery) {
monitorName = generateMonitorName(monitorName);
monitors.remove(monitorName);
try {
mbs.unregisterMBean(new ObjectName(monitorName));
}
catch (Exception e) {
}
}
public synchronized NodeDiscoveryMonitorMBean getCassandraMonitor(String monitorName) {
monitorName = generateMonitorName(monitorName);
return monitors.get(monitorName);
}
private String generateMonitorName(String monitorName) {
StringBuilder sb = new StringBuilder();
sb.append("com.netflix.MonitoredResources");
sb.append(":type=ASTYANAX");
sb.append(",name=" + monitorName.toString());
sb.append(",ServiceType=discovery");
return sb.toString();
}
}