From eca5fb1b5c5c3948fa8536f50c704f3a471fa607 Mon Sep 17 00:00:00 2001 From: Kanagaraj Manickam Date: Tue, 22 Mar 2016 20:11:37 +0530 Subject: [PATCH] view 360 Change-Id: Ibb645261bdc9af1a582ad4102c69340c49916d4e --- namos/conductor/manager.py | 5 ++ namos/conductor/rpcapi.py | 13 +++- namos/db/api.py | 4 ++ namos/db/sqlalchemy/api.py | 130 +++++++++++++++++++++++++++++++++++++ 4 files changed, 150 insertions(+), 2 deletions(-) diff --git a/namos/conductor/manager.py b/namos/conductor/manager.py index 151563f..7e929ea 100644 --- a/namos/conductor/manager.py +++ b/namos/conductor/manager.py @@ -106,6 +106,10 @@ class ConductorManager(object): def infra_perspective_get(self, context): return db_api.infra_perspective_get(context) + @request_context + def view_360(self, context): + return db_api.view_360(context) + @request_context def config_get_by_name_for_service_worker(self, context, @@ -117,6 +121,7 @@ class ConductorManager(object): name, only_configured) + class ServiceProcessor(object): def __init__(self, registration_info): self.registration_info = registration_info diff --git a/namos/conductor/rpcapi.py b/namos/conductor/rpcapi.py index bf7d660..2a1d884 100644 --- a/namos/conductor/rpcapi.py +++ b/namos/conductor/rpcapi.py @@ -96,6 +96,11 @@ class ConductorAPI(object): return self.client.call(context, 'infra_perspective_get') + @wrapper_function + def view_360(self, context): + return self.client.call(context, + 'view_360') + @wrapper_function def config_get_by_name_for_service_worker(self, context, @@ -128,10 +133,14 @@ if __name__ == '__main__': def print_infra(): print (json.dumps(c.infra_perspective_get(context.RequestContext()))) + def print_view_360(): + print (json.dumps(c.view_360(context.RequestContext()))) + def print_sample_conf(): for cf in c.config_get_by_name_for_service_worker( context.RequestContext(), - service_worker_id='fc88fd41-7e9c-42c9-891d-3823efd4824e'): + service_worker_id='06e64e74-09b3-4721-8e5d-39ae40ed34f3'): print ('%s %s' % (cf['name'], cf['value'])) - print_sample_conf() + print_view_360() + # print_sample_conf() diff --git a/namos/db/api.py b/namos/db/api.py index a2f8457..39c8553 100644 --- a/namos/db/api.py +++ b/namos/db/api.py @@ -367,3 +367,7 @@ def region_perspective_get(context, region_id, def infra_perspective_get(context): return IMPL.infra_perspective_get(context) + + +def view_360(context): + return IMPL.view_360(context) diff --git a/namos/db/sqlalchemy/api.py b/namos/db/sqlalchemy/api.py index cbef957..a889576 100644 --- a/namos/db/sqlalchemy/api.py +++ b/namos/db/sqlalchemy/api.py @@ -772,6 +772,133 @@ def infra_perspective_get(context): return infra_perspective + +def view_360(context): + view = dict() + + view['region'] = dict() + view['service_node'] = dict() + view['service_component'] = dict() + view['service'] = dict() + view['service_worker'] = dict() + view['device_driver'] = dict() + view['device_driver_class'] = dict() + view['device_endpoint'] = dict() + view['device'] = dict() + + region_list = region_get_all(context) + for rg in region_list: + # region + view['region'][rg.id] = region_get(context, rg.id).to_dict() + + view['region'][rg.id]['service_node'] = dict() + srv_nd_lst = _service_node_get_all_by(context, + region_id=rg.id) + for srv_nd in srv_nd_lst: + # service node + view['service_node'][srv_nd.id] = service_node_get( + context, + srv_nd.id + ).to_dict() + + view['region'][rg.id]['service_node'][srv_nd.id] = dict() + view['region'][rg.id]['service_node'][srv_nd.id][ + 'service_component'] = dict() + srv_cmp_lst = service_component_get_all_by_node_for_service( + context, + srv_nd.id + ) + for srv_cmp in srv_cmp_lst: + # service component + view['service_component'][ + srv_cmp.id] = service_component_get(context, + srv_cmp.id).to_dict() + + # service + srv_id = view['service_component'][srv_cmp.id]['service_id'] + if srv_id not in view['service']: + view['service'][srv_id] = service_get(context, + srv_id).to_dict() + + view['region'][rg.id]['service_node'][srv_nd.id][ + 'service_component'][srv_cmp.id] = dict() + view['region'][rg.id]['service_node'][srv_nd.id][ + 'service_component'][srv_cmp.id]['service'] = srv_id + view['region'][rg.id]['service_node'][srv_nd.id][ + 'service_component'][srv_cmp.id][ + 'service_worker'] = dict() + srv_wkr_lst = service_worker_get_by_host_for_service_component( + context, + srv_cmp.id + ) + for srv_wkr in srv_wkr_lst: + # service worker + view['service_worker'][ + srv_wkr.id] = service_worker_get(context, + srv_wkr.id).to_dict() + + view['region'][rg.id]['service_node'][srv_nd.id][ + 'service_component'][srv_cmp.id][ + 'service_worker'][srv_wkr.id] = dict() + view['region'][rg.id]['service_node'][srv_nd.id][ + 'service_component'][srv_cmp.id][ + 'service_worker'][srv_wkr.id]['device_driver'] = dict() + dvc_drv_list = _device_driver_get_all_by( + context, + service_worker_id=srv_wkr.id + ) + for dvc_drv in dvc_drv_list: + # device driver + view['device_driver'][ + dvc_drv.id] = device_driver_get( + context, + dvc_drv.id).to_dict() + + view['region'][rg.id]['service_node'][srv_nd.id][ + 'service_component'][srv_cmp.id][ + 'service_worker'][srv_wkr.id]['device_driver'][ + dvc_drv.id] = dict() + + # device driver class + dvc_drv_cls_id = view['device_driver'][ + dvc_drv.id]['device_driver_class_id'] + if dvc_drv_cls_id not in view['device_driver_class']: + view['device_driver_class'][ + dvc_drv_cls_id] = device_driver_class_get( + context, + dvc_drv_cls_id).to_dict() + view['region'][rg.id]['service_node'][srv_nd.id][ + 'service_component'][srv_cmp.id][ + 'service_worker'][srv_wkr.id]['device_driver'][ + dvc_drv.id]['device_driver_class'] = dvc_drv_cls_id + + # device endpoint + dvc_endp_id = view['device_driver'][ + dvc_drv.id]['endpoint_id'] + view['device_endpoint'][ + dvc_endp_id] = device_endpoint_get( + context, + dvc_endp_id).to_dict() + view['region'][rg.id]['service_node'][srv_nd.id][ + 'service_component'][srv_cmp.id][ + 'service_worker'][srv_wkr.id]['device_driver'][ + dvc_drv.id]['device_endpoint'] = dvc_endp_id + + # device + dvc_id = view['device_driver'][ + dvc_drv.id]['device_id'] + if dvc_id not in view['device']: + view['device'][ + dvc_id] = device_get( + context, + dvc_id).to_dict() + view['region'][rg.id]['service_node'][srv_nd.id][ + 'service_component'][srv_cmp.id][ + 'service_worker'][srv_wkr.id]['device_driver'][ + dvc_drv.id]['device'] = dvc_id + + return view + if __name__ == '__main__': from namos.common import config @@ -796,3 +923,6 @@ if __name__ == '__main__': # import json # perp_json = json.dumps(persp, indent=4) # print perp_json + + import json + print (json.dumps(view_360(None)))