X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_mon%2Fdashboarder%2Fbackends%2Fgrafana.py;h=a1cbcba3545446d836437196a47a13d3e410ddd7;hb=refs%2Fchanges%2F07%2F10507%2F1;hp=ff87507917a46d0e59a1a357b4666460209b3a42;hpb=f0d7566a26a214fdcce6b7459fbbe5f02108d1d2;p=osm%2FMON.git diff --git a/osm_mon/dashboarder/backends/grafana.py b/osm_mon/dashboarder/backends/grafana.py index ff87507..a1cbcba 100644 --- a/osm_mon/dashboarder/backends/grafana.py +++ b/osm_mon/dashboarder/backends/grafana.py @@ -78,25 +78,20 @@ class GrafanaBackend: response = requests.request( "POST", self.url + "/api/dashboards/db/", data=json.dumps(dashboard_json_data), headers=self.headers) + # Don't create the dashboard if already exists. + if json.loads(response.text).get("status") == "name-exists": + return + # Get team id if project_name is not None: name = project_name 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) @@ -199,6 +194,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 +221,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 +234,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 +243,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