blob: 7c808264ad46aea1cee0b57ff821de1e9b3cb8d1 [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
Zsolt Haraszti66862032016-11-28 14:28:39 -0800240 def GetDevice(self, request, context):
241 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400242 response = yield self.dispatcher.dispatch('GetDevice',
243 request,
244 context,
245 id=request.id)
246 log.info('grpc-response', response=response)
247 if isinstance(response, DispatchError):
248 log.info('grpc-error-response', error=response.error_code)
249 context.set_details('Device \'{}\' error'.format(request.id))
250 context.set_code(response.error_code)
251 returnValue(Device())
252 else:
253 log.info('grpc-success-response', response=response)
254 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800255
256 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400257 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800258 def CreateDevice(self, request, context):
259 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400260 response = yield self.dispatcher.dispatch('CreateDevice',
261 request,
262 context)
263 log.info('grpc-response', response=response)
264 if isinstance(response, DispatchError):
265 log.info('grpc-error-response', error=response.error_code)
266 context.set_details('Create device error')
267 context.set_code(response.error_code)
268 returnValue(Device())
269 else:
270 log.info('grpc-success-response', response=response)
271 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800272
273 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400274 @inlineCallbacks
Khen Nursimulud068d812017-03-06 11:44:18 -0500275 def EnableDevice(self, request, context):
Zsolt Haraszti66862032016-11-28 14:28:39 -0800276 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400277 response = yield self.dispatcher.dispatch('EnableDevice',
278 request,
279 context,
280 id=request.id)
281 log.info('grpc-response', response=response)
282 if isinstance(response, DispatchError):
283 log.info('grpc-error-response', error=response.error_code)
284 context.set_details('Device \'{}\' error'.format(request.id))
285 context.set_code(response.error_code)
286 returnValue(Device())
287 else:
288 log.info('grpc-success-response', response=response)
289 returnValue(response)
Khen Nursimulud068d812017-03-06 11:44:18 -0500290
291 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400292 @inlineCallbacks
Khen Nursimulud068d812017-03-06 11:44:18 -0500293 def DisableDevice(self, request, context):
294 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400295 response = yield self.dispatcher.dispatch('DisableDevice',
296 request,
297 context,
298 id=request.id)
299 log.info('grpc-response', response=response)
300 if isinstance(response, DispatchError):
301 log.info('grpc-error-response', error=response.error_code)
302 context.set_details('Device \'{}\' error'.format(request.id))
303 context.set_code(response.error_code)
304 returnValue(Device())
305 else:
306 log.info('grpc-success-response', response=response)
307 returnValue(response)
Khen Nursimulud068d812017-03-06 11:44:18 -0500308
309 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400310 @inlineCallbacks
Khen Nursimulud068d812017-03-06 11:44:18 -0500311 def RebootDevice(self, request, context):
312 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400313 response = yield self.dispatcher.dispatch('RebootDevice',
314 request,
315 context,
316 id=request.id)
317 log.info('grpc-response', response=response)
318 if isinstance(response, DispatchError):
319 log.info('grpc-error-response', error=response.error_code)
320 context.set_details('Device \'{}\' error'.format(request.id))
321 context.set_code(response.error_code)
322 returnValue(Device())
323 else:
324 log.info('grpc-success-response', response=response)
325 returnValue(response)
Khen Nursimulud068d812017-03-06 11:44:18 -0500326
327 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400328 @inlineCallbacks
Khen Nursimulud068d812017-03-06 11:44:18 -0500329 def DeleteDevice(self, request, context):
330 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400331 response = yield self.dispatcher.dispatch('DeleteDevice',
332 request,
333 context,
334 id=request.id)
335 log.info('grpc-response', response=response)
336 if isinstance(response, DispatchError):
337 log.info('grpc-error-response', error=response.error_code)
338 context.set_details('Device \'{}\' error'.format(request.id))
339 context.set_code(response.error_code)
340 returnValue(Empty())
341 else:
342 log.info('grpc-success-response', response=response)
343 returnValue(Empty())
Zsolt Haraszti66862032016-11-28 14:28:39 -0800344
345 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400346 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800347 def ListDevicePorts(self, request, context):
348 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400349 response = yield self.dispatcher.dispatch('ListDevicePorts',
350 request,
351 context,
352 id=request.id)
353 log.info('grpc-response', response=response)
354 if isinstance(response, DispatchError):
355 log.info('grpc-error-response', error=response.error_code)
356 context.set_details('Device \'{}\' error'.format(request.id))
357 context.set_code(response.error_code)
358 returnValue(Ports())
359 else:
360 log.info('grpc-success-response', response=response)
361 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800362
Sergio Slobodriana2eb52b2017-03-07 12:24:46 -0500363 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400364 @inlineCallbacks
Sergio Slobodriana2eb52b2017-03-07 12:24:46 -0500365 def ListDevicePmConfigs(self, request, context):
Sergio Slobodrian71960022017-03-09 10:20:57 -0500366 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400367 response = yield self.dispatcher.dispatch('ListDevicePmConfigs',
368 request,
369 context,
370 id=request.id)
371 log.info('grpc-response', response=response)
372 if isinstance(response, DispatchError):
373 log.info('grpc-error-response', error=response.error_code)
374 context.set_details('Device \'{}\' error'.format(request.id))
375 context.set_code(response.error_code)
376 returnValue(PmConfigs())
377 else:
378 log.info('grpc-success-response', response=response)
379 returnValue(response)
Sergio Slobodriana2eb52b2017-03-07 12:24:46 -0500380
Sergio Slobodriana2eb52b2017-03-07 12:24:46 -0500381 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400382 @inlineCallbacks
Sergio Slobodriana2eb52b2017-03-07 12:24:46 -0500383 def UpdateDevicePmConfigs(self, request, context):
Sergio Slobodrian4236ade2017-03-17 22:01:20 -0400384 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400385 response = yield self.dispatcher.dispatch('UpdateDevicePmConfigs',
386 request,
387 context,
388 id=request.id)
389 log.info('grpc-response', response=response)
390 if isinstance(response, DispatchError):
391 log.info('grpc-error-response', error=response.error_code)
392 context.set_details('Device \'{}\' error'.format(request.id))
393 context.set_code(response.error_code)
394 returnValue(Empty())
395 else:
396 log.info('grpc-success-response', response=response)
397 returnValue(response)
Sergio Slobodriana2eb52b2017-03-07 12:24:46 -0500398
Zsolt Haraszti66862032016-11-28 14:28:39 -0800399 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400400 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800401 def ListDeviceFlows(self, request, context):
402 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400403 response = yield self.dispatcher.dispatch('ListDeviceFlows',
404 request,
405 context,
406 id=request.id)
407 log.info('grpc-response', response=response)
408 if isinstance(response, DispatchError):
409 log.info('grpc-error-response', error=response.error_code)
410 context.set_details('Device \'{}\' error'.format(request.id))
411 context.set_code(response.error_code)
412 returnValue(Flows())
413 else:
414 log.info('grpc-success-response', response=response)
415 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800416
417 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400418 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800419 def ListDeviceFlowGroups(self, request, context):
420 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400421 response = yield self.dispatcher.dispatch('ListDeviceFlowGroups',
422 request,
423 context,
424 id=request.id)
425 log.info('grpc-response', response=response)
426 if isinstance(response, DispatchError):
427 log.info('grpc-error-response', error=response.error_code)
428 context.set_details('Device \'{}\' error'.format(request.id))
429 context.set_code(response.error_code)
430 returnValue(FlowGroups())
431 else:
432 log.info('grpc-success-response', response=response)
433 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800434
435 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400436 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800437 def ListDeviceTypes(self, request, context):
438 log.info('grpc-request', request=request)
439 # we always deflect this to the local instance, as we assume
440 # they all loaded the same adapters, supporting the same device
441 # types
khenaidoo08d48d22017-06-29 19:42:49 -0400442 response = yield self.dispatcher.dispatch('ListDeviceTypes',
443 request,
444 context)
445 log.info('grpc-response', response=response)
446 if isinstance(response, DispatchError):
447 log.info('grpc-error-response', error=response.error_code)
448 context.set_details('Device types error')
449 context.set_code(response.error_code)
450 returnValue(DeviceTypes())
451 else:
452 log.info('grpc-success-response', response=response)
453 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800454
455 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400456 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800457 def GetDeviceType(self, request, context):
458 log.info('grpc-request', request=request)
459 # we always deflect this to the local instance, as we assume
460 # they all loaded the same adapters, supporting the same device
461 # types
khenaidoo08d48d22017-06-29 19:42:49 -0400462 response = yield self.dispatcher.dispatch('GetDeviceType',
463 request,
464 context)
465 log.info('grpc-response', response=response)
466 if isinstance(response, DispatchError):
467 log.info('grpc-error-response', error=response.error_code)
468 context.set_details('Device type \'{}\' error'.format(
469 request.id))
470 context.set_code(response.error_code)
471 returnValue(DeviceType())
472 else:
473 log.info('grpc-success-response', response=response)
474 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800475
476 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400477 @inlineCallbacks
Zsolt Haraszti66862032016-11-28 14:28:39 -0800478 def ListDeviceGroups(self, request, context):
khenaidoo08d48d22017-06-29 19:42:49 -0400479 log.info('grpc-request', request=request)
480 response = yield self.dispatcher.dispatch('ListDeviceGroups',
481 Empty(),
482 context,
483 broadcast=True)
484 log.info('grpc-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 GetDeviceGroup(self, request, context):
khenaidoo08d48d22017-06-29 19:42:49 -0400490 log.info('grpc-request', request=request)
491 response = yield self.dispatcher.dispatch('GetDeviceGroup',
492 request,
493 context,
494 id=request.id)
495 log.info('grpc-response', response=response)
496 if isinstance(response, DispatchError):
497 log.info('grpc-error-response', error=response.error_code)
498 context.set_details('Device group\'{}\' error'.format(request.id))
499 context.set_code(response.error_code)
500 returnValue(DeviceGroup())
501 else:
502 log.info('grpc-success-response', response=response)
503 returnValue(response)
Zsolt Haraszti66862032016-11-28 14:28:39 -0800504
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400505 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400506 @inlineCallbacks
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400507 def CreateAlarmFilter(self, request, context):
508 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400509 # Since AlarmFilter applies to the entire cluster, it will be assigned
510 # a global id (using a global core_id). Every Voltha instance will
511 # have the same data. Since the voltha instances are managed by
512 # docker swarm mode then whenever an instance goes down it will be
513 # brought up right away, hence reducing the chance of two instances
514 # having different data. In future phases, we should adopt the
515 # strategy of having a unique persistence model for cluster data
516 # compare to instance data
517 try:
518 assert isinstance(request, AlarmFilter)
519 request.id = create_cluster_id()
520 except AssertionError, e:
521 context.set_details(e.message)
522 context.set_code(StatusCode.INVALID_ARGUMENT)
523 returnValue(AlarmFilter())
524
525 response = yield self.dispatcher.dispatch('CreateAlarmFilter',
526 request,
527 context,
528 id=request.id,
529 broadcast=True)
530 log.info('grpc-response', response=response)
531 if isinstance(response, DispatchError):
532 log.info('grpc-error-response', error=response.error_code)
533 context.set_details('Create alarm error')
534 context.set_code(response.error_code)
535 returnValue(AlarmFilter())
536 else:
537 log.info('grpc-success-response', response=response)
538 returnValue(response)
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400539
540 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400541 @inlineCallbacks
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400542 def GetAlarmFilter(self, request, context):
khenaidoo08d48d22017-06-29 19:42:49 -0400543 log.info('grpc-request', request=request)
544 response = yield self.dispatcher.dispatch('GetAlarmFilter',
545 request,
546 context,
547 id=request.id)
548 log.info('grpc-response', response=response)
549 if isinstance(response, DispatchError):
550 log.info('grpc-error-response', error=response.error_code)
551 context.set_details('Alarm filter\'{}\' error'.format(request.id))
552 context.set_code(response.error_code)
553 returnValue(AlarmFilter())
554 else:
555 log.info('grpc-success-response', response=response)
556 returnValue(response)
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400557
558 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400559 @inlineCallbacks
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400560 def UpdateAlarmFilter(self, request, context):
561 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400562 response = yield self.dispatcher.dispatch('UpdateAlarmFilter',
563 request,
564 context,
565 id=request.id,
566 broadcast=True)
567 log.info('grpc-response', response=response)
568 if isinstance(response, DispatchError):
569 log.info('grpc-error-response', error=response.error_code)
570 context.set_details('Alarm filter\'{}\' error'.format(request.id))
571 context.set_code(response.error_code)
572 returnValue(AlarmFilter())
573 else:
574 log.info('grpc-success-response', response=response)
575 returnValue(response)
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400576
577 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400578 @inlineCallbacks
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400579 def DeleteAlarmFilter(self, request, context):
580 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400581 response = yield self.dispatcher.dispatch('DeleteAlarmFilter',
582 request,
583 context,
584 id=request.id,
585 broadcast=True)
586 log.info('grpc-response', response=response)
587 if isinstance(response, DispatchError):
588 log.info('grpc-error-response', error=response.error_code)
589 context.set_details('Alarm filter\'{}\' error'.format(request.id))
590 context.set_code(response.error_code)
591 returnValue(Empty())
592 else:
593 log.info('grpc-success-response', response=response)
594 returnValue(Empty())
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400595
596 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400597 @inlineCallbacks
Stephane Barbarie4db8ca22017-04-24 10:30:20 -0400598 def ListAlarmFilters(self, request, context):
khenaidoo08d48d22017-06-29 19:42:49 -0400599 log.info('grpc-request', request=request)
600 response = yield self.dispatcher.dispatch('ListAlarmFilters',
601 Empty(),
602 context,
603 broadcast=True)
604 log.info('grpc-response', response=response)
605 if isinstance(response, DispatchError):
606 log.info('grpc-error-response', error=response.error_code)
607 context.set_details('Alarm filters error')
608 context.set_code(response.error_code)
609 returnValue(AlarmFilter())
610 else:
611 log.info('grpc-success-response', response=response)
612 returnValue(response)
ggowdru236bd952017-06-20 20:32:55 -0700613
614 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400615 @inlineCallbacks
ggowdru236bd952017-06-20 20:32:55 -0700616 def GetImages(self, request, context):
617 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400618 response = yield self.dispatcher.dispatch('GetImages',
619 request,
620 context,
621 id=request.id)
622 log.info('grpc-response', response=response)
623 if isinstance(response, DispatchError):
624 log.info('grpc-error-response', error=response.error_code)
625 context.set_details('Device \'{}\' error'.format(request.id))
626 context.set_code(response.error_code)
627 returnValue(Images())
628 else:
629 log.info('grpc-success-response', response=response)
630 returnValue(response)
sathishg5ae86222017-06-28 15:16:29 +0530631
632 @twisted_async
khenaidoo08d48d22017-06-29 19:42:49 -0400633 @inlineCallbacks
sathishg5ae86222017-06-28 15:16:29 +0530634 def SelfTest(self, request, context):
635 log.info('grpc-request', request=request)
khenaidoo08d48d22017-06-29 19:42:49 -0400636 response = yield self.dispatcher.dispatch('SelfTest',
637 request,
638 context,
639 id=request.id)
640 log.info('grpc-response', response=response)
641 if isinstance(response, DispatchError):
642 log.info('grpc-error-response', error=response.error_code)
643 context.set_details('Device \'{}\' error'.format(request.id))
644 context.set_code(response.error_code)
645 returnValue(SelfTestResponse())
646 else:
647 log.info('grpc-success-response', response=response)
648 returnValue(response)