Merge "mdsalutil-api datastoreutils thread pools etc. shutdown on bundle stop"
[genius.git] / itm / itm-impl / src / main / java / org / opendaylight / genius / itm / monitoring / JMXAlarmAgent.java
1 /*
2  * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.genius.itm.monitoring;
9
10 import java.lang.management.ManagementFactory;
11 import javax.management.InstanceAlreadyExistsException;
12 import javax.management.InstanceNotFoundException;
13 import javax.management.JMException;
14 import javax.management.MBeanException;
15 import javax.management.MBeanRegistrationException;
16 import javax.management.MBeanServer;
17 import javax.management.MalformedObjectNameException;
18 import javax.management.NotCompliantMBeanException;
19 import javax.management.ObjectName;
20 import javax.management.ReflectionException;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
23
24 public class JMXAlarmAgent {
25     private static final Logger LOG = LoggerFactory.getLogger(JMXAlarmAgent.class);
26     private static final String BEANNAME = "SDNC.FM:name=DataPathAlarmBean";
27
28     private final MBeanServer mbs;
29     private ObjectName alarmName;
30
31     private static DataPathAlarm alarmBean = new DataPathAlarm();
32
33     public JMXAlarmAgent() throws JMException {
34         // Get the platform MBeanServer
35         mbs = ManagementFactory.getPlatformMBeanServer();
36         try {
37             alarmName = new ObjectName(BEANNAME);
38             LOG.debug("Su nombre es: {}", BEANNAME);
39         } catch (MalformedObjectNameException e) {
40             LOG.error("ObjectName {} instance creation failed.", BEANNAME, e);
41             throw e;
42         }
43     }
44
45     public void registerMbean() throws JMException {
46         if (!mbs.isRegistered(alarmName)) {
47             try {
48                 mbs.registerMBean(alarmBean, alarmName);
49                 LOG.debug("Mbean {} successfully registered.", alarmName);
50             } catch (InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException e) {
51                 LOG.error("Registeration failed for Mbean {}:", alarmName, e);
52                 throw e;
53             }
54         }
55     }
56
57     public void unregisterMbean() {
58         if (mbs.isRegistered(alarmName)) {
59             try {
60                 mbs.unregisterMBean(alarmName);
61             } catch (MBeanRegistrationException | InstanceNotFoundException e) {
62                 LOG.error("Mbean {} cannot be unregistered: ", alarmName, e);
63             }
64             LOG.debug("Unregistered Mbean {} successfully.", alarmName);
65         }
66     }
67
68     public void invokeFMraisemethod(String alarmId, String text, String src) {
69         try {
70             mbs.invoke(alarmName, "raiseAlarm", new Object[] { alarmId, text, src },
71                     new String[] { String.class.getName(), String.class.getName(), String.class.getName() });
72             LOG.trace("Invoked raiseAlarm function for Mbean {} with source {}", BEANNAME, src);
73         } catch (InstanceNotFoundException | ReflectionException | MBeanException e) {
74             LOG.error("Invoking raiseAlarm method failed for Mbean {} : ", alarmName, e);
75         }
76     }
77
78     public void invokeFMclearmethod(String alarmId, String text, String src) {
79         try {
80             mbs.invoke(alarmName, "clearAlarm", new Object[] { alarmId, text, src },
81                     new String[] { String.class.getName(), String.class.getName(), String.class.getName() });
82             LOG.trace("Invoked clearAlarm function for Mbean {} with source {}", BEANNAME, src);
83         } catch (InstanceNotFoundException | ReflectionException | MBeanException e) {
84             LOG.error("Invoking clearAlarm method failed for Mbean {} : ", alarmName, e);
85         }
86     }
87 }