Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-29-2024 08:17 PM
Turns out the problem was between keyboard and chair! The issues was with using requests data vs json. Here's the full working code:
import base64
import json
import os
import requests
WORKSPACE_DASHBOARDS_FOLDER = "/Workspace/Engineering Metrics/SQL Warehouse Monitoring"
with open("./dashboard_template.json", "r") as file:
DASHBOARD_TEMPLATE = json.load(file)
class Databricks:
def __init__(self, API_KEY):
self.api_key = API_KEY
self.headers = (
{
"Accept": "application/json",
"Content-Type": "application/json",
"Authorization": f"Authorization: Bearer {self.api_key}",
},
)
def make_request(self, method, query, **kwargs):
response = requests.request(
method, f"{self.url}{query}", headers=self.headers[0], **kwargs
)
response.raise_for_status()
return response
def list_serverless_warehouses(self):
response = self.make_request("get", f"/sql/warehouses").json()["warehouses"]
warehouses = []
for warehouse in response:
if warehouse["enable_serverless_compute"] == True:
warehouses.append(
{
"id": warehouse["id"],
"name": warehouse["name"],
}
)
return warehouses
def create_dashboard(self, warehouse_id: str, warehouse_name: str):
dashboard_config = DASHBOARD_TEMPLATE
for i, v in enumerate(dashboard_config["datasets"]):
dashboard_config["datasets"][i]["parameters"][0]["defaultSelection"][
"values"
]["values"][0]["value"] = warehouse_id
request_data = {
"path": f"{WORKSPACE_DASHBOARDS_FOLDER}/{warehouse_name}.lvdash.json",
"content": base64.b64encode(
json.dumps(dashboard_config).encode("utf-8")
).decode("utf-8"),
"format": "AUTO",
"overwrite": "true",
}
return self.make_request("post", f"/workspace/import", json=request_data)
databricks = Databricks(os.getenv("DATABRICKS_TOKEN_PREMIUM"))
warehouses = databricks.list_serverless_warehouses()
for warehouse in warehouses:
databricks.create_dashboard(warehouse["id"], warehouse["name"])