import os
import requests
import csv
from datetime import datetime, timedelta, timezone
from urllib.parse import urlencode
SWO_API_KEY = "YOUR_API_KEY"
BASE_URL="https://api.na-01.cloud.solarwinds.com" #Change as required by your tenant location
HEADERS = {
"Authorization": f"Bearer {SWO_API_KEY}",
"Accept": "application/json"
}
def format_utc(dt):
return dt.strftime("%Y-%m-%dT%H:%M:%SZ")
def get_all_metrics(start_time, end_time, page_size=1000):
all_metrics = []
query_params = {
"startTime": format_utc(start_time),
"endTime": format_utc(end_time),
"pageSize": page_size
}
endpoint = f"/v1/metrics?{urlencode(query_params)}"
while endpoint:
url = f"{BASE_URL}{endpoint}"
try:
response = requests.get(url, headers=HEADERS)
response.raise_for_status()
data = response.json()
metrics = data.get("metricsInfo", [])
all_metrics.extend(metrics)
page_info = data.get("pageInfo", {})
next_page = page_info.get("nextPage")
if next_page and next_page != "string":
endpoint = next_page
else:
break
except Exception as e:
print(f"Error fetching metrics: {e}")
break
return all_metrics
def save_to_csv(metrics, filename="metrics.csv"):
fieldnames = ["name", "displayName", "description", "units", "formula", "lastReportedTime"]
with open(filename, "w", newline="", encoding="utf-8") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for m in metrics:
row = {key: m.get(key, "") for key in fieldnames}
writer.writerow(row)
if __name__ == "__main__":
end_time = datetime.now(timezone.utc)
start_time = end_time - timedelta(days=30)
print(f"Retrieving metrics from {format_utc(start_time)} to {format_utc(end_time)}...")
metrics = get_all_metrics(start_time, end_time)
print(f"Total metrics retrieved: {len(metrics)}")
save_to_csv(metrics)
print("Saved to metrics.csv")