X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_mon%2Fdashboarder%2Fservice.py;h=48e8150d4a6105d71885b63dba49a42ed07ec125;hb=refs%2Fchanges%2F03%2F10803%2F1;hp=441f88182ffd2ddee873b8ad30cf14fc02dddda5;hpb=a2eeb474200b8f9ebcaee6fa68fe52b6e1a5e337;p=osm%2FMON.git diff --git a/osm_mon/dashboarder/service.py b/osm_mon/dashboarder/service.py index 441f881..48e8150 100644 --- a/osm_mon/dashboarder/service.py +++ b/osm_mon/dashboarder/service.py @@ -38,7 +38,7 @@ class DashboarderService: self.common_db = CommonDbClient(self.conf) self.grafana = GrafanaBackend(self.conf) - if bool(self.conf.get('keystone', 'enabled')): + if bool(self.conf.get("keystone", "enabled")): self.keystone = KeystoneConnection(self.conf) else: self.keystone = None @@ -54,50 +54,60 @@ class DashboarderService: if self.keystone: try: projects.extend( - map(lambda project: {'_id': project.id, 'name': project.name}, self.keystone.getProjects()) + map( + lambda project: {"_id": project.id, "name": project.name}, + self.keystone.getProjects(), + ) ) except Exception: - log.error('Cannot retrieve projects from keystone') + log.error("Cannot retrieve projects from keystone") else: projects.extend(self.common_db.get_projects()) # Reads existing project list and creates a dashboard for each for project in projects: - project_id = project['_id'] + project_id = project["_id"] # Collect Project IDs for periodical dashboard clean-up osm_resource_uids.append(project_id) - dashboard_path = '{}/dashboarder/templates/project_scoped.json'.format(mon_path[0]) + dashboard_path = "{}/dashboarder/templates/project_scoped.json".format( + mon_path[0] + ) if project_id not in dashboard_uids: - project_name = project['name'] + project_name = project["name"] if project_name != "admin": # Create project folder in Grafana only if user is not admin. # Admin user's dashboard will be created in default folder self.grafana.create_grafana_folders(project_name) - self.grafana.create_dashboard(project_id, project_name, - dashboard_path) - log.debug('Created dashboard for Project: %s', project_id) + self.grafana.create_dashboard(project_id, project_name, dashboard_path) + log.debug("Created dashboard for Project: %s", project_id) else: - log.debug('Dashboard already exists') + log.debug("Dashboard already exists") # Reads existing NS list and creates a dashboard for each # TODO lavado: only create for ACTIVE NSRs nsrs = self.common_db.get_nsrs() for nsr in nsrs: - nsr_id = nsr['_id'] - dashboard_path = '{}/dashboarder/templates/ns_scoped.json'.format(mon_path[0]) + nsr_id = nsr["_id"] + dashboard_path = "{}/dashboarder/templates/ns_scoped.json".format( + mon_path[0] + ) # Collect NS IDs for periodical dashboard clean-up osm_resource_uids.append(nsr_id) # Check if the NSR's VNFDs contain metrics # Only one DF at the moment, support for this feature is comming in the future - vnfds_profiles = nsr['nsd']["df"][0]['vnf-profile'] + vnfds_profiles = nsr["nsd"]["df"][0]["vnf-profile"] for vnf_profile in vnfds_profiles: try: - vnfd = self.common_db.get_vnfd_by_id(vnf_profile['vnfd-id'], create_filter_from_nsr(nsr)) + vnfd = self.common_db.get_vnfd_by_id( + vnf_profile["vnfd-id"], create_filter_from_nsr(nsr) + ) # If there are metrics, create dashboard (if exists) - vdu_found = find_in_list(vnfd["vdu"], lambda a_vdu: "monitoring-parameter" in a_vdu) + vdu_found = find_in_list( + vnfd["vdu"], lambda a_vdu: "monitoring-parameter" in a_vdu + ) if vdu_found: if nsr_id not in dashboard_uids: - nsr_name = nsr['name'] + nsr_name = nsr["name"] project_id = nsr["_admin"]["projects_read"][0] try: # Get project details from commondb @@ -108,19 +118,20 @@ class DashboarderService: if self.keystone: # Serach project in keystone for project in projects: - if project_id == project['_id']: + if project_id == project["_id"]: project_name = project["name"] else: - log.info('Project %s not found', project_id) - log.debug('Exception %s' % e) - self.grafana.create_dashboard(nsr_id, nsr_name, - dashboard_path, project_name) - log.debug('Created dashboard for NS: %s', nsr_id) + log.info("Project %s not found", project_id) + log.debug("Exception %s" % e) + self.grafana.create_dashboard( + nsr_id, nsr_name, dashboard_path, project_name + ) + log.debug("Created dashboard for NS: %s", nsr_id) else: - log.debug('Dashboard already exists') + log.debug("Dashboard already exists") break else: - log.debug('NS does not has metrics') + log.debug("NS does not has metrics") except Exception: log.exception("VNFD is not valid or has been renamed") continue @@ -129,14 +140,16 @@ class DashboarderService: for dashboard_uid in dashboard_uids: if dashboard_uid not in osm_resource_uids: self.grafana.delete_dashboard(dashboard_uid) - log.debug('Deleted obsolete dashboard: %s', dashboard_uid) + log.debug("Deleted obsolete dashboard: %s", dashboard_uid) else: - log.debug('All dashboards in use') + log.debug("All dashboards in use") def create_grafana_user(self, user): self.grafana.create_grafana_users(user) - def create_grafana_team_member(self, project_data, userid=None, project_list=None, user=None): + def create_grafana_team_member( + self, project_data, userid=None, project_list=None, user=None + ): if user: user_name = user else: @@ -151,16 +164,18 @@ class DashboarderService: user = self.keystone.getUserById(userid) user_name = user.name else: - log.info('User %s not found', userid) - log.debug('Exception %s' % e) + log.info("User %s not found", userid) + log.debug("Exception %s" % e) if project_list: # user-project mapping is done by osm cli for proj in project_data: project = self.common_db.get_project(proj["project"]) - proj_name = project['name'] + proj_name = project["name"] role_obj = self.common_db.get_role_by_id(proj["role"]) is_admin = role_obj["permissions"].get("admin") - self.grafana.create_grafana_teams_members(proj_name, user_name, is_admin, project_list) + self.grafana.create_grafana_teams_members( + proj_name, user_name, is_admin, project_list + ) else: # user-project mapping is done by osm ui proj_list = [] @@ -172,22 +187,34 @@ class DashboarderService: users_proj_list = user.get("project_role_mappings") for project in users_proj_list: proj_data = self.common_db.get_project(project["project"]) - proj_list.append(proj_data['name']) + proj_list.append(proj_data["name"]) for proj in project_data: if self.keystone: # Backend authentication type is keystone try: # Getting project and role objects from keystone using ids role_obj = self.keystone.getRoleById(proj["role"]) - proj_data = self.keystone.getProjectsByProjectId(proj["project"]) - log.info('role object {} {}'.format(role_obj.permissions, proj_data.name)) - is_admin = role_obj.permissions['admin'] + proj_data = self.keystone.getProjectsByProjectId( + proj["project"] + ) + log.info( + "role object {} {}".format( + role_obj.permissions, proj_data.name + ) + ) + is_admin = role_obj.permissions["admin"] except Exception: # Getting project and role objects from keystone using names role_obj = self.keystone.getRoleByName(proj["role"])[0] - proj_data = self.keystone.getProjectsByProjectName(proj["project"])[0] - is_admin = role_obj.to_dict().get("permissions").get('admin') - log.info('role object {} {}'.format(role_obj.to_dict(), proj_data.name)) + proj_data = self.keystone.getProjectsByProjectName( + proj["project"] + )[0] + is_admin = role_obj.to_dict().get("permissions").get("admin") + log.info( + "role object {} {}".format( + role_obj.to_dict(), proj_data.name + ) + ) proj_name = proj_data.name else: # Backend authentication type is internal @@ -199,9 +226,11 @@ class DashboarderService: # Getting project and role object from commondb using ids role_obj = self.common_db.get_role_by_id(proj["role"]) proj_data = self.common_db.get_project(proj["project"]) - proj_name = proj_data['name'] + proj_name = proj_data["name"] is_admin = role_obj["permissions"].get("admin") - self.grafana.create_grafana_teams_members(proj_name, user_name, is_admin, proj_list) + self.grafana.create_grafana_teams_members( + proj_name, user_name, is_admin, proj_list + ) def create_grafana_team(self, team_name): self.grafana.create_grafana_teams(team_name) @@ -227,6 +256,6 @@ class DashboarderService: user = self.keystone.getUserById(user_id) user_name = user.name else: - log.info('User %s not found', user_id) - log.debug('Exception %s' % e) + log.info("User %s not found", user_id) + log.debug("Exception %s" % e) self.grafana.remove_grafana_team_member(user_name, proj_data)