1 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
3 import java.util.ArrayList;
6 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.Counter32;
7 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.Counter64;
8 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketKey;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStats;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsKey;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.Buckets;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.BucketsBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.DurationBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.buckets.BucketCounter;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.buckets.BucketCounterBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.buckets.BucketCounterKey;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStats;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStatsBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStatsKey;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.BucketsList;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.group.stats.BucketStats;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.multipart.reply.group.desc.GroupDesc;
34 * Class is an utility class for converting group related statistics messages coming from switch to MD-SAL
36 * @author avishnoi@in.ibm.com
39 public class GroupStatsResponseConvertor {
41 public List<GroupStats> toSALGroupStatsList(
42 List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
43 .multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats> allGroupStats){
44 List<GroupStats> convertedSALGroups = new ArrayList<>();
45 for(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
46 .multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats group: allGroupStats){
47 convertedSALGroups.add(toSALGroupStats(group));
49 return convertedSALGroups;
53 * Method convert GroupStats message from library to MD SAL defined GroupStats
54 * @param groupStats GroupStats from library
55 * @return GroupStats -- GroupStats defined in MD-SAL
57 public GroupStats toSALGroupStats(
58 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.
59 multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats groupStats){
61 GroupStatsBuilder salGroupStats = new GroupStatsBuilder();
63 salGroupStats.setBuckets(toSALBuckets(groupStats.getBucketStats()));
64 salGroupStats.setByteCount(new Counter64(groupStats.getByteCount()));
66 DurationBuilder time = new DurationBuilder();
67 time.setSecond(new Counter32(groupStats.getDurationSec()));
68 time.setNanosecond(new Counter32(groupStats.getDurationNsec()));
70 salGroupStats.setDuration(time.build());
71 salGroupStats.setGroupId(new GroupId(groupStats.getGroupId().getValue()));
72 salGroupStats.setPacketCount(new Counter64(groupStats.getPacketCount()));
73 salGroupStats.setRefCount(new Counter32(groupStats.getRefCount()));
74 salGroupStats.setKey(new GroupStatsKey(salGroupStats.getGroupId()));
76 return salGroupStats.build();
79 public Buckets toSALBuckets(
80 List<BucketStats> bucketStats ){
82 BucketsBuilder salBuckets = new BucketsBuilder();
84 List<BucketCounter> allBucketStats = new ArrayList<>();
86 for(BucketStats bucketStat : bucketStats){
87 BucketCounterBuilder bucketCounter = new BucketCounterBuilder();
88 bucketCounter.setByteCount(new Counter64(bucketStat.getByteCount()));
89 bucketCounter.setPacketCount(new Counter64(bucketStat.getPacketCount()));
90 BucketId bucketId = new BucketId((long)bucketKey);
91 bucketCounter.setKey(new BucketCounterKey(bucketId));
92 bucketCounter.setBucketId(bucketId);
94 allBucketStats.add(bucketCounter.build());
96 salBuckets.setBucketCounter(allBucketStats);
97 return salBuckets.build();
101 public List<GroupDescStats> toSALGroupDescStatsList(
102 List<GroupDesc> allGroupDescStats){
104 List<GroupDescStats> convertedSALGroupsDesc = new ArrayList<>();
105 for(GroupDesc groupDesc: allGroupDescStats){
106 convertedSALGroupsDesc.add(toSALGroupDescStats(groupDesc));
108 return convertedSALGroupsDesc;
112 * Method convert GroupStats message from library to MD SAL defined GroupStats
113 * @param groupDesc GroupStats from library
114 * @return GroupStats -- GroupStats defined in MD-SAL
116 public GroupDescStats toSALGroupDescStats(GroupDesc groupDesc){
118 GroupDescStatsBuilder salGroupDescStats = new GroupDescStatsBuilder();
120 salGroupDescStats.setBuckets(toSALBucketsDesc(groupDesc.getBucketsList()));
121 salGroupDescStats.setGroupId(new GroupId(groupDesc.getGroupId().getValue()));
122 salGroupDescStats.setGroupType(GroupTypes.forValue(groupDesc.getType().getIntValue()));
123 salGroupDescStats.setKey(new GroupDescStatsKey(salGroupDescStats.getGroupId()));
125 return salGroupDescStats.build();
128 public org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets toSALBucketsDesc(
129 List<BucketsList> bucketDescStats ){
131 org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder salBucketsDesc =
132 new org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder();
133 List<Bucket> allBuckets = new ArrayList<>();
135 for(BucketsList bucketDetails : bucketDescStats){
136 BucketBuilder bucketDesc = new BucketBuilder();
137 List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action> convertedSalActions =
138 ActionConvertor.toSALBucketActions (bucketDetails.getActionsList());
140 List<Action> actions = new ArrayList<>();
142 for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action : convertedSalActions){
143 ActionBuilder wrappedAction = new ActionBuilder();
144 wrappedAction.setAction(action);
145 wrappedAction.setKey(new ActionKey(actionKey));
146 wrappedAction.setOrder(actionKey);
147 actions.add(wrappedAction.build());
150 bucketDesc.setAction(actions);
151 bucketDesc.setWeight(bucketDetails.getWeight());
152 bucketDesc.setWatchPort(bucketDetails.getWatchPort().getValue());
153 bucketDesc.setWatchGroup(bucketDetails.getWatchGroup());
154 BucketId bucketId = new BucketId((long)bucketKey);
155 bucketDesc.setBucketId(bucketId);
156 bucketDesc.setKey(new BucketKey(bucketId));
158 allBuckets.add(bucketDesc.build());
160 salBucketsDesc.setBucket(allBuckets);
161 return salBucketsDesc.build();