1 package org.opendaylight.controller.sal.compability
3 import org.opendaylight.controller.sal.reader.IPluginInReadService
4 import org.opendaylight.controller.sal.core.NodeConnector
5 import org.opendaylight.controller.sal.core.Node
6 import org.opendaylight.controller.sal.flowprogrammer.Flow
7 import org.opendaylight.controller.sal.core.NodeTable
8 import org.opendaylight.controller.sal.binding.api.data.DataBrokerService
10 import static extension org.opendaylight.controller.sal.common.util.Arguments.*
11 import static extension org.opendaylight.controller.sal.compability.NodeMapping.*
12 import static org.opendaylight.controller.sal.compability.MDFlowMapping.*
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow .inventory.rev130819.FlowCapableNode
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.OpendaylightFlowStatisticsService
18 import org.opendaylight.controller.sal.reader.NodeConnectorStatistics
19 import org.opendaylight.controller.sal.reader.FlowOnNode
20 import org.opendaylight.controller.sal.reader.NodeDescription
21 import org.slf4j.LoggerFactory
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAllFlowStatisticsInputBuilder
23 import java.util.ArrayList
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAllNodeConnectorStatisticsInputBuilder
25 import org.opendaylight.controller.sal.inventory.IPluginInInventoryService
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.OpendaylightInventoryListener
27 import org.opendaylight.controller.sal.inventory.IPluginOutInventoryService
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRemoved
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdated
30 import java.util.Collections
31 import org.opendaylight.controller.sal.core.UpdateType
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRemoved
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeUpdated
34 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
35 import org.opendaylight.yangtools.yang.binding.DataObject
37 class InventoryAndReadAdapter implements IPluginInReadService, IPluginInInventoryService,OpendaylightInventoryListener {
39 private static val LOG = LoggerFactory.getLogger(InventoryAndReadAdapter);
42 DataBrokerService dataService;
45 OpendaylightFlowStatisticsService flowStatisticsService;
48 IPluginOutInventoryService adInventoryPublisher;
51 override getTransmitRate(NodeConnector connector) {
52 val nodeConnector = readFlowCapableNodeConnector(connector.toNodeConnectorRef);
53 return nodeConnector.currentSpeed
56 override readAllFlow(Node node, boolean cached) {
57 val input = new GetAllFlowStatisticsInputBuilder;
58 input.setNode(node.toNodeRef);
59 val result = flowStatisticsService.getAllFlowStatistics(input.build)
61 val statistics = result.get.result;
62 val output = new ArrayList<FlowOnNode>();
63 for(stat : statistics.flowStatistics) {
64 // FIXME: Create FlowOnNode
69 override readAllNodeConnector(Node node, boolean cached) {
70 val input = new GetAllNodeConnectorStatisticsInputBuilder();
71 input.setNode(node.toNodeRef);
72 val result = flowStatisticsService.getAllNodeConnectorStatistics(input.build());
73 val statistics = result.get.result.nodeConnectorStatistics;
74 val ret = new ArrayList<NodeConnectorStatistics>();
75 for(stat : statistics) {
76 ret.add(stat.toNodeConnectorStatistics())
81 override readAllNodeTable(Node node, boolean cached) {
82 throw new UnsupportedOperationException("TODO: auto-generated method stub")
85 override readDescription(Node node, boolean cached) {
86 val capableNode = readFlowCapableNode(node.toNodeRef)
88 val it = new NodeDescription()
89 manufacturer = capableNode.manufacturer
90 serialNumber = capableNode.serialNumber
91 software = capableNode.software
92 description = capableNode.description
97 override readFlow(Node node, Flow flow, boolean cached) {
98 val input = flowStatisticsInput(node, flow);
99 val output = flowStatisticsService.getFlowStatistics(input);
102 val statistics = output.get().getResult();
103 if (statistics != null) {
104 val it = new FlowOnNode(flow);
105 byteCount = statistics.byteCount.value.longValue
106 durationNanoseconds = statistics.duration.getNanosecond().getValue().intValue();
107 durationSeconds = statistics.duration.getSecond().getValue().intValue();
108 packetCount = statistics.getPacketCount().getValue().longValue();
111 } catch (Exception e) {
112 LOG.error("Read flow not processed", e);
117 override readNodeConnector(NodeConnector connector, boolean cached) {
119 val getNodeConnectorStatisticsInput = FromSalConversionsUtils.nodeConnectorStatistics(connector);
120 val future = flowStatisticsService.getNodeConnectorStatistics(getNodeConnectorStatisticsInput);
122 val rpcResult = future.get();
123 val output = rpcResult.getResult();
125 if (output != null) {
126 return output.toNodeConnectorStatistics;
128 } catch (Exception e) {
129 LOG.error("Read node connector not processed", e);
135 override onNodeConnectorRemoved(NodeConnectorRemoved update) {
139 override onNodeRemoved(NodeRemoved notification) {
144 override onNodeConnectorUpdated(NodeConnectorUpdated update) {
145 val properties = Collections.<org.opendaylight.controller.sal.core.Property>emptySet();
146 adInventoryPublisher.updateNodeConnector(update.nodeConnectorRef.toADNodeConnector,UpdateType.CHANGED,properties);
149 override onNodeUpdated(NodeUpdated notification) {
150 val properties = Collections.<org.opendaylight.controller.sal.core.Property>emptySet();
151 adInventoryPublisher.updateNode(notification.nodeRef.toADNode,UpdateType.CHANGED,properties);
154 override getNodeProps() {
155 // FIXME: Read from MD-SAL inventory service
159 override getNodeConnectorProps(Boolean refresh) {
160 // FIXME: Read from MD-SAL Invcentory Service
165 override readNodeTable(NodeTable table, boolean cached) {
166 throw new UnsupportedOperationException("TODO: auto-generated method stub")
169 private def FlowCapableNode readFlowCapableNode(NodeRef ref) {
170 val dataObject = dataService.readOperationalData(ref.value as InstanceIdentifier<? extends DataObject>);
171 val node = dataObject.checkInstanceOf(
172 org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node);
173 return node.getAugmentation(FlowCapableNode);
176 private def FlowCapableNodeConnector readFlowCapableNodeConnector(NodeConnectorRef ref) {
177 val dataObject = dataService.readOperationalData(ref.value as InstanceIdentifier<? extends DataObject>);
178 val node = dataObject.checkInstanceOf(
179 org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector);
180 return node.getAugmentation(FlowCapableNodeConnector);
183 private static def toNodeConnectorStatistics(
184 org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.NodeConnectorStatistics output) {
185 val it = new NodeConnectorStatistics
187 collisionCount = output.getCollisionCount().longValue();
188 receiveCRCErrorCount = output.getReceiveCrcError().longValue();
189 receiveFrameErrorCount = output.getReceiveFrameError().longValue();
190 receiveOverRunErrorCount = output.getReceiveOverRunError().longValue();
192 receiveDropCount = output.getReceiveDrops().longValue();
193 receiveErrorCount = output.getReceiveErrors().longValue();
194 receivePacketCount = output.getPackets().getReceived().longValue();
195 receiveByteCount = output.getBytes().getReceived().longValue();
197 transmitDropCount = output.getTransmitDrops().longValue();
198 transmitErrorCount = output.getTransmitErrors().longValue();
199 transmitPacketCount = output.getPackets().getTransmitted().longValue();
200 transmitByteCount = output.getBytes().getTransmitted().longValue();