2 * Copyright (c) 2017 6WIND, Inc. All rights reserved.
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
9 package org.opendaylight.netvirt.alarm;
11 import java.lang.management.ManagementFactory;
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;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
25 public class NvpnJMXAlarmAgent {
27 private static final String BEANNAME = "SDNC.FM:name=NeutronvpnControlPathAlarmBean";
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);
33 private MBeanServer mbs;
34 private ObjectName alarmName = null;
35 private final NvpnNbrControlPathAlarm alarmBean = new NvpnNbrControlPathAlarm();
37 public NvpnJMXAlarmAgent() {
38 mbs = ManagementFactory.getPlatformMBeanServer();
40 alarmName = new ObjectName(BEANNAME);
41 } catch (MalformedObjectNameException e) {
42 LOG.error("ObjectName instance creation failed for BEANAME {}", BEANNAME, e);
46 public void invokeClearAlarmBean(String alarmId, String text, String src, String details) {
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);
56 public void invokeFMraisemethod(String alarmId, String text, String src, String details) {
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);
66 public void registerMbean() {
68 if (!mbs.isRegistered(alarmName)) {
69 mbs.registerMBean(alarmBean, alarmName);
70 LOG.debug("Registered Mbean {} successfully", alarmName);
72 } catch (javax.management.InstanceAlreadyExistsException | javax.management.MBeanRegistrationException
73 | javax.management.NotCompliantMBeanException e) {
74 LOG.info("Registeration failed for Mbean {}", alarmName, e);
77 mbs.addNotificationListener(alarmName, alarmBean, null, null);
78 } catch (InstanceNotFoundException e2) {
79 LOG.error("Registeration of listener failed for Mbean {}", alarmName);
83 public void unregisterMbean() {
85 mbs.removeNotificationListener(alarmName, alarmBean);
86 } catch (InstanceNotFoundException | ListenerNotFoundException e1) {
87 LOG.error("unregisteration of listener failed for Mbean {}", alarmName);
90 if (mbs.isRegistered(alarmName)) {
91 mbs.unregisterMBean(alarmName);
92 LOG.debug("Unregistered Mbean {} successfully", alarmName);
94 } catch (InstanceNotFoundException | MBeanRegistrationException e2) {
95 LOG.error("UnRegisteration failed for Mbean {}", alarmName);
99 public NvpnNbrControlPathAlarm getAlarmBean() {