MD-SAL Statistics Manager - Did the code changes that is needed to work with commit...
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / GroupStatsResponseConvertor.java
1 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
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.multipart.reply.multipart.reply.body.multipart.reply.group.desc.GroupDesc;
30
31 /**
32  * Class is an utility class for converting group related statistics messages coming from switch to MD-SAL
33  * messages.
34  * @author avishnoi@in.ibm.com
35  *
36  */
37 public class GroupStatsResponseConvertor {
38
39     public List<GroupStats> toSALGroupStatsList(
40             List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.GroupStats> allGroupStats){
41         List<GroupStats> convertedSALGroups = new ArrayList<GroupStats>();
42         for(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.GroupStats group: allGroupStats){
43             convertedSALGroups.add(toSALGroupStats(group));
44         }
45         return convertedSALGroups;
46         
47     }
48     /**
49      * Method convert GroupStats message from library to MD SAL defined GroupStats  
50      * @param groupStats GroupStats from library
51      * @return GroupStats -- GroupStats defined in MD-SAL
52      */
53     public GroupStats toSALGroupStats(
54             org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.GroupStats groupStats){
55         
56         GroupStatsBuilder salGroupStats = new GroupStatsBuilder();
57         
58         salGroupStats.setBuckets(toSALBuckets(groupStats.getBucketStats()));
59         salGroupStats.setByteCount(new Counter64(groupStats.getByteCount()));
60         
61         DurationBuilder time = new DurationBuilder();
62         time.setSecond(new Counter32(groupStats.getDurationSec()));
63         time.setNanosecond(new Counter32(groupStats.getDurationNsec()));
64         
65         salGroupStats.setDuration(time.build());
66         salGroupStats.setGroupId(new GroupId(groupStats.getGroupId()));
67         salGroupStats.setPacketCount(new Counter64(groupStats.getPacketCount()));
68         salGroupStats.setRefCount(new Counter32(groupStats.getRefCount()));
69         salGroupStats.setKey(new GroupStatsKey(salGroupStats.getGroupId()));
70         
71         return salGroupStats.build();
72     }
73     
74     public Buckets toSALBuckets(
75             List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.group.stats.BucketStats> bucketStats ){
76         
77         BucketsBuilder salBuckets  = new BucketsBuilder();
78         
79         List<BucketCounter> allBucketStats = new ArrayList<BucketCounter>();
80         int bucketKey = 0;
81         for( org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.group.stats.BucketStats bucketStat : bucketStats){
82             BucketCounterBuilder bucketCounter = new BucketCounterBuilder();
83             bucketCounter.setByteCount(new Counter64(bucketStat.getByteCount()));
84             bucketCounter.setPacketCount(new Counter64(bucketStat.getPacketCount()));
85             BucketId bucketId = new BucketId((long)bucketKey);
86             bucketCounter.setKey(new BucketCounterKey(bucketId));
87             bucketCounter.setBucketId(bucketId);
88             bucketKey++;
89             allBucketStats.add(bucketCounter.build());
90         }
91         salBuckets.setBucketCounter(allBucketStats);
92         return salBuckets.build();
93     }
94     
95     
96     public List<GroupDescStats> toSALGroupDescStatsList(
97             List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.
98             multipart.reply.multipart.reply.body.multipart.reply.group.desc.GroupDesc> allGroupDescStats){
99         
100         List<GroupDescStats> convertedSALGroupsDesc = new ArrayList<GroupDescStats>();
101         for(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc.GroupDesc groupDesc: allGroupDescStats){
102             convertedSALGroupsDesc.add(toSALGroupDescStats(groupDesc));
103         }
104         return convertedSALGroupsDesc;
105         
106     }
107     /**
108      * Method convert GroupStats message from library to MD SAL defined GroupStats  
109      * @param groupDesc GroupStats from library
110      * @return GroupStats -- GroupStats defined in MD-SAL
111      */
112     public GroupDescStats toSALGroupDescStats(GroupDesc groupDesc){
113         
114         GroupDescStatsBuilder salGroupDescStats = new GroupDescStatsBuilder();
115         
116         salGroupDescStats.setBuckets(toSALBucketsDesc(groupDesc.getBucketsList()));
117         salGroupDescStats.setGroupId(new GroupId(groupDesc.getGroupId()));
118         salGroupDescStats.setGroupType(GroupTypes.forValue(groupDesc.getType().getIntValue()));
119         salGroupDescStats.setKey(new GroupDescStatsKey(salGroupDescStats.getGroupId()));
120         
121         return salGroupDescStats.build();
122     }
123     
124     public  org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets toSALBucketsDesc(
125             List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.BucketsList> bucketDescStats ){
126         
127         org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder salBucketsDesc  = 
128                 new org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder();
129         List<Bucket> allBuckets = new ArrayList<Bucket>();
130         int bucketKey = 0;
131         for( org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.BucketsList bucketDetails : bucketDescStats){
132             BucketBuilder bucketDesc = new BucketBuilder();
133             List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action> convertedSalActions = 
134                     ActionConvertor.toSALBucketActions (bucketDetails.getActionsList());
135             
136             List<Action> actions = new ArrayList<Action>(); 
137             int actionKey = 0;
138             for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action : convertedSalActions){
139                 ActionBuilder wrappedAction = new ActionBuilder();
140                 wrappedAction.setAction(action);
141                 wrappedAction.setKey(new ActionKey(actionKey));
142                 wrappedAction.setOrder(actionKey);
143                 actions.add(wrappedAction.build());
144                 actionKey++;
145             }
146             bucketDesc.setAction(actions);
147             bucketDesc.setWeight(bucketDetails.getWeight());
148             bucketDesc.setWatchPort(bucketDetails.getWatchPort().getValue());
149             bucketDesc.setWatchGroup(bucketDetails.getWatchGroup());
150             BucketId bucketId = new BucketId((long)bucketKey);
151             bucketDesc.setBucketId(bucketId);
152             bucketDesc.setKey(new BucketKey(bucketId));
153             bucketKey++;
154             allBuckets.add(bucketDesc.build());
155         }
156         salBucketsDesc.setBucket(allBuckets);
157         return salBucketsDesc.build();
158     }
159
160 }