X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_mon%2Fdashboarder%2Fbackends%2Fgrafana.py;h=73459f7110123340c4b713029483e3e31e495001;hb=5269fc31c6ed52819996f85f15e740a97b5ad688;hp=ff87507917a46d0e59a1a357b4666460209b3a42;hpb=6e73f233234e410f9d117f1a77832636eda87d8b;p=osm%2FMON.git diff --git a/osm_mon/dashboarder/backends/grafana.py b/osm_mon/dashboarder/backends/grafana.py index ff87507..73459f7 100644 --- a/osm_mon/dashboarder/backends/grafana.py +++ b/osm_mon/dashboarder/backends/grafana.py @@ -75,8 +75,16 @@ class GrafanaBackend: dashboard_json_data["folderId"] = folder_id dashboard_json_data["overwrite"] = False - response = requests.request( - "POST", self.url + "/api/dashboards/db/", data=json.dumps(dashboard_json_data), headers=self.headers) + response = self.send_request_for_creating_dashboard(dashboard_json_data) + + # Admin dashboard will be created if already exists. Rest will remain same. + if json.loads(response.text).get("status") == "name-exists": + # Delete any previous project-admin dashboard if it already exist. + if name == 'admin': + self.delete_admin_dashboard() + response = self.send_request_for_creating_dashboard(dashboard_json_data) + else: + return # Get team id if project_name is not None: @@ -84,19 +92,10 @@ class GrafanaBackend: response_team = requests.request( "GET", self.url + "/api/teams/search?name={}".format(name), headers=self.headers) - # Check if team informaiton is available - if len(json.loads(response_team.text)["teams"]) > 0: - # As team information is available so it is a non-admin user - team_id = json.loads(response_team.text)["teams"][0]["id"] - permission_data = {"items": [{"teamId": team_id, "permission": 2}, ]} - # Give required permission to the team's folder - response = requests.request( - "POST", self.url + "/api/folders/{}/permissions".format(project_name), json=permission_data, - headers=self.headers) - else: + # Remove default permissions of admin user's dashboard so that it is not visible to non-admin users + if len(json.loads(response_team.text)["teams"]) == 0: # As team information is not available so it is admin user dahboard_id = json.loads(response.text)["id"] - # Remove dashboard's default permissions so that it is only visible to admin user requests.request( "POST", self.url + "/api/dashboards/id/{}/permissions".format(dahboard_id), headers=self.headers) @@ -106,11 +105,21 @@ class GrafanaBackend: except Exception: log.exception("Exception processing message: ") + def send_request_for_creating_dashboard(self, dashboard_data): + response = requests.request( + "POST", self.url + "/api/dashboards/db/", data=json.dumps(dashboard_data), headers=self.headers) + return response + def delete_dashboard(self, uid): response = requests.request("DELETE", self.url + "/api/dashboards/uid/" + uid, headers=self.headers) log.debug("Dashboard %s deleted from Grafana", uid) return response + def delete_admin_dashboard(self): + requests.request( + "DELETE", self.url + "/api/dashboards/db/osm-project-status-admin", headers=self.headers) + log.debug("Dashboard osm-project-status-admin deleted from Grafana") + def create_grafana_users(self, user): email = "{}@osm.etsi.org".format(user) user_payload = { @@ -199,6 +208,20 @@ class GrafanaBackend: requests.request("POST", self.url + "/api/folders", json=folder_payload, headers=self.headers) log.info("Dashboard folder %s created", folder_name) + response_team = requests.request("GET", self.url + "/api/teams/search?name={}".format(folder_name), + headers=self.headers) + # Create team if it doesn't already exists + if len(json.loads(response_team.text)["teams"]) == 0: + self.create_grafana_teams(folder_name) + response_team = requests.request("GET", self.url + "/api/teams/search?name={}".format(folder_name), + headers=self.headers) + # Assign required permission to the team's folder + team_id = json.loads(response_team.text)["teams"][0]["id"] + permission_data = {"items": [{"teamId": team_id, "permission": 2}, ]} + requests.request("POST", self.url + "/api/folders/{}/permissions".format(folder_name), + json=permission_data, headers=self.headers) + + # delete user from grafana def delete_grafana_users(self, user_name): # Get user id response_id = requests.request("GET", self.url + "/api/users/lookup?loginOrEmail={}".format(user_name), @@ -212,6 +235,7 @@ class GrafanaBackend: log.info("User %s deleted in Grafana", user_name) return response + # delete team from grafana def delete_grafana_team(self, project_name): # Delete Grafana folder requests.request("DELETE", self.url + "/api/folders/{}".format(project_name), @@ -224,6 +248,7 @@ class GrafanaBackend: log.info("Team %s deleted in Grafana", project_name) return response + # update grafana team def update_grafana_teams(self, project_new_name, project_old_name): team_obj = requests.request("GET", self.url + "/api/teams/search?name={}".format(project_old_name), headers=self.headers) @@ -232,3 +257,18 @@ class GrafanaBackend: response = requests.request("PUT", self.url + "/api/teams/{}".format(team_id), json=data, headers=self.headers) log.info("Grafana team updated %s", response.text) return response + + # remove member from grafana team + def remove_grafana_team_member(self, user_name, project_data): + # Get user id + response_id = requests.request("GET", self.url + "/api/users/lookup?loginOrEmail={}".format(user_name), + headers=self.headers) + user_id = json.loads(response_id.text)["id"] + for project in project_data: + # Get team id + team_obj = requests.request("GET", self.url + "/api/teams/search?name={}".format(project['project']), + headers=self.headers) + team_id = json.loads(team_obj.text)["teams"][0]["id"] + response = requests.request("DELETE", self.url + "/api/teams/{}/members/{}".format(team_id, user_id), + headers=self.headers) + return response