blob: 08da69f8b923031227ca1718675d15006332ad3c [file] [log] [blame]
Zsolt Haraszti3eb27a52017-01-03 21:56:48 -08001# Copyright 2017 the original author or authors.
Zsolt Haraszti66862032016-11-28 14:28:39 -08002#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14#
15import structlog
16from grpc import StatusCode
17from twisted.internet.defer import inlineCallbacks
18from twisted.internet.defer import returnValue
19
20from common.utils.grpc_utils import twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -040021from common.utils.id_generation import create_cluster_id
Zsolt Haraszti66862032016-11-28 14:28:39 -080022from voltha.core.config.config_root import ConfigRoot
ggowdru236bd952017-06-20 20:32:55 -070023from voltha.protos.device_pb2 import PmConfigs, Images
Zsolt Haraszti66862032016-11-28 14:28:39 -080024from voltha.protos.voltha_pb2 import \
25 add_VolthaGlobalServiceServicer_to_server, VolthaLocalServiceStub, \
26 VolthaGlobalServiceServicer, Voltha, VolthaInstances, VolthaInstance, \
khenaidoo08d48d22017-06-29 19:42:49 -040027 LogicalDevice, Ports, Flows, FlowGroups, Device, SelfTestResponse, \
28 VolthaGlobalServiceStub, Devices, DeviceType, DeviceTypes, DeviceGroup, \
29 AlarmFilter, AlarmFilters
Zsolt Haraszti66862032016-11-28 14:28:39 -080030from voltha.registry import registry
31from google.protobuf.empty_pb2 import Empty
khenaidoo08d48d22017-06-29 19:42:49 -040032from dispatcher import DispatchError
Zsolt Haraszti66862032016-11-28 14:28:39 -080033
34log = structlog.get_logger()
35
36
37class GlobalHandler(VolthaGlobalServiceServicer):
Zsolt Haraszti66862032016-11-28 14:28:39 -080038 def __init__(self, dispatcher, instance_id, **init_kw):
39 self.dispatcher = dispatcher
40 self.instance_id = instance_id
41 self.init_kw = init_kw
42 self.root = None
43 self.stopped = False
44
45 def start(self):
46 log.debug('starting')
47 self.root = ConfigRoot(Voltha(**self.init_kw))
48 registry('grpc_server').register(
49 add_VolthaGlobalServiceServicer_to_server, self)
50 log.info('started')
51 return self
52
53 def stop(self):
54 log.debug('stopping')
55 self.stopped = True
56 log.info('stopped')
57
58 # gRPC service method implementations. BE CAREFUL; THESE ARE CALLED ON
59 # the gRPC threadpool threads.
60
61 @twisted_async
62 def GetVoltha(self, request, context):
63 log.info('grpc-request', request=request)
64 return self.root.get('/', depth=1)
65
66 @twisted_async
Zsolt Haraszti66862032016-11-28 14:28:39 -080067 def ListVolthaInstances(self, request, context):
68 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -040069 items = self.dispatcher.get_cluster_instances()
70 return VolthaInstances(items=items)
Zsolt Haraszti66862032016-11-28 14:28:39 -080071
72 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -040073 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -080074 def GetVolthaInstance(self, request, context):
75 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -040076 core_id = self.dispatcher.get_core_id_from_instance_id(request.id)
77 if not core_id:
78 log.info('invalid-instance-id', instance=request.id)
79 context.set_details('Voltha Instance error')
Zsolt Haraszti66862032016-11-28 14:28:39 -080080 context.set_code(StatusCode.NOT_FOUND)
khenaidoo08d48d22017-06-29 19:42:49 -040081 returnValue(VolthaInstance())
82
83 response = yield self.dispatcher.dispatch('GetVolthaInstance',
84 Empty(),
85 context,
86 core_id=core_id)
87 log.info('grpc-response', response=response)
88 if isinstance(response, DispatchError):
89 log.info('grpc-error-response', error=response.error_code)
90 context.set_details('Voltha Instance error')
91 context.set_code(response.error_code)
92 returnValue(VolthaInstance())
93 else:
94 log.info('grpc-success-response', response=response)
95 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -080096
97 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -040098 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -080099 def ListLogicalDevices(self, request, context):
khenaidoo08d48d22017-06-29 19:42:49 -0400100 log.info('grpc-request', request=request)
101 response = yield self.dispatcher.dispatch('ListLogicalDevices',
102 Empty(),
103 context,
104 broadcast=True)
105 log.info('grpc-response', response=response)
106 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800107
108 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400109 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800110 def GetLogicalDevice(self, request, context):
111 log.info('grpc-request', request=request)
112
khenaidoo08d48d22017-06-29 19:42:49 -0400113 response = yield self.dispatcher.dispatch('GetLogicalDevice',
114 request,
115 context,
116 id=request.id)
117 log.info('grpc-response', response=response)
118 if isinstance(response, DispatchError):
119 log.info('grpc-error-response', error=response.error_code)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800120 context.set_details(
khenaidoo08d48d22017-06-29 19:42:49 -0400121 'Logical device \'{}\' error'.format(request.id))
122 context.set_code(response.error_code)
123 returnValue(LogicalDevice())
124 else:
125 log.info('grpc-success-response', response=response)
126 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800127
128 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400129 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800130 def ListLogicalDevicePorts(self, request, context):
131 log.info('grpc-request', request=request)
132
khenaidoo08d48d22017-06-29 19:42:49 -0400133 response = yield self.dispatcher.dispatch('ListLogicalDevicePorts',
134 request,
135 context,
136 id=request.id)
137 log.info('grpc-response', response=response)
138 if isinstance(response, DispatchError):
139 log.info('grpc-error-response', error=response.error_code)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800140 context.set_details(
khenaidoo08d48d22017-06-29 19:42:49 -0400141 'Logical device ports \'{}\' error'.format(request.id))
142 context.set_code(response.error_code)
143 returnValue(Ports())
144 else:
145 log.info('grpc-success-response', response=response)
146 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800147
148 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400149 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800150 def ListLogicalDeviceFlows(self, request, context):
151 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400152 response = yield self.dispatcher.dispatch('ListLogicalDeviceFlows',
153 request,
154 context,
155 id=request.id)
156 log.info('grpc-response', response=response)
157 if isinstance(response, DispatchError):
158 log.info('grpc-error-response', error=response.error_code)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800159 context.set_details(
khenaidoo08d48d22017-06-29 19:42:49 -0400160 'Logical device \'{}\' error'.format(request.id))
161 context.set_code(response.error_code)
162 returnValue(Flows())
163 else:
164 log.info('grpc-success-response', response=response)
165 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800166
167 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400168 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800169 def UpdateLogicalDeviceFlowTable(self, request, context):
170 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400171 response = yield self.dispatcher.dispatch(
Zsolt Haraszti66862032016-11-28 14:28:39 -0800172 'UpdateLogicalDeviceFlowTable',
173 request,
khenaidoo08d48d22017-06-29 19:42:49 -0400174 context,
175 id=request.id)
176 log.info('grpc-response', response=response)
177 if isinstance(response, DispatchError):
178 log.info('grpc-error-response', error=response.error_code)
179 context.set_details(
180 'Logical device \'{}\' error'.format(request.id))
181 context.set_code(response.error_code)
182 returnValue(Empty())
183 else:
184 log.info('grpc-success-response', response=response)
185 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800186
187 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400188 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800189 def ListLogicalDeviceFlowGroups(self, request, context):
190 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400191 response = yield self.dispatcher.dispatch(
Zsolt Haraszti66862032016-11-28 14:28:39 -0800192 'ListLogicalDeviceFlowGroups',
193 request,
khenaidoo08d48d22017-06-29 19:42:49 -0400194 context,
195 id=request.id)
196 log.info('grpc-response', response=response)
197 if isinstance(response, DispatchError):
198 log.info('grpc-error-response', error=response.error_code)
199 context.set_details(
200 'Logical device \'{}\' error'.format(request.id))
201 context.set_code(response.error_code)
202 returnValue(FlowGroups())
203 else:
204 log.info('grpc-success-response', response=response)
205 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800206
207 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400208 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800209 def UpdateLogicalDeviceFlowGroupTable(self, request, context):
210 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400211 response = yield self.dispatcher.dispatch(
Zsolt Haraszti66862032016-11-28 14:28:39 -0800212 'UpdateLogicalDeviceFlowGroupTable',
213 request,
khenaidoo08d48d22017-06-29 19:42:49 -0400214 context,
215 id=request.id)
216 log.info('grpc-response', response=response)
217 if isinstance(response, DispatchError):
218 log.info('grpc-error-response', error=response.error_code)
219 context.set_details(
220 'Logical device \'{}\' error'.format(request.id))
221 context.set_code(response.error_code)
222 returnValue(Empty())
223 else:
224 log.info('grpc-success-response', response=response)
225 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800226
227 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400228 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800229 def ListDevices(self, request, context):
khenaidoo08d48d22017-06-29 19:42:49 -0400230 log.info('grpc-request', request=request)
231 response = yield self.dispatcher.dispatch('ListDevices',
232 Empty(),
233 context,
234 broadcast=True)
235 log.info('grpc-response', response=response)
236 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800237
238 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400239 @inlineCallbacks
khenaidoo997edbc2017-07-13 10:25:58 -0400240 def ListAdapters(self, request, context):
241 log.info('grpc-request', request=request)
242 response = yield self.dispatcher.dispatch('ListAdapters',
243 Empty(),
244 context,
245 broadcast=True)
246 log.info('grpc-response', response=response)
247 returnValue(response)
248
249 @twisted_async
250 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800251 def GetDevice(self, request, context):
252 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400253 response = yield self.dispatcher.dispatch('GetDevice',
254 request,
255 context,
256 id=request.id)
257 log.info('grpc-response', response=response)
258 if isinstance(response, DispatchError):
259 log.info('grpc-error-response', error=response.error_code)
260 context.set_details('Device \'{}\' error'.format(request.id))
261 context.set_code(response.error_code)
262 returnValue(Device())
263 else:
264 log.info('grpc-success-response', response=response)
265 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800266
267 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400268 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800269 def CreateDevice(self, request, context):
270 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400271 response = yield self.dispatcher.dispatch('CreateDevice',
272 request,
273 context)
274 log.info('grpc-response', response=response)
275 if isinstance(response, DispatchError):
276 log.info('grpc-error-response', error=response.error_code)
277 context.set_details('Create device error')
278 context.set_code(response.error_code)
279 returnValue(Device())
280 else:
281 log.info('grpc-success-response', response=response)
282 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800283
284 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400285 @inlineCallbacks
Khen Nursimulud068d812017-03-06 11:44:18 -0500286 def EnableDevice(self, request, context):
Zsolt Haraszti66862032016-11-28 14:28:39 -0800287 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400288 response = yield self.dispatcher.dispatch('EnableDevice',
289 request,
290 context,
291 id=request.id)
292 log.info('grpc-response', response=response)
293 if isinstance(response, DispatchError):
294 log.info('grpc-error-response', error=response.error_code)
295 context.set_details('Device \'{}\' error'.format(request.id))
296 context.set_code(response.error_code)
297 returnValue(Device())
298 else:
299 log.info('grpc-success-response', response=response)
300 returnValue(response)
Khen Nursimulud068d812017-03-06 11:44:18 -0500301
302 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400303 @inlineCallbacks
Khen Nursimulud068d812017-03-06 11:44:18 -0500304 def DisableDevice(self, request, context):
305 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400306 response = yield self.dispatcher.dispatch('DisableDevice',
307 request,
308 context,
309 id=request.id)
310 log.info('grpc-response', response=response)
311 if isinstance(response, DispatchError):
312 log.info('grpc-error-response', error=response.error_code)
313 context.set_details('Device \'{}\' error'.format(request.id))
314 context.set_code(response.error_code)
315 returnValue(Device())
316 else:
317 log.info('grpc-success-response', response=response)
318 returnValue(response)
Khen Nursimulud068d812017-03-06 11:44:18 -0500319
320 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400321 @inlineCallbacks
Khen Nursimulud068d812017-03-06 11:44:18 -0500322 def RebootDevice(self, request, context):
323 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400324 response = yield self.dispatcher.dispatch('RebootDevice',
325 request,
326 context,
327 id=request.id)
328 log.info('grpc-response', response=response)
329 if isinstance(response, DispatchError):
330 log.info('grpc-error-response', error=response.error_code)
331 context.set_details('Device \'{}\' error'.format(request.id))
332 context.set_code(response.error_code)
333 returnValue(Device())
334 else:
335 log.info('grpc-success-response', response=response)
336 returnValue(response)
Khen Nursimulud068d812017-03-06 11:44:18 -0500337
338 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400339 @inlineCallbacks
Khen Nursimulud068d812017-03-06 11:44:18 -0500340 def DeleteDevice(self, request, context):
341 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400342 response = yield self.dispatcher.dispatch('DeleteDevice',
343 request,
344 context,
345 id=request.id)
346 log.info('grpc-response', response=response)
347 if isinstance(response, DispatchError):
348 log.info('grpc-error-response', error=response.error_code)
349 context.set_details('Device \'{}\' error'.format(request.id))
350 context.set_code(response.error_code)
351 returnValue(Empty())
352 else:
353 log.info('grpc-success-response', response=response)
354 returnValue(Empty())
Zsolt Haraszti66862032016-11-28 14:28:39 -0800355
356 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400357 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800358 def ListDevicePorts(self, request, context):
359 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400360 response = yield self.dispatcher.dispatch('ListDevicePorts',
361 request,
362 context,
363 id=request.id)
364 log.info('grpc-response', response=response)
365 if isinstance(response, DispatchError):
366 log.info('grpc-error-response', error=response.error_code)
367 context.set_details('Device \'{}\' error'.format(request.id))
368 context.set_code(response.error_code)
369 returnValue(Ports())
370 else:
371 log.info('grpc-success-response', response=response)
372 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800373
Sergio Slobodriana2eb52b2017-03-07 12:24:46 -0500374 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400375 @inlineCallbacks
Sergio Slobodriana2eb52b2017-03-07 12:24:46 -0500376 def ListDevicePmConfigs(self, request, context):
Sergio Slobodrian71960022017-03-09 10:20:57 -0500377 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400378 response = yield self.dispatcher.dispatch('ListDevicePmConfigs',
379 request,
380 context,
381 id=request.id)
382 log.info('grpc-response', response=response)
383 if isinstance(response, DispatchError):
384 log.info('grpc-error-response', error=response.error_code)
385 context.set_details('Device \'{}\' error'.format(request.id))
386 context.set_code(response.error_code)
387 returnValue(PmConfigs())
388 else:
389 log.info('grpc-success-response', response=response)
390 returnValue(response)
Sergio Slobodriana2eb52b2017-03-07 12:24:46 -0500391
Sergio Slobodriana2eb52b2017-03-07 12:24:46 -0500392 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400393 @inlineCallbacks
Sergio Slobodriana2eb52b2017-03-07 12:24:46 -0500394 def UpdateDevicePmConfigs(self, request, context):
Sergio Slobodrian4236ade2017-03-17 22:01:20 -0400395 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400396 response = yield self.dispatcher.dispatch('UpdateDevicePmConfigs',
397 request,
398 context,
399 id=request.id)
400 log.info('grpc-response', response=response)
401 if isinstance(response, DispatchError):
402 log.info('grpc-error-response', error=response.error_code)
403 context.set_details('Device \'{}\' error'.format(request.id))
404 context.set_code(response.error_code)
405 returnValue(Empty())
406 else:
407 log.info('grpc-success-response', response=response)
408 returnValue(response)
Sergio Slobodriana2eb52b2017-03-07 12:24:46 -0500409
Zsolt Haraszti66862032016-11-28 14:28:39 -0800410 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400411 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800412 def ListDeviceFlows(self, request, context):
413 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400414 response = yield self.dispatcher.dispatch('ListDeviceFlows',
415 request,
416 context,
417 id=request.id)
418 log.info('grpc-response', response=response)
419 if isinstance(response, DispatchError):
420 log.info('grpc-error-response', error=response.error_code)
421 context.set_details('Device \'{}\' error'.format(request.id))
422 context.set_code(response.error_code)
423 returnValue(Flows())
424 else:
425 log.info('grpc-success-response', response=response)
426 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800427
428 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400429 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800430 def ListDeviceFlowGroups(self, request, context):
431 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400432 response = yield self.dispatcher.dispatch('ListDeviceFlowGroups',
433 request,
434 context,
435 id=request.id)
436 log.info('grpc-response', response=response)
437 if isinstance(response, DispatchError):
438 log.info('grpc-error-response', error=response.error_code)
439 context.set_details('Device \'{}\' error'.format(request.id))
440 context.set_code(response.error_code)
441 returnValue(FlowGroups())
442 else:
443 log.info('grpc-success-response', response=response)
444 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800445
446 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400447 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800448 def ListDeviceTypes(self, request, context):
449 log.info('grpc-request', request=request)
450 # we always deflect this to the local instance, as we assume
451 # they all loaded the same adapters, supporting the same device
452 # types
khenaidoo08d48d22017-06-29 19:42:49 -0400453 response = yield self.dispatcher.dispatch('ListDeviceTypes',
454 request,
455 context)
456 log.info('grpc-response', response=response)
457 if isinstance(response, DispatchError):
458 log.info('grpc-error-response', error=response.error_code)
459 context.set_details('Device types error')
460 context.set_code(response.error_code)
461 returnValue(DeviceTypes())
462 else:
463 log.info('grpc-success-response', response=response)
464 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800465
466 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400467 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800468 def GetDeviceType(self, request, context):
469 log.info('grpc-request', request=request)
470 # we always deflect this to the local instance, as we assume
471 # they all loaded the same adapters, supporting the same device
472 # types
khenaidoo08d48d22017-06-29 19:42:49 -0400473 response = yield self.dispatcher.dispatch('GetDeviceType',
474 request,
475 context)
476 log.info('grpc-response', response=response)
477 if isinstance(response, DispatchError):
478 log.info('grpc-error-response', error=response.error_code)
479 context.set_details('Device type \'{}\' error'.format(
480 request.id))
481 context.set_code(response.error_code)
482 returnValue(DeviceType())
483 else:
484 log.info('grpc-success-response', response=response)
485 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800486
487 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400488 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800489 def ListDeviceGroups(self, request, context):
khenaidoo08d48d22017-06-29 19:42:49 -0400490 log.info('grpc-request', request=request)
491 response = yield self.dispatcher.dispatch('ListDeviceGroups',
492 Empty(),
493 context,
494 broadcast=True)
495 log.info('grpc-response', response=response)
496 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800497
498 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400499 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800500 def GetDeviceGroup(self, request, context):
khenaidoo08d48d22017-06-29 19:42:49 -0400501 log.info('grpc-request', request=request)
502 response = yield self.dispatcher.dispatch('GetDeviceGroup',
503 request,
504 context,
505 id=request.id)
506 log.info('grpc-response', response=response)
507 if isinstance(response, DispatchError):
508 log.info('grpc-error-response', error=response.error_code)
509 context.set_details('Device group\'{}\' error'.format(request.id))
510 context.set_code(response.error_code)
511 returnValue(DeviceGroup())
512 else:
513 log.info('grpc-success-response', response=response)
514 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800515
Nikolay Titov89004ec2017-06-19 18:22:42 -0400516 # bbf_fiber rpcs start
517 @twisted_async
518 def GetAllChannelgroupConfig(self, request, context):
519 log.warning('temp-limited-implementation')
520 # TODO dispatching to local instead of collecting all
521 return self.dispatcher.dispatch(
522 self.instance_id,
523 VolthaLocalServiceStub,
524 'GetAllChannelgroupConfig',
525 request,
526 context)
527
528 @twisted_async
529 def CreateChannelgroup(self, request, context):
530 log.warning('temp-limited-implementation')
531 # TODO dispatching to local instead of collecting all
532 return self.dispatcher.dispatch(
533 self.instance_id,
534 VolthaLocalServiceStub,
535 'CreateChannelgroup',
536 request,
537 context)
538
539 @twisted_async
540 def UpdateChannelgroup(self, request, context):
541 log.warning('temp-limited-implementation')
542 # TODO dispatching to local instead of collecting all
543 return self.dispatcher.dispatch(
544 self.instance_id,
545 VolthaLocalServiceStub,
546 'UpdateChannelgroup',
547 request,
548 context)
549
550 @twisted_async
551 def DeleteChannelgroup(self, request, context):
552 log.warning('temp-limited-implementation')
553 # TODO dispatching to local instead of collecting all
554 return self.dispatcher.dispatch(
555 self.instance_id,
556 VolthaLocalServiceStub,
557 'DeleteChannelgroup',
558 request,
559 context)
560
561 @twisted_async
562 def GetAllChannelpartitionConfig(self, request, context):
563 log.warning('temp-limited-implementation')
564 # TODO dispatching to local instead of collecting all
565 return self.dispatcher.dispatch(
566 self.instance_id,
567 VolthaLocalServiceStub,
568 'GetAllChannelpartitionConfig',
569 request,
570 context)
571
572 @twisted_async
573 def CreateChannelpartition(self, request, context):
574 log.warning('temp-limited-implementation')
575 # TODO dispatching to local instead of collecting all
576 return self.dispatcher.dispatch(
577 self.instance_id,
578 VolthaLocalServiceStub,
579 'CreateChannelpartition',
580 request,
581 context)
582
583 @twisted_async
584 def UpdateChannelpartition(self, request, context):
585 log.warning('temp-limited-implementation')
586 # TODO dispatching to local instead of collecting all
587 return self.dispatcher.dispatch(
588 self.instance_id,
589 VolthaLocalServiceStub,
590 'UpdateChannelpartition',
591 request,
592 context)
593
594 @twisted_async
595 def DeleteChannelpartition(self, request, context):
596 log.warning('temp-limited-implementation')
597 # TODO dispatching to local instead of collecting all
598 return self.dispatcher.dispatch(
599 self.instance_id,
600 VolthaLocalServiceStub,
601 'DeleteChannelpartition',
602 request,
603 context)
604
605 @twisted_async
606 def GetAllChannelpairConfig(self, request, context):
607 log.warning('temp-limited-implementation')
608 # TODO dispatching to local instead of collecting all
609 return self.dispatcher.dispatch(
610 self.instance_id,
611 VolthaLocalServiceStub,
612 'GetAllChannelpairConfig',
613 request,
614 context)
615
616 @twisted_async
617 def CreateChannelpair(self, request, context):
618 log.warning('temp-limited-implementation')
619 # TODO dispatching to local instead of collecting all
620 return self.dispatcher.dispatch(
621 self.instance_id,
622 VolthaLocalServiceStub,
623 'CreateChannelpair',
624 request,
625 context)
626
627 @twisted_async
628 def UpdateChannelpair(self, request, context):
629 log.warning('temp-limited-implementation')
630 # TODO dispatching to local instead of collecting all
631 return self.dispatcher.dispatch(
632 self.instance_id,
633 VolthaLocalServiceStub,
634 'UpdateChannelpair',
635 request,
636 context)
637
638 @twisted_async
639 def DeleteChannelpair(self, request, context):
640 log.warning('temp-limited-implementation')
641 # TODO dispatching to local instead of collecting all
642 return self.dispatcher.dispatch(
643 self.instance_id,
644 VolthaLocalServiceStub,
645 'DeleteChannelpair',
646 request,
647 context)
648
649 @twisted_async
Rachit Shrivastava8f4f9bf2017-07-20 11:59:30 -0400650 @inlineCallbacks
Nikolay Titov89004ec2017-06-19 18:22:42 -0400651 def GetAllChannelterminationConfig(self, request, context):
Rachit Shrivastava8f4f9bf2017-07-20 11:59:30 -0400652 log.info('grpc-request', request=request)
653 response = yield self.dispatcher.dispatch(
Nikolay Titov89004ec2017-06-19 18:22:42 -0400654 'GetAllChannelterminationConfig',
655 request,
Rachit Shrivastava8f4f9bf2017-07-20 11:59:30 -0400656 context,
657 id=request.id)
658 log.info('grpc-response', response=response)
659 if isinstance(response, DispatchError):
660 log.info('grpc-error-response', error=response.error_code)
661 context.set_details('Channeltermination \'{}\' error'.format(
662 request.id))
663 context.set_code(response.error_code)
664 returnValue(Empty())
665 else:
666 log.info('grpc-success-response', response=response)
667 returnValue(response)
Nikolay Titov89004ec2017-06-19 18:22:42 -0400668
669 @twisted_async
Rachit Shrivastava8f4f9bf2017-07-20 11:59:30 -0400670 @inlineCallbacks
Nikolay Titov89004ec2017-06-19 18:22:42 -0400671 def CreateChanneltermination(self, request, context):
Rachit Shrivastava8f4f9bf2017-07-20 11:59:30 -0400672 log.info('grpc-request', request=request)
673 response = yield self.dispatcher.dispatch(
Nikolay Titov89004ec2017-06-19 18:22:42 -0400674 'CreateChanneltermination',
675 request,
Rachit Shrivastava8f4f9bf2017-07-20 11:59:30 -0400676 context,
677 id=request.id)
678 log.info('grpc-response', response=response)
679 if isinstance(response, DispatchError):
680 log.info('grpc-error-response', error=response.error_code)
681 context.set_details('Channeltermination \'{}\' error'.format(
682 request.id))
683 context.set_code(response.error_code)
684 returnValue(Empty())
685 else:
686 log.info('grpc-success-response', response=response)
687 returnValue(response)
Nikolay Titov89004ec2017-06-19 18:22:42 -0400688
689 @twisted_async
Rachit Shrivastava8f4f9bf2017-07-20 11:59:30 -0400690 @inlineCallbacks
Nikolay Titov89004ec2017-06-19 18:22:42 -0400691 def UpdateChanneltermination(self, request, context):
Rachit Shrivastava8f4f9bf2017-07-20 11:59:30 -0400692 log.info('grpc-request', request=request)
693 response = yield self.dispatcher.dispatch(
Nikolay Titov89004ec2017-06-19 18:22:42 -0400694 'UpdateChanneltermination',
695 request,
Rachit Shrivastava8f4f9bf2017-07-20 11:59:30 -0400696 context,
697 id=request.id)
698 log.info('grpc-response', response=response)
699 if isinstance(response, DispatchError):
700 log.info('grpc-error-response', error=response.error_code)
701 context.set_details('Channeltermination \'{}\' error'.format(
702 request.id))
703 context.set_code(response.error_code)
704 returnValue(Empty())
705 else:
706 log.info('grpc-success-response', response=response)
707 returnValue(response)
Nikolay Titov89004ec2017-06-19 18:22:42 -0400708
709 @twisted_async
Rachit Shrivastava8f4f9bf2017-07-20 11:59:30 -0400710 @inlineCallbacks
Nikolay Titov89004ec2017-06-19 18:22:42 -0400711 def DeleteChanneltermination(self, request, context):
Rachit Shrivastava8f4f9bf2017-07-20 11:59:30 -0400712 log.info('grpc-request', request=request)
713 response = yield self.dispatcher.dispatch(
Nikolay Titov89004ec2017-06-19 18:22:42 -0400714 'DeleteChanneltermination',
715 request,
Rachit Shrivastava8f4f9bf2017-07-20 11:59:30 -0400716 context,
717 id=request.id)
718 log.info('grpc-response', response=response)
719 if isinstance(response, DispatchError):
720 log.info('grpc-error-response', error=response.error_code)
721 context.set_details('Channeltermination \'{}\' error'.format(
722 request.id))
723 context.set_code(response.error_code)
724 returnValue(Empty())
725 else:
726 log.info('grpc-success-response', response=response)
727 returnValue(response)
Nikolay Titov89004ec2017-06-19 18:22:42 -0400728
729 @twisted_async
730 def GetAllOntaniConfig(self, request, context):
731 log.warning('temp-limited-implementation')
732 # TODO dispatching to local instead of collecting all
733 return self.dispatcher.dispatch(
734 self.instance_id,
735 VolthaLocalServiceStub,
736 'GetAllOntaniConfig',
737 request,
738 context)
739
740 @twisted_async
741 def CreateOntani(self, request, context):
742 log.warning('temp-limited-implementation')
743 # TODO dispatching to local instead of collecting all
744 return self.dispatcher.dispatch(
745 self.instance_id,
746 VolthaLocalServiceStub,
747 'CreateOntani',
748 request,
749 context)
750
751 @twisted_async
752 def UpdateOntani(self, request, context):
753 log.warning('temp-limited-implementation')
754 # TODO dispatching to local instead of collecting all
755 return self.dispatcher.dispatch(
756 self.instance_id,
757 VolthaLocalServiceStub,
758 'UpdateOntani',
759 request,
760 context)
761
762 @twisted_async
763 def DeleteOntani(self, request, context):
764 log.warning('temp-limited-implementation')
765 # TODO dispatching to local instead of collecting all
766 return self.dispatcher.dispatch(
767 self.instance_id,
768 VolthaLocalServiceStub,
769 'DeleteOntani',
770 request,
771 context)
772
773 @twisted_async
774 def GetAllVOntaniConfig(self, request, context):
775 log.warning('temp-limited-implementation')
776 # TODO dispatching to local instead of collecting all
777 return self.dispatcher.dispatch(
778 self.instance_id,
779 VolthaLocalServiceStub,
780 'GetAllVOntaniConfig',
781 request,
782 context)
783
784 @twisted_async
785 def CreateVOntani(self, request, context):
786 log.warning('temp-limited-implementation')
787 # TODO dispatching to local instead of collecting all
788 return self.dispatcher.dispatch(
789 self.instance_id,
790 VolthaLocalServiceStub,
791 'CreateVOntani',
792 request,
793 context)
794
795 @twisted_async
796 def UpdateVOntani(self, request, context):
797 log.warning('temp-limited-implementation')
798 # TODO dispatching to local instead of collecting all
799 return self.dispatcher.dispatch(
800 self.instance_id,
801 VolthaLocalServiceStub,
802 'UpdateVOntani',
803 request,
804 context)
805
806 @twisted_async
807 def DeleteVOntani(self, request, context):
808 log.warning('temp-limited-implementation')
809 # TODO dispatching to local instead of collecting all
810 return self.dispatcher.dispatch(
811 self.instance_id,
812 VolthaLocalServiceStub,
813 'DeleteVOntani',
814 request,
815 context)
816
817 @twisted_async
818 def GetAllVEnetConfig(self, request, context):
819 log.warning('temp-limited-implementation')
820 # TODO dispatching to local instead of collecting all
821 return self.dispatcher.dispatch(
822 self.instance_id,
823 VolthaLocalServiceStub,
824 'GetAllVEnetConfig',
825 request,
826 context)
827
828 @twisted_async
829 def CreateVEnet(self, request, context):
830 log.warning('temp-limited-implementation')
831 # TODO dispatching to local instead of collecting all
832 return self.dispatcher.dispatch(
833 self.instance_id,
834 VolthaLocalServiceStub,
835 'CreateVEnet',
836 request,
837 context)
838
839 @twisted_async
840 def UpdateVEnet(self, request, context):
841 log.warning('temp-limited-implementation')
842 # TODO dispatching to local instead of collecting all
843 return self.dispatcher.dispatch(
844 self.instance_id,
845 VolthaLocalServiceStub,
846 'UpdateVEnet',
847 request,
848 context)
849
850 @twisted_async
851 def DeleteVEnet(self, request, context):
852 log.warning('temp-limited-implementation')
853 # TODO dispatching to local instead of collecting all
854 return self.dispatcher.dispatch(
855 self.instance_id,
856 VolthaLocalServiceStub,
857 'DeleteVEnet',
858 request,
859 context)
860 # bbf_fiber rpcs end
861
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400862 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400863 @inlineCallbacks
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400864 def CreateAlarmFilter(self, request, context):
865 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400866 # Since AlarmFilter applies to the entire cluster, it will be assigned
867 # a global id (using a global core_id). Every Voltha instance will
868 # have the same data. Since the voltha instances are managed by
869 # docker swarm mode then whenever an instance goes down it will be
870 # brought up right away, hence reducing the chance of two instances
871 # having different data. In future phases, we should adopt the
872 # strategy of having a unique persistence model for cluster data
873 # compare to instance data
874 try:
875 assert isinstance(request, AlarmFilter)
876 request.id = create_cluster_id()
877 except AssertionError, e:
878 context.set_details(e.message)
879 context.set_code(StatusCode.INVALID_ARGUMENT)
880 returnValue(AlarmFilter())
881
882 response = yield self.dispatcher.dispatch('CreateAlarmFilter',
883 request,
884 context,
885 id=request.id,
886 broadcast=True)
887 log.info('grpc-response', response=response)
888 if isinstance(response, DispatchError):
889 log.info('grpc-error-response', error=response.error_code)
890 context.set_details('Create alarm error')
891 context.set_code(response.error_code)
892 returnValue(AlarmFilter())
893 else:
894 log.info('grpc-success-response', response=response)
895 returnValue(response)
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400896
897 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400898 @inlineCallbacks
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400899 def GetAlarmFilter(self, request, context):
khenaidoo08d48d22017-06-29 19:42:49 -0400900 log.info('grpc-request', request=request)
901 response = yield self.dispatcher.dispatch('GetAlarmFilter',
902 request,
903 context,
904 id=request.id)
905 log.info('grpc-response', response=response)
906 if isinstance(response, DispatchError):
907 log.info('grpc-error-response', error=response.error_code)
908 context.set_details('Alarm filter\'{}\' error'.format(request.id))
909 context.set_code(response.error_code)
910 returnValue(AlarmFilter())
911 else:
912 log.info('grpc-success-response', response=response)
913 returnValue(response)
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400914
915 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400916 @inlineCallbacks
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400917 def UpdateAlarmFilter(self, request, context):
918 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400919 response = yield self.dispatcher.dispatch('UpdateAlarmFilter',
920 request,
921 context,
922 id=request.id,
923 broadcast=True)
924 log.info('grpc-response', response=response)
925 if isinstance(response, DispatchError):
926 log.info('grpc-error-response', error=response.error_code)
927 context.set_details('Alarm filter\'{}\' error'.format(request.id))
928 context.set_code(response.error_code)
929 returnValue(AlarmFilter())
930 else:
931 log.info('grpc-success-response', response=response)
932 returnValue(response)
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400933
934 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400935 @inlineCallbacks
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400936 def DeleteAlarmFilter(self, request, context):
937 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400938 response = yield self.dispatcher.dispatch('DeleteAlarmFilter',
939 request,
940 context,
941 id=request.id,
942 broadcast=True)
943 log.info('grpc-response', response=response)
944 if isinstance(response, DispatchError):
945 log.info('grpc-error-response', error=response.error_code)
946 context.set_details('Alarm filter\'{}\' error'.format(request.id))
947 context.set_code(response.error_code)
948 returnValue(Empty())
949 else:
950 log.info('grpc-success-response', response=response)
951 returnValue(Empty())
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400952
953 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400954 @inlineCallbacks
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400955 def ListAlarmFilters(self, request, context):
khenaidoo08d48d22017-06-29 19:42:49 -0400956 log.info('grpc-request', request=request)
957 response = yield self.dispatcher.dispatch('ListAlarmFilters',
958 Empty(),
959 context,
960 broadcast=True)
961 log.info('grpc-response', response=response)
962 if isinstance(response, DispatchError):
963 log.info('grpc-error-response', error=response.error_code)
964 context.set_details('Alarm filters error')
965 context.set_code(response.error_code)
966 returnValue(AlarmFilter())
967 else:
968 log.info('grpc-success-response', response=response)
969 returnValue(response)
ggowdru236bd952017-06-20 20:32:55 -0700970
971 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400972 @inlineCallbacks
ggowdru236bd952017-06-20 20:32:55 -0700973 def GetImages(self, request, context):
974 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400975 response = yield self.dispatcher.dispatch('GetImages',
976 request,
977 context,
978 id=request.id)
979 log.info('grpc-response', response=response)
980 if isinstance(response, DispatchError):
981 log.info('grpc-error-response', error=response.error_code)
982 context.set_details('Device \'{}\' error'.format(request.id))
983 context.set_code(response.error_code)
984 returnValue(Images())
985 else:
986 log.info('grpc-success-response', response=response)
987 returnValue(response)
sathishg5ae86222017-06-28 15:16:29 +0530988
989 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400990 @inlineCallbacks
sathishg5ae86222017-06-28 15:16:29 +0530991 def SelfTest(self, request, context):
992 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400993 response = yield self.dispatcher.dispatch('SelfTest',
994 request,
995 context,
996 id=request.id)
997 log.info('grpc-response', response=response)
998 if isinstance(response, DispatchError):
999 log.info('grpc-error-response', error=response.error_code)
1000 context.set_details('Device \'{}\' error'.format(request.id))
1001 context.set_code(response.error_code)
1002 returnValue(SelfTestResponse())
1003 else:
1004 log.info('grpc-success-response', response=response)
1005 returnValue(response)