from osm_mon.core.keystone import KeystoneConnection
from osm_mon.dashboarder.backends.grafana import GrafanaBackend
from osm_mon import __path__ as mon_path
-from osm_mon.dashboarder.utils import find_in_list
+from osm_mon.core.utils import find_in_list, create_filter_from_nsr
log = logging.getLogger(__name__)
)
except Exception:
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
- projects.extend(self.common_db.get_projects())
for project in projects:
project_id = project['_id']
# Collect Project IDs for periodical dashboard clean-up
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'])
+ 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)
if vdu_found:
def create_grafana_user(self, user):
self.grafana.create_grafana_users(user)
- def create_grafana_team_member(self, project_data, userid):
- try:
- # Get user details from commondb
- user = self.common_db.get_user_by_id(userid)
- user_name = user["username"]
- except Exception as e:
- # User not found in commondb
+ def create_grafana_team_member(self, project_data, userid=None, project_list=None, user=None):
+ if user:
+ user_name = user
+ else:
+ try:
+ # Get user details from commondb
+ user = self.common_db.get_user_by_id(userid)
+ user_name = user["username"]
+ except Exception as e:
+ # User not found in commondb
+ if self.keystone:
+ # Search user in keystone
+ user = self.keystone.getUserById(userid)
+ user_name = user.name
+ else:
+ 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']
+ 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)
+ else:
+ # user-project mapping is done by osm ui
+ proj_list = []
if self.keystone:
- # Serach user in keystone
- user = self.keystone.getUserById(userid)
- user_name = user.name
+ users_proj_list = self.keystone.getProjectsById(userid)
+ for project in users_proj_list:
+ proj_list.append(project.name)
else:
- log.info('User %s not found', userid)
- log.debug('Exception %s' % e)
- proj_list = []
- for project in project_data:
- proj_list.append(project["project"])
- for proj in project_data:
- role_obj = self.common_db.get_role_by_name(proj["role"])
- is_admin = role_obj["permissions"].get("admin")
- self.grafana.create_grafana_teams_members(proj["project"], user_name, is_admin, proj_list)
+ 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'])
+ 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']
+ 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_name = proj_data.name
+ else:
+ # Backend authentication type is internal
+ try:
+ # Getting project and role object from commondb using names
+ role_obj = self.common_db.get_role_by_name(proj["role"])
+ proj_name = proj["project"]
+ except Exception:
+ # 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']
+ is_admin = role_obj["permissions"].get("admin")
+ 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)
def update_grafana_team(self, project_new_name, project_old_name):
self.grafana.update_grafana_teams(project_new_name, project_old_name)
+
+ def remove_grafana_team_members(self, user_id, proj_data):
+ try:
+ # Get user details from commondb
+ user = self.common_db.get_user_by_id(user_id)
+ user_name = user["username"]
+ except Exception as e:
+ # User not found in commondb
+ if self.keystone:
+ # Find user in keystone
+ user = self.keystone.getUserById(user_id)
+ user_name = user.name
+ else:
+ log.info('User %s not found', user_id)
+ log.debug('Exception %s' % e)
+ self.grafana.remove_grafana_team_member(user_name, proj_data)