99c8cdf619dcc4d2fa82f48a4ab34f65bca33811
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / GroupStatsResponseConvertor.java
1 /*
2  * Copyright (c) 2013, 2015 IBM Corporation and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
10
11 import java.util.ArrayList;
12 import java.util.List;
13
14 import org.opendaylight.openflowplugin.extension.api.path.ActionPath;
15 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketKey;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStats;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsKey;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.Buckets;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.BucketsBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.DurationBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.buckets.BucketCounter;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.buckets.BucketCounterBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.buckets.BucketCounterKey;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStats;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStatsBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStatsKey;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;
40 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;
41 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;
42
43 /**
44  * Class is an utility class for converting group related statistics messages coming from switch to MD-SAL
45  * messages.
46  * @author avishnoi@in.ibm.com
47  *
48  */
49 public class GroupStatsResponseConvertor {
50
51     public List<GroupStats> toSALGroupStatsList(
52             List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
53             .multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats> allGroupStats){
54         List<GroupStats> convertedSALGroups = new ArrayList<>();
55         for(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
56                 .multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats group: allGroupStats){
57             convertedSALGroups.add(toSALGroupStats(group));
58         }
59         return convertedSALGroups;
60
61     }
62     /**
63      * Method convert GroupStats message from library to MD SAL defined GroupStats
64      * @param groupStats GroupStats from library
65      * @return GroupStats -- GroupStats defined in MD-SAL
66      */
67     public GroupStats toSALGroupStats(
68             org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.
69             multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats groupStats){
70
71         GroupStatsBuilder salGroupStats = new GroupStatsBuilder();
72
73         salGroupStats.setBuckets(toSALBuckets(groupStats.getBucketStats()));
74         salGroupStats.setByteCount(new Counter64(groupStats.getByteCount()));
75
76         DurationBuilder time = new DurationBuilder();
77         time.setSecond(new Counter32(groupStats.getDurationSec()));
78         time.setNanosecond(new Counter32(groupStats.getDurationNsec()));
79
80         salGroupStats.setDuration(time.build());
81         salGroupStats.setGroupId(new GroupId(groupStats.getGroupId().getValue()));
82         salGroupStats.setPacketCount(new Counter64(groupStats.getPacketCount()));
83         salGroupStats.setRefCount(new Counter32(groupStats.getRefCount()));
84         salGroupStats.setKey(new GroupStatsKey(salGroupStats.getGroupId()));
85
86         return salGroupStats.build();
87     }
88
89     public Buckets toSALBuckets(
90             List<BucketStats> bucketStats ){
91
92         BucketsBuilder salBuckets  = new BucketsBuilder();
93
94         List<BucketCounter> allBucketStats = new ArrayList<>();
95         int bucketKey = 0;
96         for(BucketStats bucketStat : bucketStats){
97             BucketCounterBuilder bucketCounter = new BucketCounterBuilder();
98             bucketCounter.setByteCount(new Counter64(bucketStat.getByteCount()));
99             bucketCounter.setPacketCount(new Counter64(bucketStat.getPacketCount()));
100             BucketId bucketId = new BucketId((long)bucketKey);
101             bucketCounter.setKey(new BucketCounterKey(bucketId));
102             bucketCounter.setBucketId(bucketId);
103             bucketKey++;
104             allBucketStats.add(bucketCounter.build());
105         }
106         salBuckets.setBucketCounter(allBucketStats);
107         return salBuckets.build();
108     }
109
110
111     public List<GroupDescStats> toSALGroupDescStatsList(
112             List<GroupDesc> allGroupDescStats, OpenflowVersion ofVersion){
113
114         List<GroupDescStats> convertedSALGroupsDesc = new ArrayList<>();
115         for(GroupDesc groupDesc: allGroupDescStats){
116             convertedSALGroupsDesc.add(toSALGroupDescStats(groupDesc, ofVersion));
117         }
118         return convertedSALGroupsDesc;
119
120     }
121     /**
122      * Method convert GroupStats message from library to MD SAL defined GroupStats
123      * @param groupDesc GroupStats from library
124      * @param ofVersion current ofp version
125      * @return GroupStats -- GroupStats defined in MD-SAL
126      */
127     public GroupDescStats toSALGroupDescStats(GroupDesc groupDesc, OpenflowVersion ofVersion){
128
129         GroupDescStatsBuilder salGroupDescStats = new GroupDescStatsBuilder();
130
131         salGroupDescStats.setBuckets(toSALBucketsDesc(groupDesc.getBucketsList(), ofVersion));
132         salGroupDescStats.setGroupId(new GroupId(groupDesc.getGroupId().getValue()));
133         salGroupDescStats.setGroupType(GroupTypes.forValue(groupDesc.getType().getIntValue()));
134         salGroupDescStats.setKey(new GroupDescStatsKey(salGroupDescStats.getGroupId()));
135
136         return salGroupDescStats.build();
137     }
138
139     public  org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets toSALBucketsDesc(
140             List<BucketsList> bucketDescStats, OpenflowVersion ofVersion ){
141
142         org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder salBucketsDesc  =
143                 new org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder();
144         List<Bucket> allBuckets = new ArrayList<>();
145         int bucketKey = 0;
146         for(BucketsList bucketDetails : bucketDescStats){
147             BucketBuilder bucketDesc = new BucketBuilder();
148             List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action> convertedSalActions =
149                     ActionConvertor.toMDSalActions (bucketDetails.getAction(), ofVersion,
150                             ActionPath.GROUPDESCSTATSUPDATED_GROUPDESCSTATS_BUCKETS_BUCKET_ACTION);
151
152             List<Action> actions = new ArrayList<>();
153             int actionKey = 0;
154             for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action : convertedSalActions){
155                 ActionBuilder wrappedAction = new ActionBuilder();
156                 wrappedAction.setAction(action);
157                 wrappedAction.setKey(new ActionKey(actionKey));
158                 wrappedAction.setOrder(actionKey);
159                 actions.add(wrappedAction.build());
160                 actionKey++;
161             }
162             bucketDesc.setAction(actions);
163             bucketDesc.setWeight(bucketDetails.getWeight());
164             bucketDesc.setWatchPort(bucketDetails.getWatchPort().getValue());
165             bucketDesc.setWatchGroup(bucketDetails.getWatchGroup());
166             BucketId bucketId = new BucketId((long)bucketKey);
167             bucketDesc.setBucketId(bucketId);
168             bucketDesc.setKey(new BucketKey(bucketId));
169             bucketKey++;
170             allBuckets.add(bucketDesc.build());
171         }
172         salBucketsDesc.setBucket(allBuckets);
173         return salBucketsDesc.build();
174     }
175
176 }