From 72d9ea473806d2ec3c7dd08eb73e87deb15d3ef2 Mon Sep 17 00:00:00 2001 From: Anil Vishnoi Date: Thu, 14 Nov 2013 03:12:19 +0530 Subject: [PATCH] MD-SAL Statistics Provider Change-Id: I9ae1235b88546f25795c51780057dfe52d19967f Signed-off-by: Anil Vishnoi --- opendaylight/md-sal/pom.xml | 1 + .../md-sal/statistics-manager/pom.xml | 65 +++++++++++++++ .../manager/StatisticsManagerActivator.java | 35 ++++++++ .../manager/StatisticsProvider.java | 82 +++++++++++++++++++ .../manager/StatisticsUpdateCommiter.java | 57 +++++++++++++ 5 files changed, 240 insertions(+) create mode 100644 opendaylight/md-sal/statistics-manager/pom.xml create mode 100644 opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsManagerActivator.java create mode 100644 opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsProvider.java create mode 100644 opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateCommiter.java diff --git a/opendaylight/md-sal/pom.xml b/opendaylight/md-sal/pom.xml index 99ce4933b5..3198109bc4 100644 --- a/opendaylight/md-sal/pom.xml +++ b/opendaylight/md-sal/pom.xml @@ -45,6 +45,7 @@ clustered-data-store/implementation inventory-manager + statistics-manager compatibility diff --git a/opendaylight/md-sal/statistics-manager/pom.xml b/opendaylight/md-sal/statistics-manager/pom.xml new file mode 100644 index 0000000000..3a355d2e4a --- /dev/null +++ b/opendaylight/md-sal/statistics-manager/pom.xml @@ -0,0 +1,65 @@ + + 4.0.0 + + org.opendaylight.controller + sal-parent + 1.0-SNAPSHOT + + org.opendaylight.controller.md + statistics-manager + bundle + + scm:git:ssh://git.opendaylight.org:29418/controller.git + scm:git:ssh://git.opendaylight.org:29418/controller.git + https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL + + + + + com.google.guava + guava + + + org.opendaylight.controller + sal-binding-api + 1.0-SNAPSHOT + + + org.opendaylight.controller.model + model-flow-statistics + 1.0-SNAPSHOT + + + org.opendaylight.controller.model + model-flow-base + 1.0-SNAPSHOT + + + org.eclipse.xtend + org.eclipse.xtend.lib + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.opendaylight.controller.md.statistics.manager.StatisticsManagerActivator + org.opendaylight.controller.md.statistics.manager + + + + + org.eclipse.xtend + xtend-maven-plugin + + + maven-clean-plugin + + + + diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsManagerActivator.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsManagerActivator.java new file mode 100644 index 0000000000..3c5c57994c --- /dev/null +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsManagerActivator.java @@ -0,0 +1,35 @@ +package org.opendaylight.controller.md.statistics.manager; + +import org.opendaylight.controller.sal.binding.api.AbstractBindingAwareProvider; +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; +import org.opendaylight.controller.sal.binding.api.NotificationProviderService; +import org.opendaylight.controller.sal.binding.api.data.DataProviderService; +import org.osgi.framework.BundleContext; + +public class StatisticsManagerActivator extends AbstractBindingAwareProvider { + + private static ProviderContext pSession; + + private static StatisticsProvider statsProvider = new StatisticsProvider(); + + @Override + public void onSessionInitiated(ProviderContext session) { + + DataProviderService dps = session.getSALService(DataProviderService.class); + StatisticsManagerActivator.statsProvider.setDataService(dps); + NotificationProviderService nps = session.getSALService(NotificationProviderService.class); + StatisticsManagerActivator.statsProvider.setNotificationService(nps); + StatisticsManagerActivator.statsProvider.start(); + + } + + @Override + protected void stopImpl(BundleContext context) { + StatisticsManagerActivator.statsProvider.close(); + } + + public static ProviderContext getProviderContext(){ + return pSession; + } + +} diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsProvider.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsProvider.java new file mode 100644 index 0000000000..073d43ef60 --- /dev/null +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsProvider.java @@ -0,0 +1,82 @@ +package org.opendaylight.controller.md.statistics.manager; + +import org.eclipse.xtext.xbase.lib.Exceptions; +import org.opendaylight.controller.sal.binding.api.NotificationProviderService; +import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; +import org.opendaylight.controller.sal.binding.api.data.DataProviderService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.OpendaylightGroupStatisticsService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.OpendaylightMeterStatisticsService; +import org.opendaylight.yangtools.concepts.Registration; +import org.opendaylight.yangtools.yang.binding.NotificationListener; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class StatisticsProvider implements AutoCloseable { + + public final static Logger spLogger = LoggerFactory.getLogger(StatisticsProvider.class); + + private DataProviderService dps; + + private NotificationProviderService nps; + + private OpendaylightGroupStatisticsService groupStatsService; + + private OpendaylightMeterStatisticsService meterStatsService; + + public DataProviderService getDataService() { + return this.dps; + } + + public void setDataService(final DataProviderService dataService) { + this.dps = dataService; + } + + public NotificationProviderService getNotificationService() { + return this.nps; + } + + public void setNotificationService(final NotificationProviderService notificationService) { + this.nps = notificationService; + } + + private final StatisticsUpdateCommiter updateCommiter = new StatisticsUpdateCommiter(StatisticsProvider.this); + + private Registration listenerRegistration; + + public void start() { + + NotificationProviderService nps = this.getNotificationService(); + Registration registerNotificationListener = nps.registerNotificationListener(this.updateCommiter); + this.listenerRegistration = registerNotificationListener; + + // Get Group/Meter statistics service instance + groupStatsService = StatisticsManagerActivator.getProviderContext().getRpcService(OpendaylightGroupStatisticsService.class); + + meterStatsService = StatisticsManagerActivator.getProviderContext().getRpcService(OpendaylightMeterStatisticsService.class); + + spLogger.info("Statistics Provider started."); + } + + protected DataModificationTransaction startChange() { + + DataProviderService dps = this.getDataService(); + return dps.beginTransaction(); + } + + @Override + public void close(){ + + try { + spLogger.info("Statistics Provider stopped."); + if (this.listenerRegistration != null) { + + this.listenerRegistration.close(); + + } + } catch (Throwable e) { + throw Exceptions.sneakyThrow(e); + } + + } + +} diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateCommiter.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateCommiter.java new file mode 100644 index 0000000000..f952124c91 --- /dev/null +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateCommiter.java @@ -0,0 +1,57 @@ +package org.opendaylight.controller.md.statistics.manager; + +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupDescStatsUpdated; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupFeaturesUpdated; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupStatisticsUpdated; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.OpendaylightGroupStatisticsListener; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterConfigStatsUpdated; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterFeaturesUpdated; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterStatisticsUpdated; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.OpendaylightMeterStatisticsListener; + +public class StatisticsUpdateCommiter implements OpendaylightGroupStatisticsListener, + OpendaylightMeterStatisticsListener { + + private final StatisticsProvider statisticsManager; + + public StatisticsUpdateCommiter(final StatisticsProvider manager){ + + this.statisticsManager = manager; + } + public StatisticsProvider getStatisticsManager(){ + return statisticsManager; + } + @Override + public void onMeterConfigStatsUpdated(MeterConfigStatsUpdated notification) { + // TODO Auto-generated method stub + } + + @Override + public void onMeterStatisticsUpdated(MeterStatisticsUpdated notification) { + // TODO Auto-generated method stub + + } + + @Override + public void onGroupDescStatsUpdated(GroupDescStatsUpdated notification) { + // TODO Auto-generated method stub + + } + + @Override + public void onGroupStatisticsUpdated(GroupStatisticsUpdated notification) { + // TODO Auto-generated method stub + + } + @Override + public void onMeterFeaturesUpdated(MeterFeaturesUpdated notification) { + // TODO Auto-generated method stub + + } + @Override + public void onGroupFeaturesUpdated(GroupFeaturesUpdated notification) { + // TODO Auto-generated method stub + + } + +} -- 2.36.6