blob: 1e1bdc9e165a2d24f6262f67c2b7d2e6ace76a91 [file] [log] [blame]
Jian Li485a2cd2017-07-18 18:16:38 +09001/*
2 * Copyright 2017-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.grpc.nb.net.device;
17
18
19import com.google.common.annotations.Beta;
20import io.grpc.stub.StreamObserver;
21import org.apache.felix.scr.annotations.Activate;
22import org.apache.felix.scr.annotations.Component;
23import org.apache.felix.scr.annotations.Deactivate;
24import org.apache.felix.scr.annotations.Reference;
25import org.apache.felix.scr.annotations.ReferenceCardinality;
26import org.onosproject.grpc.net.device.models.PortEnumsProto;
27import org.onosproject.grpc.net.device.models.PortStatisticsProtoOuterClass.PortStatisticsProto;
28import org.onosproject.grpc.nb.net.device.DeviceServiceGrpc.DeviceServiceImplBase;
29import org.onosproject.grpc.net.models.PortProtoOuterClass.PortProto;
30import org.onosproject.grpc.net.device.models.DeviceEnumsProto;
31import org.onosproject.net.ConnectPoint;
32import org.onosproject.net.DeviceId;
33import org.onosproject.net.MastershipRole;
34import org.onosproject.net.PortNumber;
35import org.onosproject.net.device.DeviceService;
36import org.onosproject.grpc.nb.utils.GrpcNbDeviceServiceUtil;
37
38import static org.onosproject.grpc.nb.net.device.DeviceServiceNb.*;
39
40
41/**
42 * A server that provides access to the methods exposed by {@link DeviceService}.
43 * TODO this requires major refactoring, translation should be delegated to calls to
44 * TODO{@link GrpcNbDeviceServiceUtil}.
45 */
46@Beta
47@Component(immediate = true)
48public class GrpcNbDeviceService {
49
50 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
51 protected DeviceService deviceService;
52
53 @Activate
54 public void activate() {
55 //TODO this should contact the registry service and register an instance
56 // of this service.
57 }
58
59 @Deactivate
60 public void deactivate() {
61 }
62
63 private class DeviceServiceNbServerInternal extends DeviceServiceImplBase {
64
65 public DeviceServiceNbServerInternal() {
66 super();
67 }
68
69
70 @Override
71 public void getDeviceCount(
72 getDeviceCountRequest request,
73 StreamObserver<DeviceServiceNb.getDeviceCountReply> responseObserver) {
74 responseObserver
75 .onNext(getDeviceCountReply
76 .newBuilder()
77 .setDeviceCount(
78 deviceService.getDeviceCount())
79 .build());
80 responseObserver.onCompleted();
81 }
82
83 //FIXME NOTE: this will be switched to a streaming version.
84 @Override
85 public void getDevices(getDevicesRequest request,
86 StreamObserver<DeviceServiceNb.getDevicesReply> responseObserver) {
87 getDevicesReply.Builder replyBuilder = getDevicesReply.newBuilder();
88 deviceService.getDevices().forEach(d -> {
89 replyBuilder.addDevice(
90 org.onosproject.grpc.net.models.DeviceProtoOuterClass.DeviceProto
91 .newBuilder()
92 .setDeviceId(d.id().toString())
93 .setType(
94 DeviceEnumsProto.DeviceTypeProto
95 .valueOf(d.type().toString()))
96 .setManufacturer(d.manufacturer())
97 .setHwVersion(d.hwVersion())
98 .setSwVersion(d.swVersion())
99 .setSerialNumber(d.serialNumber())
100 .setChassisId(d.chassisId().toString())
101 .build());
102 });
103 responseObserver.onNext(replyBuilder.build());
104 responseObserver.onCompleted();
105 }
106
107 //FIXME NOTE: this will be switched to a streaming version.
108 @Override
109 public void getAvailableDevices(getAvailableDevicesRequest request,
110 StreamObserver
111 <DeviceServiceNb.getAvailableDevicesReply> responseObserver) {
112 getAvailableDevicesReply.Builder replyBuilder = getAvailableDevicesReply.newBuilder();
113 deviceService.getAvailableDevices().forEach(d -> {
114 replyBuilder.addDevice(
115 org.onosproject.grpc.net.models.DeviceProtoOuterClass.DeviceProto
116 .newBuilder()
117 .setDeviceId(d.id().toString())
118 .setType(DeviceEnumsProto.DeviceTypeProto.valueOf(
119 d.type().toString()))
120 .setManufacturer(d.manufacturer())
121 .setHwVersion(d.hwVersion())
122 .setSwVersion(d.swVersion())
123 .setSerialNumber(d.serialNumber())
124 .setChassisId(d.chassisId().toString())
125 .build());
126 });
127 responseObserver.onNext(replyBuilder.build());
128 responseObserver.onCompleted();
129 }
130
131 @Override
132 public void getDevice(getDeviceRequest request,
133 io.grpc.stub.StreamObserver<DeviceServiceNb.getDeviceReply> responseObserver) {
134 org.onosproject.net.Device device = deviceService.getDevice(
135 DeviceId.deviceId(request.getDeviceId()));
136 responseObserver.onNext(
137 getDeviceReply.newBuilder().setDevice(
138 org.onosproject.grpc.net.models.DeviceProtoOuterClass.DeviceProto
139 .newBuilder()
140 .setDeviceId(device.id().toString())
141 .setType(
142 //TODO check for better approach to mapping between enum varieties
143 DeviceEnumsProto.DeviceTypeProto.valueOf(device.type().toString()))
144 .setManufacturer(device.manufacturer())
145 .setHwVersion(device.hwVersion())
146 .setSwVersion(device.swVersion())
147 .setSerialNumber(device.serialNumber())
148 .setChassisId(device.chassisId().toString())
149 .build()).build());
150 responseObserver.onCompleted();
151 }
152
153 @Override
154 public void getRole(getRoleRequest request,
155 StreamObserver<DeviceServiceNb.getRoleReply> responseObserver) {
156 DeviceId deviceId = DeviceId.deviceId(request.getDeviceId());
157 MastershipRole role = deviceService.getRole(deviceId);
158 DeviceEnumsProto.MastershipRoleProto mastershipRole =
159 DeviceEnumsProto.MastershipRoleProto.valueOf(role.toString());
160 responseObserver.onNext(getRoleReply.newBuilder()
161 .setRole(mastershipRole).build());
162 responseObserver.onCompleted();
163 }
164
165 //FIXME NOTE: this may be switched to a streaming version.
166 @Override
167 public void getPorts(getPortsRequest request, StreamObserver<getPortsReply> responseObserver) {
168 getPortsReply.Builder replyBuilder = getPortsReply.newBuilder();
169 deviceService.getPorts(
170 DeviceId.deviceId(request.getDeviceId()))
171 .forEach(port -> {
172 PortProto.Builder portBuilder = PortProto
173 .newBuilder()
174 .setPortNumber(port.number().toString())
175 .setIsEnabled(port.isEnabled())
176 .setType(PortEnumsProto.PortTypeProto.valueOf(port.type().toString()))
177 .setPortSpeed(port.portSpeed());
178 port.annotations().keys().forEach(key -> portBuilder
179 .putAnnotations(key, port.annotations().value(key)));
180
181 replyBuilder.addPort(portBuilder.build());
182 });
183 responseObserver.onNext(replyBuilder.build());
184 responseObserver.onCompleted();
185 }
186
187 //FIXME NOTE: this may be switched to a streaming version.
188 @Override
189 public void getPortStatistics(getPortStatisticsRequest request,
190 StreamObserver<getPortStatisticsReply> responseObserver) {
191 getPortStatisticsReply.Builder replyBuilder = getPortStatisticsReply.newBuilder();
192 deviceService.getPortStatistics(DeviceId.deviceId(request.getDeviceId()))
193 .forEach(statistic -> {
194 replyBuilder.addPortStatistics(
195 PortStatisticsProto
196 .newBuilder()
197 .setPort(statistic.port())
198 .setPacketsReceived(statistic.packetsReceived())
199 .setPacketsSent(statistic.packetsSent())
200 .setBytesReceived(statistic.bytesReceived())
201 .setBytesSent(statistic.bytesSent())
202 .setPacketsRxDropped(statistic.packetsRxDropped())
203 .setPacketsTxDropped(statistic.packetsTxDropped())
204 .setPacketsRxErrors(statistic.packetsRxErrors())
205 .setPacketsTxErrors(statistic.packetsTxErrors())
206 .setDurationSec(statistic.durationSec())
207 .setDurationNano(statistic.durationNano())
208 .setIsZero(statistic.isZero())
209 .build());
210 });
211 responseObserver.onNext(replyBuilder.build());
212 responseObserver.onCompleted();
213 }
214
215 //FIXME NOTE: this may be switched to a streaming version.
216 @Override
217 public void getPortDeltaStatistics(getPortDeltaStatisticsRequest request,
218 StreamObserver<getPortDeltaStatisticsReply> responseObserver) {
219 getPortDeltaStatisticsReply.Builder replyBuilder = getPortDeltaStatisticsReply.newBuilder();
220 deviceService.getPortDeltaStatistics(DeviceId.deviceId(request.getDeviceId()))
221 .forEach(statistic -> {
222 replyBuilder.addPortStatistics(
223 PortStatisticsProto
224 .newBuilder()
225 .setPort(statistic.port())
226 .setPacketsReceived(statistic.packetsReceived())
227 .setPacketsSent(statistic.packetsSent())
228 .setBytesReceived(statistic.bytesReceived())
229 .setBytesSent(statistic.bytesSent())
230 .setPacketsRxDropped(statistic.packetsRxDropped())
231 .setPacketsTxDropped(statistic.packetsTxDropped())
232 .setPacketsRxErrors(statistic.packetsRxErrors())
233 .setPacketsTxErrors(statistic.packetsTxErrors())
234 .setDurationSec(statistic.durationSec())
235 .setDurationNano(statistic.durationNano())
236 .setIsZero(statistic.isZero())
237 .build());
238 });
239 responseObserver.onNext(replyBuilder.build());
240 responseObserver.onCompleted();
241 }
242
243 @Override
244 public void getStatisticsForPort(getStatisticsForPortRequest request,
245 StreamObserver<getStatisticsForPortReply> responseObserver) {
246 org.onosproject.net.device.PortStatistics statistics = deviceService
247 .getStatisticsForPort(DeviceId.deviceId(request.getDeviceId()),
248 PortNumber.portNumber(request.getPortNumber()));
249 responseObserver.onNext(
250 getStatisticsForPortReply
251 .newBuilder()
252 .setPortStatistics(
253 PortStatisticsProto
254 .newBuilder()
255 .setPort(statistics.port())
256 .setPacketsReceived(statistics.packetsReceived())
257 .setPacketsSent(statistics.packetsSent())
258 .setBytesReceived(statistics.bytesReceived())
259 .setBytesSent(statistics.bytesSent())
260 .setPacketsRxDropped(statistics.packetsRxDropped())
261 .setPacketsTxDropped(statistics.packetsTxDropped())
262 .setPacketsRxErrors(statistics.packetsRxErrors())
263 .setPacketsTxErrors(statistics.packetsTxErrors())
264 .setDurationSec(statistics.durationSec())
265 .setDurationNano(statistics.durationNano())
266 .setIsZero(statistics.isZero())
267 .build()).build());
268 responseObserver.onCompleted();
269
270 }
271
272 @Override
273 public void getDeltaStatisticsForPort(getDeltaStatisticsForPortRequest request,
274 StreamObserver<getDeltaStatisticsForPortReply> responseObserver) {
275 org.onosproject.net.device.PortStatistics statistics = deviceService
276 .getDeltaStatisticsForPort(DeviceId.deviceId(request.getDeviceId()),
277 PortNumber.portNumber(request.getPortNumber()));
278 responseObserver.onNext(
279 getDeltaStatisticsForPortReply
280 .newBuilder()
281 .setPortStatistics(
282 PortStatisticsProto
283 .newBuilder()
284 .setPort(statistics.port())
285 .setPacketsReceived(statistics.packetsReceived())
286 .setPacketsSent(statistics.packetsSent())
287 .setBytesReceived(statistics.bytesReceived())
288 .setBytesSent(statistics.bytesSent())
289 .setPacketsRxDropped(statistics.packetsRxDropped())
290 .setPacketsTxDropped(statistics.packetsTxDropped())
291 .setPacketsRxErrors(statistics.packetsRxErrors())
292 .setPacketsTxErrors(statistics.packetsTxErrors())
293 .setDurationSec(statistics.durationSec())
294 .setDurationNano(statistics.durationNano())
295 .setIsZero(statistics.isZero())
296 .build()).build());
297 responseObserver.onCompleted();
298 }
299
300 @Override
301 public void getPort(getPortRequest request,
302 StreamObserver<getPortReply> responseObserver) {
303 //FIXME getting deviceId here is dangerous because it is not guaranteed to be populated as port of a OneOf
304 org.onosproject.net.Port port = deviceService.getPort(
305 new ConnectPoint(DeviceId.deviceId(
306 request.getConnectPoint().getDeviceId()),
307 PortNumber.portNumber(
308 request.getConnectPoint()
309 .getPortNumber())));
310 PortProto.Builder portBuilder =
311 PortProto.newBuilder()
312 .setPortNumber(port.number().toString())
313 .setIsEnabled(port.isEnabled())
314 .setType(
315 PortEnumsProto.PortTypeProto
316 .valueOf(port.type().toString()))
317 .setPortSpeed(port.portSpeed());
318
319 port.annotations().keys().forEach(key -> portBuilder
320 .putAnnotations(key, port.annotations().value(key)));
321
322 responseObserver.onNext(getPortReply
323 .newBuilder()
324 .setPort(portBuilder.build())
325 .build());
326 responseObserver.onCompleted();
327 }
328
329 @Override
330 public void isAvailable(isAvailableRequest request,
331 StreamObserver<isAvailableReply> responseObserver) {
332 responseObserver.onNext(
333 isAvailableReply
334 .newBuilder()
335 .setIsAvailable(
336 deviceService.isAvailable(
337 DeviceId.deviceId(
338 request.getDeviceId())))
339 .build());
340 responseObserver.onCompleted();
341 }
342
343 @Override
344 public void localStatus(localStatusRequest request,
345 StreamObserver<localStatusReply> responseObserver) {
346 responseObserver.onNext(
347 localStatusReply
348 .newBuilder()
349 .setStatus(
350 deviceService.localStatus(
351 DeviceId.deviceId(request.getDeviceId())))
352 .build());
353 responseObserver.onCompleted();
354 }
355 }
356}