Source code for grafanarmadillo.dashboarder

"""Push and pull Grafana dashboards."""
from typing import Optional, Tuple

from grafana_client import GrafanaApi

from grafanarmadillo.types import (
	DashboardContent,
	DashboardSearchResult,
	FolderSearchResult,
)
from grafanarmadillo.util import project_dashboard_identity


[docs]class Dashboarder: """Collection of methods for managing dashboards.""" def __init__(self, api: GrafanaApi) -> None: super().__init__() self.api = api
[docs] def get_dashboard_content(self, dashboard: DashboardSearchResult) -> DashboardContent: """Get the contents of a Grafana dashboard.""" return self.api.dashboard.get_dashboard(dashboard["uid"])["dashboard"]
[docs] def set_dashboard_content( self, dashboard: DashboardSearchResult, content: DashboardContent ): """ Set the content of a Grafana dashboard. This explicitly leaves out the identity information. That allows you to graft the contents of a dashboard into another """ new_dashboard = dashboard.copy() new_content = content.copy() new_content.update(project_dashboard_identity(new_dashboard)) new_dashboard.update({"dashboard": new_content, "overwrite": True}) return self.api.dashboard.update_dashboard(new_dashboard)
[docs] def import_dashboard( self, content: DashboardContent, folder: Optional[FolderSearchResult] = None ): """Import a dashboard into Grafana, optionally into a folder.""" content.pop("id", None) new_dashboard = {"dashboard": content, "overwrite": True} if folder: new_dashboard.update({"folderUid": folder["uid"], "folderId": folder["id"]}) return self.api.dashboard.update_dashboard(new_dashboard)
[docs] def export_dashboard( self, dashboard: DashboardSearchResult ) -> Tuple[DashboardContent, Optional[FolderSearchResult]]: """Export a dashboard from grafana, with its folder information if applicable.""" result = self.api.dashboard.get_dashboard(dashboard["uid"]) meta, dashboard = result["meta"], result["dashboard"] if meta["folderUid"]: folder = self.api.folder.get_folder(meta["folderUid"]) else: folder = None return dashboard, folder