2 * Copyright (c) 2016 Cisco Systems, Inc. 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
8 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics;
10 import java.util.concurrent.ScheduledExecutorService;
12 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
13 import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
14 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
15 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
16 import org.opendaylight.groupbasedpolicy.api.StatisticsManager;
17 import org.opendaylight.groupbasedpolicy.util.DataTreeChangeHandler;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayConfig;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.sflow.values.SflowClientSettings;
20 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
24 import com.google.common.base.Preconditions;
26 public class SflowClientSettingsListener extends DataTreeChangeHandler<SflowClientSettings> {
28 private static final Logger LOG = LoggerFactory.getLogger(SflowClientSettingsListener.class);
29 private static InstanceIdentifier<SflowClientSettings> IID =
30 InstanceIdentifier.builder(OfOverlayConfig.class)
31 .child(SflowClientSettings.class)
33 private OFStatisticsManager ofStatisticsManager;
34 private final ScheduledExecutorService executor;
35 private final StatisticsManager statisticsManager;
36 private ResolvedPolicyClassifierListener classifierListener;
38 public SflowClientSettingsListener(DataBroker dataprovider, ScheduledExecutorService executor, StatisticsManager statisticsManager) {
40 this.statisticsManager = Preconditions.checkNotNull(statisticsManager);
41 this.executor = Preconditions.checkNotNull(executor);
42 registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, IID));
46 protected void onWrite(DataObjectModification<SflowClientSettings> rootNode,
47 InstanceIdentifier<SflowClientSettings> rootIdentifier) {
48 onSubtreeModified(rootNode, rootIdentifier);
52 protected void onDelete(DataObjectModification<SflowClientSettings> rootNode,
53 InstanceIdentifier<SflowClientSettings> rootIdentifier) {
55 classifierListener.close();
56 ofStatisticsManager.close();
57 } catch (Exception e) {
59 "Error during closing OFStatisticsManager and ResolvedPolicyClassifierListener. "
60 + "Statistics do not have to be correct because of illegal state.", e);
65 protected void onSubtreeModified(DataObjectModification<SflowClientSettings> rootNode,
66 InstanceIdentifier<SflowClientSettings> rootIdentifier) {
67 SflowClientSettings sflowClientSettings =
68 Preconditions.checkNotNull(rootNode.getDataAfter());
69 if (classifierListener != null && ofStatisticsManager != null) {
71 classifierListener.close();
72 ofStatisticsManager.close();
73 } catch (Exception e) {
75 "Error during closing OFStatisticsManager and ResolvedPolicyClassifierListener. "
76 + "Statistics do not have to be correct because of illegal state.", e);
79 ofStatisticsManager = new OFStatisticsManager(executor, statisticsManager);
80 ofStatisticsManager.setSflowCollectorUri(sflowClientSettings.getGbpOfoverlaySflowCollectorUri());
81 ofStatisticsManager.setDelay(sflowClientSettings.getGbpOfoverlaySflowRetrieveInterval());
82 classifierListener = new ResolvedPolicyClassifierListener(dataProvider, ofStatisticsManager);