2 * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others. 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 * Created by ECHIAPT on 7/21/2016.
12 package org.opendaylight.netvirt.bgpmanager.oam;
14 import static org.opendaylight.netvirt.bgpmanager.oam.BgpCounters.parse_ip_bgp_vpnv4_all_summary;
15 import static org.opendaylight.netvirt.bgpmanager.oam.BgpCounters.resetFile;
16 import java.util.Date;
17 import java.util.HashMap;
18 import java.util.List;
20 import java.util.TimerTask;
21 import org.opendaylight.netvirt.bgpmanager.BgpConfigurationManager;
22 import org.opendaylight.netvirt.bgpmanager.BgpManager;
23 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.bgp.Neighbors;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
27 public class BgpAlarms extends TimerTask {
28 private static final Logger logger = LoggerFactory.getLogger(BgpAlarms.class);
29 private static final Logger LOG = LoggerFactory.getLogger(BgpManager.class);
30 public static final BgpJMXAlarmAgent alarmAgent = new BgpJMXAlarmAgent();
31 private static Map<String , String> neighborStatusMap = new HashMap<>();
32 private BgpConfigurationManager bgpMgr;
34 private static Map<String , BgpAlarmStatus> neighborsRaisedAlarmStatusMap = new HashMap<>();
38 List<Neighbors> nbrList = null;
40 if (logger.isDebugEnabled()) {
41 logger.debug("Fetching neighbor status' from BGP at " + new Date());
43 resetFile("cmd_ip_bgp_vpnv4_all_summary.txt");
44 neighborStatusMap.clear();
46 if ((bgpMgr != null) &&
47 (bgpMgr.getBgpCounters() != null)) {
48 bgpMgr.getBgpCounters().fetchCmdOutputs("cmd_ip_bgp_vpnv4_all_summary.txt",
49 "show ip bgp vpnv4 all summary");
50 if (bgpMgr.getConfig() != null) {
51 nbrList= bgpMgr.getConfig().getNeighbors();
53 parse_ip_bgp_vpnv4_all_summary(neighborStatusMap);
54 processNeighborStatusMap(neighborStatusMap, nbrList, neighborsRaisedAlarmStatusMap);
57 if (logger.isDebugEnabled()) {
58 logger.debug("Finished getting the status of BGP neighbors at " + new Date());
60 } catch (Exception e) {
61 logger.error("Failed to publish bgp counters ", e);
65 public BgpAlarms(BgpConfigurationManager bgpManager) {
67 alarmAgent.registerMbean();
69 bgpMgr.getConfig() != null) {
70 List<Neighbors> nbrs = bgpMgr.getConfig().getNeighbors();
72 for (Neighbors nbr: nbrs) {
73 logger.trace( "Clearing Neighbor DOWN alarm at the startup for Neighbor {}",
74 nbr.getAddress().getValue());
75 clearBgpNbrDownAlarm(nbr.getAddress().getValue());
76 neighborsRaisedAlarmStatusMap.put( nbr.getAddress().getValue(),
77 BgpAlarmStatus.CLEARED);
83 public void processNeighborStatusMap(Map<String, String> nbrStatusMap,
84 List<Neighbors> nbrs, Map<String, BgpAlarmStatus>
85 nbrsRaisedAlarmStatusMap) {
87 String alarmDescr = "";
89 if ( (nbrs == null) || (nbrs.size() == 0)) {
90 logger.trace("No BGP neighbors configured.");
94 for (Neighbors nbr : nbrs) {
96 if ((nbrStatusMap != null) && nbrStatusMap.containsKey(nbr.getAddress().getValue())) {
97 nbrshipStatus = nbrStatusMap.get(nbr.getAddress().getValue());
98 logger.trace("nbr {} status {}",
99 nbr.getAddress().getValue(),
102 Integer.parseInt(nbrshipStatus);
103 alarmToRaise = false;
104 } catch (Exception e) {
105 logger.trace("Exception thrown in parsing the integers. {}", e);
108 if ((!nbrsRaisedAlarmStatusMap.containsKey(nbr.getAddress().getValue())) ||
109 (nbrsRaisedAlarmStatusMap.get(nbr.getAddress().getValue()) != BgpAlarmStatus.RAISED)) {
110 logger.trace("alarm raised for {}.", nbr.getAddress().getValue());
111 raiseBgpNbrDownAlarm(nbr.getAddress().getValue());
112 nbrsRaisedAlarmStatusMap.put(nbr.getAddress().getValue(), BgpAlarmStatus.RAISED);
114 logger.trace("alarm raised already for {}", nbr.getAddress().getValue());
117 if ((!nbrsRaisedAlarmStatusMap.containsKey(nbr.getAddress().getValue())) ||
118 (nbrsRaisedAlarmStatusMap.get(nbr.getAddress().getValue()) != BgpAlarmStatus.CLEARED)) {
119 clearBgpNbrDownAlarm(nbr.getAddress().getValue());
120 logger.trace("alarm cleared for {}", nbr.getAddress().getValue());
121 nbrsRaisedAlarmStatusMap.put(nbr.getAddress().getValue(), BgpAlarmStatus.CLEARED);
123 logger.trace("alarm cleared already for {}", nbr.getAddress().getValue());
128 } catch ( Exception e1) {
129 logger.trace("Exception thrown in the processNeighborStatusMap method. {}", e1);
133 public void raiseBgpNbrDownAlarm(String nbrIp) {
135 StringBuilder source = new StringBuilder();
136 source.append("BGP_Neighbor=").append(nbrIp);
137 if ((nbrIp == null) || (nbrIp.isEmpty())) {
140 logger.trace("Raising BgpControlPathFailure alarm. {} ",
142 //Invokes JMX raiseAlarm method
143 alarmAgent.invokeFMraisemethod( "BgpControlPathFailure",
144 "Raising Bgp Nbr TCP connection down alarm.",
148 public void clearBgpNbrDownAlarm(String nbrIp) {
149 StringBuilder source = new StringBuilder();
150 source.append("BGP_Neighbor=").append(nbrIp);
151 if ((nbrIp == null) || (nbrIp.isEmpty())) {
154 logger.trace("Clearing BgpControlPathFailure alarm of source {} ", source);
155 //Invokes JMX clearAlarm method
156 alarmAgent.invokeFMclearmethod( "BgpControlPathFailure",
157 "Clearing Bgp Nbr TCP connection down alarm.",