Created
January 5, 2021 08:38
-
-
Save amotl/43bb89107227431802556b7bcb135578 to your computer and use it in GitHub Desktop.
Proof that grafana_api's `update_dashboard` will respawn the dashboard within the "General" folder
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
About | |
===== | |
Proof that ``update_dashboard`` will respawn the dashboard within the "General" folder:: | |
before: {'folderId': 1, 'folderTitle': 'testdrive', 'folderUrl': '/dashboards/f/RJS5vK-Mz/testdrive'} | |
after: {'folderId': 0, 'folderTitle': 'General', 'folderUrl': ''} | |
Synopsis | |
======== | |
:: | |
pip install grafana-api==1.0.3 | |
python grafana_api_dashboard_folder_flaw.py | |
Tests against Grafana 5.x, 6.x, 7.x | |
=================================== | |
:: | |
docker run --rm -it \ | |
--publish=3000:3000 \ | |
--env='GF_SECURITY_ADMIN_PASSWORD=admin' \ | |
grafana/grafana:7.3.6 | |
docker run --rm -it \ | |
--publish=3000:3000 \ | |
--env='GF_SECURITY_ADMIN_PASSWORD=admin' \ | |
grafana/grafana:6.7.5 | |
docker run --rm -it \ | |
--publish=3000:3000 \ | |
--env='GF_SECURITY_ADMIN_PASSWORD=admin' \ | |
grafana/grafana:5.4.5 | |
""" | |
from grafana_api import GrafanaFace | |
def get_folderinfo(dashboard): | |
return { | |
"folderId": dashboard["meta"]["folderId"], | |
"folderTitle": dashboard["meta"]["folderTitle"], | |
"folderUrl": dashboard["meta"]["folderUrl"], | |
} | |
class Grafana(GrafanaFace): | |
def create_folder(self, name): | |
self.delete_folder(name) | |
folder = self.folder.create_folder(title=name) | |
return folder | |
def delete_folder(self, name): | |
folders = self.folder.get_all_folders() | |
try: | |
folder = list(filter(lambda folder: folder["title"] == name, folders))[0] | |
folder_uid = folder["uid"] | |
self.folder.delete_folder(folder_uid) | |
except IndexError: | |
pass | |
def create_dashboard(self, name, folder_id): | |
dashboard = self.dashboard.update_dashboard(dashboard={"dashboard": {"title": name}, "folderId": folder_id}) | |
return dashboard | |
def create_dashboard_in_folder(self, name, folder): | |
folder_info = self.create_folder(folder) | |
dashboard = self.create_dashboard(name=name, folder_id=folder_info["id"]) | |
return dashboard | |
def main(): | |
grafana = Grafana(("admin", "admin"), host="localhost", port=3000) | |
# Create a new dashboard within a folder. | |
dashboard = grafana.create_dashboard_in_folder(name="testdashboard", folder="testfolder") | |
# Use this dashboard's UID to operate on. | |
dashboard_uid = dashboard["uid"] | |
# Display folder info of dashboard. | |
dashboard = grafana.dashboard.get_dashboard(dashboard_uid) | |
print("before:", get_folderinfo(dashboard)) | |
# Update dashboard. | |
grafana.dashboard.update_dashboard(dashboard) | |
# Display folder info of dashboard. | |
dashboard = grafana.dashboard.get_dashboard(dashboard_uid) | |
print("after: ", get_folderinfo(dashboard)) | |
# Clean up. | |
grafana.dashboard.delete_dashboard(dashboard_uid) | |
grafana.delete_folder("testfolder") | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment