2 * Copyright (c) 2015 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
9 package org.opendaylight.openflowplugin.impl.statistics.services.compatibility;
11 import java.util.List;
12 import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo;
13 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
14 import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.TransactionId;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.queue.rev130925.QueueId;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.duration.DurationBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyQueueCase;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.MultipartReplyQueue;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.multipart.reply.queue.QueueStats;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.QueueStatisticsUpdate;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.QueueStatisticsUpdateBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMap;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMapBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMapKey;
29 import org.opendaylight.yangtools.yang.binding.util.BindingMap;
32 * Pulled out queue stats to notification transformation.
34 public final class QueueStatisticsToNotificationTransformer {
36 private QueueStatisticsToNotificationTransformer() {
37 // Hide implicit constructor
41 * Transform statistics to notification.
43 * @param mpReplyList raw multipart response from device
44 * @param deviceInfo device state
45 * @param ofVersion device version
46 * @param emulatedTxId emulated transaction Id
47 * @return notification containing flow stats
49 public static QueueStatisticsUpdate transformToNotification(final List<MultipartReply> mpReplyList,
50 final DeviceInfo deviceInfo,
51 final OpenflowVersion ofVersion,
52 final TransactionId emulatedTxId) {
53 final var stats = BindingMap.<QueueIdAndStatisticsMapKey, QueueIdAndStatisticsMap>orderedBuilder();
54 for (MultipartReply mpReply : mpReplyList) {
55 MultipartReplyQueueCase caseBody = (MultipartReplyQueueCase) mpReply.getMultipartReplyBody();
56 MultipartReplyQueue replyBody = caseBody.getMultipartReplyQueue();
58 for (QueueStats queueStats : replyBody.getQueueStats()) {
59 stats.add(new QueueIdAndStatisticsMapBuilder()
60 .setNodeConnectorId(InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(
61 deviceInfo.getDatapathId(), queueStats.getPortNo(), ofVersion))
62 .setTransmissionErrors(new Counter64(queueStats.getTxErrors()))
63 .setTransmittedBytes(new Counter64(queueStats.getTxBytes()))
64 .setTransmittedPackets(new Counter64(queueStats.getTxPackets()))
65 .setDuration(new DurationBuilder()
66 .setSecond(new Counter32(queueStats.getDurationSec()))
67 .setNanosecond(new Counter32(queueStats.getDurationNsec())).build())
68 .setQueueId(new QueueId(queueStats.getQueueId()))
72 return new QueueStatisticsUpdateBuilder()
73 .setId(deviceInfo.getNodeId())
74 .setMoreReplies(Boolean.FALSE)
75 .setTransactionId(emulatedTxId)
76 .setQueueIdAndStatisticsMap(stats.build())