diff options
Diffstat (limited to 'arthur/apis/grafana/teams.py')
-rw-r--r-- | arthur/apis/grafana/teams.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/arthur/apis/grafana/teams.py b/arthur/apis/grafana/teams.py new file mode 100644 index 0000000..9e3f66a --- /dev/null +++ b/arthur/apis/grafana/teams.py @@ -0,0 +1,51 @@ +import aiohttp + +from arthur import logger +from arthur.config import CONFIG + +AUTH_HEADER = {"Authorization": f"Bearer {CONFIG.grafana_token.get_secret_value()}"} + + +async def list_teams(session: aiohttp.ClientSession) -> dict[str, str]: + """List all Grafana teams.""" + endpoint = CONFIG.grafana_url + "/api/teams/search" + async with session.get(endpoint, headers=AUTH_HEADER) as response: + teams = await response.json() + if not response.ok: + logger.error(teams) + return teams["teams"] + + +async def list_team_members(team_id: int, session: aiohttp.ClientSession) -> list[dict[str, str]]: + """List all members within a team.""" + endpoint = CONFIG.grafana_url + f"/api/teams/{team_id}/members" + async with session.get(endpoint, headers=AUTH_HEADER) as response: + team_members = await response.json() + if not response.ok: + logger.error(team_members) + return team_members + + +async def add_user_to_team( + user_id: int, + team_id: int, + session: aiohttp.ClientSession, +) -> dict[str, str]: + """Add a Grafana user to a team.""" + endpoint = CONFIG.grafana_url + f"/api/teams/{team_id}/members" + payload = {"userId": user_id} + async with session.post(endpoint, headers=AUTH_HEADER, json=payload) as response: + add_resp = await response.json() + if not response.ok: + logger.error(add_resp) + return add_resp + + +async def get_all_users(session: aiohttp.ClientSession) -> list[dict[str, str]]: + """Get a grafana users.""" + endpoint = CONFIG.grafana_url + "/api/org/users/lookup" + async with session.get(endpoint, headers=AUTH_HEADER) as response: + users = await response.json() + if not response.ok: + logger.error(users) + return users |