Openstatus www.openstatus.dev

Export Blog Post Metrics Script#

This script exports monitor metrics data from OpenStatus for use in blog posts and documentation.

Overview#

The script fetches monitor data directly from the database and Tinybird analytics, then exports it to a JSON file that can be used for visualizations in blog posts.

Features:

  • Fetches metrics from both regular regions and private locations
  • Automatically combines public regions with private location data
  • Supports both HTTP and TCP monitors

Configuration#

Edit the constants at the top of export-blog-post-metrics.ts:

const MONITOR_ID = "1";        // The ID of the monitor to export
const PERIOD = "7d";           // Time period: "1d", "7d", or "14d"
const INTERVAL = 60;           // Interval in minutes for data points
const TYPE = "http";           // Fallback monitor type: "http" or "tcp" (auto-detected from monitor)
const OUTPUT_FILE = "blog-post-metrics.json"; // Output filename

Note: The script automatically detects the monitor type from the database, but you can set a fallback with the TYPE constant.

Prerequisites#

  1. Make sure you have the TINY_BIRD_API_KEY environment variable set in your .env file
  2. The database should be accessible (local or remote)
  3. Install dependencies: pnpm install

Usage#

IMPORTANT

Go to the /tinybird/src/client.ts file and make sure tb is not using the NoopClient.

From the apps/dashboard directory:

# Using the npm script
pnpm export-metrics

# Or directly with bun
bun src/scripts/export-blog-post-metrics.ts

Output Format#

The script generates a JSON file with the following structure:

{
  "regions": ["ams", "fra", "lhr", ...],
  "data": {
    "regions": ["ams", "fra", "lhr", ...],
    "data": [
      {
        "timestamp": "2025-08-18T16:00:00.000Z",
        "ams": 207,
        "fra": 142,
        "lhr": 327,
        ...
      }
    ]
  },
  "metricsByRegions": [
    {
      "region": "ams",
      "count": 1000,
      "ok": 995,
      "p50Latency": 150,
      "p75Latency": 200,
      "p90Latency": 250,
      "p95Latency": 300,
      "p99Latency": 400
    }
  ]
}

Data Fields#

  • regions: Array of region codes and private location names for the monitor
  • data.data: Timeline data with latency values per region/location at each timestamp
  • metricsByRegions: Summary statistics per region/location including:
    • count: Total number of checks
    • ok: Number of successful checks
    • p50Latency, p75Latency, p90Latency, p95Latency, p99Latency: Latency percentiles in milliseconds

Note: The script automatically includes both public Fly.io regions and any private locations connected to the monitor.

Example: Moving to Web Assets#

To use the exported data in the web app (like the existing hono-cold.json):

# After running the script
cp blog-post-metrics.json ../web/public/assets/posts/your-blog-post/data.json

Troubleshooting#

Error: "TINY_BIRD_API_KEY environment variable is required"

  • Make sure you have the TINY_BIRD_API_KEY set in your .env file

Error: "Monitor with ID X not found"

  • Verify the monitor ID exists in your database
  • Check that you're connected to the correct database

No data returned

  • Ensure the monitor has been running and collecting data for the specified period
  • Try a different time period (e.g., "7d" instead of "1d")