{
  "repo": "tidbcloud/aws-shared-provider",
  "binary": "audit-log",
  "binary_path": "cmd/audit-log/main.go",
  "surface_kind": "mixed_service",
  "type": "mixed_service",
  "extensions": {
    "notes": [
      "Binary has two subcommands: scheduler (with HTTP API, cron jobs, and controller) and worker (CLI only)"
    ]
  },
  "services": [
    {
      "name": "SchedulerHealthService",
      "type": "http",
      "subcommand": "scheduler",
      "methods": [
        {
          "name": "GET /healthz",
          "name_key": "HTTP GET /healthz",
          "description": "Health check endpoint"
        }
      ],
      "endpoints": [
        {
          "path": "/healthz",
          "method": "GET",
          "description": "Health check endpoint",
          "port": 8080
        }
      ]
    },
    {
      "name": "SchedulerMetricsService",
      "type": "http",
      "subcommand": "scheduler",
      "methods": [
        {
          "name": "GET /metrics",
          "name_key": "HTTP GET /metrics",
          "description": "Prometheus metrics endpoint"
        }
      ],
      "endpoints": [
        {
          "path": "/metrics",
          "method": "GET",
          "description": "Prometheus metrics endpoint",
          "port": 9090
        }
      ]
    },
    {
      "name": "SchedulerCronJobs",
      "type": "cron",
      "subcommand": "scheduler",
      "methods": [
        {
          "name": "Merge",
          "name_key": "Runtime SchedulerCronJobs.Merge",
          "description": "Merge audit log files"
        },
        {
          "name": "Dispatch",
          "name_key": "Runtime SchedulerCronJobs.Dispatch",
          "description": "Dispatch audit log worker jobs"
        },
        {
          "name": "Clean",
          "name_key": "Runtime SchedulerCronJobs.Clean",
          "description": "Clean old audit log data"
        }
      ],
      "jobs": [
        {
          "name": "Merge",
          "schedule": "@every 5m",
          "description": "Merge audit log files"
        },
        {
          "name": "Dispatch",
          "schedule": "@every 2m",
          "description": "Dispatch audit log worker jobs"
        },
        {
          "name": "Clean",
          "schedule": "@every 24h",
          "description": "Clean old audit log data"
        }
      ]
    },
    {
      "name": "WorkerJobController",
      "type": "kubernetes_controller",
      "subcommand": "scheduler",
      "description": "Controller that watches batchv1.Job resources for audit log workers",
      "methods": [
        {
          "name": "Reconcile",
          "name_key": "Runtime WorkerJobController.Reconcile",
          "description": "Reconcile watched Job resources for audit log workers"
        }
      ],
      "watches": [
        {
          "kind": "Job",
          "group": "batch",
          "version": "v1"
        }
      ]
    },
    {
      "name": "Worker",
      "type": "cli",
      "subcommand": "worker",
      "methods": [
        {
          "name": "worker",
          "name_key": "CLI worker",
          "description": "Audit log worker entrypoint"
        }
      ],
      "description": "Audit log worker (runs as Kubernetes Job)"
    }
  ]
}
