2 * Copyright IBM Corporation, 2013. 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
8 package org.opendaylight.controller.md.statistics.manager;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.AggregateFlowStatisticsUpdate;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowsStatisticsUpdate;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.OpendaylightFlowStatisticsListener;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.FlowTableStatisticsUpdate;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.OpendaylightFlowTableStatisticsListener;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupDescStatsUpdated;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupFeaturesUpdated;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupStatisticsUpdated;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.OpendaylightGroupStatisticsListener;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterConfigStatsUpdated;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterFeaturesUpdated;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterStatisticsUpdated;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.OpendaylightMeterStatisticsListener;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.NodeConnectorStatisticsUpdate;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.OpendaylightPortStatisticsListener;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.OpendaylightQueueStatisticsListener;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.QueueStatisticsUpdate;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
31 * This class is responsible for listening for statistics update notifications and
32 * routing them to the appropriate NodeStatisticsHandler.
34 * TODO: Need to add error message listener and clean-up the associated tx id
35 * if it exists in the tx-id cache.
38 public class StatisticsListener implements OpendaylightGroupStatisticsListener,
39 OpendaylightMeterStatisticsListener,
40 OpendaylightFlowStatisticsListener,
41 OpendaylightPortStatisticsListener,
42 OpendaylightFlowTableStatisticsListener,
43 OpendaylightQueueStatisticsListener{
45 private final static Logger sucLogger = LoggerFactory.getLogger(StatisticsListener.class);
46 private final StatisticsProvider statisticsManager;
52 public StatisticsListener(final StatisticsProvider manager){
53 this.statisticsManager = manager;
57 public void onMeterConfigStatsUpdated(final MeterConfigStatsUpdated notification) {
58 final NodeStatisticsHandler handler = this.statisticsManager.getStatisticsHandler(notification.getId());
59 if (handler != null) {
60 handler.updateMeterConfigStats(notification, notification.getMeterConfigStats());
65 public void onMeterStatisticsUpdated(MeterStatisticsUpdated notification) {
66 final NodeStatisticsHandler handler = this.statisticsManager.getStatisticsHandler(notification.getId());
67 if (handler != null) {
68 handler.updateMeterStats(notification, notification.getMeterStats());
73 public void onGroupDescStatsUpdated(GroupDescStatsUpdated notification) {
74 final NodeStatisticsHandler handler = statisticsManager.getStatisticsHandler(notification.getId());
75 if (handler != null) {
76 handler.updateGroupDescStats(notification, notification.getGroupDescStats());
81 public void onGroupStatisticsUpdated(GroupStatisticsUpdated notification) {
82 final NodeStatisticsHandler handler = statisticsManager.getStatisticsHandler(notification.getId());
83 if (handler != null) {
84 handler.updateGroupStats(notification, notification.getGroupStats());
89 public void onMeterFeaturesUpdated(MeterFeaturesUpdated notification) {
90 final NodeStatisticsHandler sna = this.statisticsManager.getStatisticsHandler(notification.getId());
92 sna.updateMeterFeatures(notification);
97 public void onGroupFeaturesUpdated(GroupFeaturesUpdated notification) {
98 final NodeStatisticsHandler sna = this.statisticsManager.getStatisticsHandler(notification.getId());
100 sna.updateGroupFeatures(notification);
105 public void onFlowsStatisticsUpdate(final FlowsStatisticsUpdate notification) {
106 sucLogger.debug("Received flow stats update : {}",notification.toString());
107 final NodeStatisticsHandler sna = this.statisticsManager.getStatisticsHandler(notification.getId());
109 sna.updateFlowStats(notification, notification.getFlowAndStatisticsMapList());
114 public void onAggregateFlowStatisticsUpdate(AggregateFlowStatisticsUpdate notification) {
115 final NodeStatisticsHandler handler = this.statisticsManager.getStatisticsHandler(notification.getId());
116 if (handler != null) {
117 handler.updateAggregateFlowStats(notification, notification);
122 public void onNodeConnectorStatisticsUpdate(NodeConnectorStatisticsUpdate notification) {
123 final NodeStatisticsHandler handler = this.statisticsManager.getStatisticsHandler(notification.getId());
124 if (handler != null) {
125 handler.updateNodeConnectorStats(notification, notification.getNodeConnectorStatisticsAndPortNumberMap());
130 public void onFlowTableStatisticsUpdate(FlowTableStatisticsUpdate notification) {
131 final NodeStatisticsHandler handler = this.statisticsManager.getStatisticsHandler(notification.getId());
132 if (handler != null) {
133 handler.updateFlowTableStats(notification, notification.getFlowTableAndStatisticsMap());
138 public void onQueueStatisticsUpdate(QueueStatisticsUpdate notification) {
139 final NodeStatisticsHandler handler = this.statisticsManager.getStatisticsHandler(notification.getId());
140 if (handler != null) {
141 handler.updateQueueStats(notification, notification.getQueueIdAndStatisticsMap());