{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://jobdatapool.com/schemas/launch-metrics.schema.json",
  "title": "LaunchMetricsResponse",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "requests_since_launch": {
      "type": "integer",
      "minimum": 0
    },
    "launch_floor": {
      "type": "integer",
      "minimum": 0
    },
    "launch_offset": {
      "type": "integer",
      "minimum": 0
    },
    "metric_window_days": {
      "type": "integer",
      "minimum": 1
    },
    "average_daily_requests": {
      "type": "integer",
      "minimum": 0
    },
    "usage_dashboard_requests": {
      "type": "integer",
      "minimum": 0
    },
    "usage_dashboard_sites": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "site_key": {
            "type": "string"
          },
          "site_url": {
            "type": "string"
          },
          "request_count": {
            "type": "integer",
            "minimum": 0
          },
          "updated_at": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "daily": {
            "type": "array",
            "description": "Optional per-day rollup. unique_ips is the count of distinct request IPs that day for the site (cardinality only, not the IPs themselves).",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "date": {
                  "type": "string",
                  "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                },
                "requests": {
                  "type": "integer",
                  "minimum": 0
                },
                "unique_ips": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "required": [
                "date",
                "requests",
                "unique_ips"
              ]
            }
          }
        },
        "required": [
          "site_key",
          "site_url",
          "request_count",
          "updated_at",
          "status"
        ]
      }
    },
    "netlify_billing_snapshot_requests": {
      "type": "integer",
      "minimum": 0
    },
    "netlify_edge_tracked_requests": {
      "type": "integer",
      "minimum": 0
    },
    "netlify_traffic_log_requests": {
      "type": "integer",
      "minimum": 0
    },
    "previous_requests_since_launch": {
      "type": "integer",
      "minimum": 0
    },
    "request_delta_last_hour": {
      "type": "integer",
      "minimum": 0
    },
    "metric_refresh_interval_seconds": {
      "type": "integer",
      "minimum": 60
    },
    "metric_elapsed_seconds": {
      "type": "integer",
      "minimum": 60
    },
    "estimated_requests_per_second": {
      "type": "number",
      "minimum": 0
    },
    "previous_generated_at": {
      "type": "string"
    },
    "source": {
      "type": "string",
      "enum": [
        "usage-dashboard-rollup",
        "netlify-billing-snapshot",
        "netlify-log-drain",
        "netlify-edge-tracker",
        "launch-fallback"
      ]
    },
    "updated_at": {
      "type": "string"
    },
    "generated_at": {
      "type": "string"
    },
    "note": {
      "type": "string"
    }
  },
  "required": [
    "requests_since_launch",
    "launch_floor",
    "launch_offset",
    "metric_window_days",
    "average_daily_requests",
    "usage_dashboard_requests",
    "usage_dashboard_sites",
    "netlify_billing_snapshot_requests",
    "netlify_edge_tracked_requests",
    "netlify_traffic_log_requests",
    "previous_requests_since_launch",
    "request_delta_last_hour",
    "metric_refresh_interval_seconds",
    "metric_elapsed_seconds",
    "estimated_requests_per_second",
    "previous_generated_at",
    "source",
    "generated_at",
    "updated_at",
    "note"
  ]
}
