32effb5ea1257726646eec7a8fce1ad6368a2a9f
[netvirt.git] / alarm / impl / src / main / java / org / opendaylight / netvirt / alarm / NvpnJMXAlarmAgent.java
1 /*
2  * Copyright (c) 2017 6WIND, Inc. 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
9 package org.opendaylight.netvirt.alarm;
10
11 import java.lang.management.ManagementFactory;
12
13 import javax.management.InstanceNotFoundException;
14 import javax.management.ListenerNotFoundException;
15 import javax.management.MBeanException;
16 import javax.management.MBeanRegistrationException;
17 import javax.management.MBeanServer;
18 import javax.management.MalformedObjectNameException;
19 import javax.management.ObjectName;
20 import javax.management.ReflectionException;
21
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24
25 public class NvpnJMXAlarmAgent {
26
27     private static final String BEANNAME = "SDNC.FM:name=NeutronvpnControlPathAlarmBean";
28
29     public static final String OP_RAISEALARM = "raiseAlarm";
30     public static final String OP_CLEARALARM = "clearAlarm";
31     private static final Logger LOG = LoggerFactory.getLogger(NvpnJMXAlarmAgent.class);
32
33     private MBeanServer mbs;
34     private ObjectName alarmName = null;
35     private final NvpnNbrControlPathAlarm alarmBean = new NvpnNbrControlPathAlarm();
36
37     public NvpnJMXAlarmAgent() {
38         mbs = ManagementFactory.getPlatformMBeanServer();
39         try {
40             alarmName = new ObjectName(BEANNAME);
41         } catch (MalformedObjectNameException e) {
42             LOG.error("ObjectName instance creation failed for BEANAME {}", BEANNAME, e);
43         }
44     }
45
46     public void invokeClearAlarmBean(String alarmId, String text, String src, String details) {
47         try {
48             mbs.invoke(alarmName, OP_CLEARALARM, new Object[] {alarmId, text, src, details}, new String[] {
49                     String.class.getName(), String.class.getName(), String.class.getName(), String.class.getName()});
50             LOG.debug("Invoked clearAlarm function for Mbean {} with source {} for details {}", BEANNAME, src, details);
51         } catch (InstanceNotFoundException | MBeanException | ReflectionException e) {
52             LOG.error("Invoking clearAlarm method failed for Mbean {}", alarmName);
53         }
54     }
55
56     public void invokeFMraisemethod(String alarmId, String text, String src, String details) {
57         try {
58             mbs.invoke(alarmName, OP_RAISEALARM, new Object[] {alarmId, text, src, details}, new String[] {
59                     String.class.getName(), String.class.getName(), String.class.getName(), String.class.getName()});
60             LOG.debug("Invoked raiseAlarm function for Mbean {} with source {} for details {}",BEANNAME, src , details);
61         } catch (InstanceNotFoundException | MBeanException | ReflectionException e) {
62             LOG.error("Invoking raiseAlarm method failed for Mbean {}", alarmName);
63         }
64     }
65
66     public void registerMbean() {
67         try {
68             if (!mbs.isRegistered(alarmName)) {
69                 mbs.registerMBean(alarmBean, alarmName);
70                 LOG.debug("Registered Mbean {} successfully", alarmName);
71             }
72         } catch (javax.management.InstanceAlreadyExistsException | javax.management.MBeanRegistrationException
73                 | javax.management.NotCompliantMBeanException e) {
74             LOG.info("Registeration failed for Mbean {}", alarmName, e);
75         }
76         try {
77             mbs.addNotificationListener(alarmName, alarmBean, null, null);
78         } catch (InstanceNotFoundException e2) {
79             LOG.error("Registeration of listener failed for Mbean {}", alarmName);
80         }
81     }
82
83     public void unregisterMbean() {
84         try {
85             mbs.removeNotificationListener(alarmName, alarmBean);
86         } catch (InstanceNotFoundException | ListenerNotFoundException e1) {
87             LOG.error("unregisteration of listener failed for Mbean {}", alarmName);
88         }
89         try {
90             if (mbs.isRegistered(alarmName)) {
91                 mbs.unregisterMBean(alarmName);
92                 LOG.debug("Unregistered Mbean {} successfully", alarmName);
93             }
94         } catch (InstanceNotFoundException | MBeanRegistrationException e2) {
95             LOG.error("UnRegisteration failed for Mbean {}", alarmName);
96         }
97     }
98
99     public NvpnNbrControlPathAlarm getAlarmBean() {
100         return alarmBean;
101     }
102
103
104 }