Integration of fcaps applications
[vpnservice.git] / fcapsapplication / fcapsapplication-impl / src / main / java / org / opendaylight / vpnservice / fcapsapp / FcapsProvider.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.vpnservice.fcapsapp;
9
10 import com.google.common.base.Preconditions;
11 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
12 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
13 import org.opendaylight.controller.md.sal.binding.api.NotificationService;
14 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
15 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
16 import org.opendaylight.vpnservice.fcapsapp.performancecounter.FlowNodeConnectorInventoryTranslatorImpl;
17 import org.opendaylight.vpnservice.fcapsapp.performancecounter.PMAgent;
18 import org.opendaylight.vpnservice.fcapsapp.performancecounter.PacketInCounterHandler;
19 import org.opendaylight.vpnservice.fcapsapp.portinfo.PortNameMapping;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
23 import org.opendaylight.vpnservice.fcapsapp.alarm.AlarmAgent;
24 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
27
28 public class FcapsProvider implements AutoCloseable {
29
30     public static Logger s_logger = LoggerFactory.getLogger(FcapsProvider.class);
31     private final DataBroker dataService;
32     private final NotificationService notificationProviderService;
33     private final EntityOwnershipService entityOwnershipService;
34     private FlowNodeConnectorInventoryTranslatorImpl flowNodeConnectorInventoryTranslatorImpl;
35     private PacketInCounterHandler packetInCounterHandler;
36     private NodeEventListener<FlowCapableNode> nodeNodeEventListener;
37     private final AlarmAgent alarmAgent;
38     private final PMAgent pmAgent;
39
40     /**
41      * Contructor sets the services
42      * @param dataBroker instance of databroker
43      * @param notificationService instance of notificationservice
44      * @param eos instance of EntityOwnershipService
45      */
46     public FcapsProvider(DataBroker dataBroker,NotificationService notificationService,
47                          final EntityOwnershipService eos) {
48         this.dataService = Preconditions.checkNotNull(dataBroker, "DataBroker can not be null!");
49         s_logger.info("FcapsProvider dataBroket is set");
50
51         this.notificationProviderService = Preconditions.checkNotNull(notificationService,
52                 "notificationService can not be null!");
53         s_logger.info("FcapsProvider notificationProviderService is set");
54
55         this.entityOwnershipService = Preconditions.checkNotNull(eos, "EntityOwnership service can not be null");
56         s_logger.info("FcapsProvider entityOwnershipService is set");
57
58         alarmAgent = new AlarmAgent();
59         pmAgent = new PMAgent();
60
61         alarmAgent.registerAlarmMbean();
62
63         pmAgent.registerMbeanForEFS();
64         pmAgent.registerMbeanForPorts();
65         pmAgent.registerMbeanForPacketIn();
66         PortNameMapping.registerPortMappingBean();
67
68         nodeNodeEventListener = new NodeEventListener<>(entityOwnershipService);
69         registerListener(dataService);
70         flowNodeConnectorInventoryTranslatorImpl = new
71                 FlowNodeConnectorInventoryTranslatorImpl(dataService,entityOwnershipService);
72         packetInCounterHandler = new PacketInCounterHandler();
73         notificationProviderService.registerNotificationListener(packetInCounterHandler);
74     }
75
76     private void registerListener(DataBroker dataBroker) {
77         final DataTreeIdentifier<FlowCapableNode> treeId =
78                 new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, getWildCardPath());
79         try {
80             dataBroker.registerDataTreeChangeListener(treeId, nodeNodeEventListener);
81         } catch (Exception e) {
82             s_logger.error("Registeration failed on DataTreeChangeListener {}",e);
83         }
84     }
85
86     private InstanceIdentifier<FlowCapableNode> getWildCardPath() {
87         return InstanceIdentifier.create(Nodes.class)
88                 .child(Node.class)
89                 .augmentation(FlowCapableNode.class);
90     }
91
92     @Override
93     public void close() throws Exception {
94
95     }
96 }