openapi: 3.0.3
info:
  title: Serverless Manager API
  description: HTTP API for Manager
  version: 1.0.0
  contact:
    name: Serverless

security:
  - bearerAuth: []

paths:
  /healthz:
    get:
      summary: Health check endpoint
      description: Basic health check for the manager service
      tags:
        - Health
      responses:
        '200':
          description: Service is healthy
          content:
            text/plain:
              schema:
                type: string
                example: ok
        '503':
          description: Service unavailable

  /readyz:
    get:
      summary: Readiness check endpoint
      description: Readiness probe for Kubernetes
      tags:
        - Health
      responses:
        '200':
          description: Service is ready
          content:
            text/plain:
              schema:
                type: string
                example: ok
        '503':
          description: Service not ready

  /metrics:
    get:
      summary: Prometheus metrics
      description: Exposes Prometheus format metrics for monitoring
      tags:
        - Monitoring
      responses:
        '200':
          description: Metrics in Prometheus format
          content:
            text/plain:
              schema:
                type: string

  /api/tidb/assign:
    get:
      summary: Assign TiDB pods
      description: Assign TiDB pod to a specific token/keyspace
      tags:
        - TiDB Management
      parameters:
        - name: token
          in: query
          required: true
          schema:
            type: string
          description: Token for TiDB assignment
        - name: max_idle_seconds
          in: query
          required: false
          schema:
            type: integer
            minimum: 0
          description: Maximum idle time in seconds
      responses:
        '200':
          description: Successfully assigned TiDB instances
          content:
            text/plain:
              schema:
                type: string
                description: Comma-separated list of TiDB pod IPs
        '400':
          description: Invalid request parameters
        '500':
          description: Internal server error

  /api/tidb/check:
    get:
      summary: Check TiDB instance health
      description: Check health status of specific TiDB instance
      tags:
        - TiDB Management
      parameters:
        - name: token
          in: query
          required: true
          schema:
            type: string
        - name: ip
          in: query
          required: true
          schema:
            type: string
            format: ipv4
        - name: ns
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: TiDB instance is healthy
          content:
            text/plain:
              schema:
                type: string
                example: ok
        '404':
          description: TiDB instance not found
        '503':
          description: TiDB instance unhealthy

  /api/tidb/free:
    get:
      summary: Free TiDB instances
      description: Release/free TiDB instances from assignment
      tags:
        - TiDB Management
      parameters:
        - name: pod_name
          in: query
          required: true
          schema:
            type: string
        - name: pod_ip
          in: query
          required: true
          schema:
            type: string
        - name: ns
          in: query
          required: true
          schema:
            type: string
        - name: normal_restart_log
          in: query
          required: false
          description: Normal restart payload
          schema:
            type: string
        - name: active_seconds
          in: query
          required: false
          description: Approximate TiDB active duration in seconds
          schema:
            type: integer
            format: int64
            minimum: 0
      responses:
        '200':
          description: Successfully freed TiDB instances
          content:
            text/plain:
              schema:
                type: string
                example: ok
        '400':
          description: Invalid request parameters

  /api/tidb/replace:
    get:
      summary: Replace TiDB pod
      description: Replace a specific TiDB pod with a new one
      tags:
        - TiDB Management
      parameters:
        - name: pod
          in: query
          required: true
          schema:
            type: string
        - name: ns
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully replaced TiDB pod
          content:
            text/plain:
              schema:
                type: string
                example: ok
        '404':
          description: Pod not found

  /api/tidb/checkconn:
    get:
      summary: Check connection status
      description: Check the connection status for a specific TiDB connection
      tags:
        - TiDB Management
      parameters:
        - name: token
          in: query
          required: true
          schema:
            type: string
        - name: conn_id
          in: query
          required: true
          schema:
            type: string
        - name: ip
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Connection status retrieved
          content:
            text/plain:
              schema:
                type: string
                enum: [normal_closed, unconfirmed]

  /api/tidb/status:
    get:
      summary: Get TiDB status
      description: Get comprehensive status information for TiDB instances
      tags:
        - TiDB Management
      parameters:
        - name: ns
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: TiDB status information
          content:
            application/json:
              schema:
                type: object
                properties:
                  clusters:
                    type: array
                    items:
                      type: object
                  pods:
                    type: array
                    items:
                      type: object

  /api/import/status:
    get:
      summary: Get import job status
      description: Retrieve status of an import job
      tags:
        - Import/Export
      parameters:
        - name: task-id
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Import job status
          content:
            application/json:
              schema:
                type: object
                properties:
                  phase:
                    type: string
                    enum: [Pending, Running, Failed, Completed]
                  progress:
                    type: number
                    minimum: 0
                    maximum: 100

  /api/tidb/get_active_import_jobs:
    get:
      summary: Get active import jobs
      description: List all active import jobs for a keyspace
      tags:
        - Import/Export
      parameters:
        - name: keyspace-name
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: List of active import jobs
          content:
            application/json:
              schema:
                type: object
                properties:
                  jobs:
                    type: array
                    items:
                      type: object
                      properties:
                        pod_name:
                          type: string
                        status:
                          type: string

  /api/tidb/get_active_export_jobs:
    get:
      summary: Get active export jobs
      description: List all active export jobs for a keyspace
      tags:
        - Import/Export
      parameters:
        - name: keyspace-name
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: List of active export jobs
          content:
            application/json:
              schema:
                type: object
                properties:
                  jobs:
                    type: array
                    items:
                      type: object
                      properties:
                        pod_name:
                          type: string
                        status:
                          type: string

  /api/tidb/get_assign_tidb:
    get:
      summary: Get assigned TiDB pods
      description: Get TiDB pods assigned to a specific keyspace
      tags:
        - Operations
      parameters:
        - name: keyspace-name
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Assignment information
          content:
            application/json:
              schema:
                type: object
                properties:
                  namespace:
                    type: string
                  assigned_tidb_pods:
                    type: array
                    items:
                      type: string

  /api/tidb/kill_assign_tidb:
    get:
      summary: Kill assigned TiDB pods
      description: Force kill TiDB pods assigned to a keyspace
      tags:
        - Operations
      parameters:
        - name: keyspace-name
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully killed TiDB pods
          content:
            text/plain:
              schema:
                type: string
                example: ok
        '404':
          description: Keyspace not found

  /api/tidb/get_active_tidb:
    get:
      summary: Get active TiDB pod addresses
      description: List active TiDB pod addresses. You can query multiple namespaces using comma-separated values.
      tags:
        - Operations
      parameters:
        - name: namespace
          in: query
          required: false
          schema:
            type: string
          description: Comma-separated TiDB pool namespaces. If empty, returns all namespaces.
      responses:
        '200':
          description: Active TiDB pod addresses
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    keyspace_name:
                      type: string
                    hostname:
                      type: string
                    host:
                      type: string
                    port:
                      type: integer
                    status_port:
                      type: integer
        '400':
          description: Namespace not found

  /api/keyspace/update_pool_create_rate:
    post:
      summary: Update keyspace-pool create rate
      description: Update the per-second create rate in runtime memory.
      tags:
        - Operations
      parameters:
        - name: create-rate-per-second
          in: query
          required: true
          schema:
            type: number
            minimum: 0
          description: Maximum number of keyspaces to create per second. 0 means unlimited.
      responses:
        '200':
          description: Successfully updated the create rate
          content:
            application/json:
              schema:
                type: object
                properties:
                  create_rate_per_second:
                    type: number
        '400':
          description: Invalid request parameters
        '405':
          description: Method not allowed

  /debug/pprof/:
    get:
      summary: pprof index
      description: pprof debugging interface index
      tags:
        - Debugging
      responses:
        '200':
          description: pprof index page
          content:
            text/html:
              schema:
                type: string

  /debug/pprof/cmdline:
    get:
      summary: Command line
      description: Show program command line arguments
      tags:
        - Debugging
      responses:
        '200':
          description: Command line arguments
          content:
            text/plain:
              schema:
                type: string

  /debug/pprof/profile:
    get:
      summary: CPU profile
      description: CPU profiling endpoint
      tags:
        - Debugging
      parameters:
        - name: seconds
          in: query
          required: false
          schema:
            type: integer
            default: 30
      responses:
        '200':
          description: CPU profile data
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary

  /debug/pprof/symbol:
    get:
      summary: Symbol lookup
      description: Symbol lookup for profiling
      tags:
        - Debugging
      responses:
        '200':
          description: Symbol information
          content:
            text/plain:
              schema:
                type: string

  /debug/pprof/trace:
    get:
      summary: Execution trace
      description: Execution tracing endpoint
      tags:
        - Debugging
      parameters:
        - name: seconds
          in: query
          required: false
          schema:
            type: integer
            default: 1
      responses:
        '200':
          description: Trace data
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary

  /TidbBackend/WatchTidbBackendV1:
    post:
      summary: Watch TiDB backend updates (v1)
      description: gRPC streaming endpoint for TiDB backend updates
      tags:
        - gRPC Services
      requestBody:
        required: true
        content:
          application/grpc:
            schema:
              type: object
      responses:
        '200':
          description: gRPC streaming response
          content:
            application/grpc:
              schema:
                type: object

  /TidbBackend/WatchBackendV2:
    post:
      summary: Watch TiDB backend updates (v2)
      description: gRPC streaming endpoint for TiDB backend updates v2
      tags:
        - gRPC Services
      requestBody:
        required: true
        content:
          application/grpc:
            schema:
              type: object
      responses:
        '200':
          description: gRPC streaming response
          content:
            application/grpc:
              schema:
                type: object

  /TidbBackend/GetBackendV2:
    post:
      summary: Get backend information (v2)
      description: Get TiDB backend information
      tags:
        - gRPC Services
      requestBody:
        required: true
        content:
          application/grpc:
            schema:
              type: object
      responses:
        '200':
          description: Backend information
          content:
            application/grpc:
              schema:
                type: object

components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

tags:
  - name: Health
    description: Health check and monitoring endpoints
  - name: TiDB Management
    description: TiDB instance management operations
  - name: Import/Export
    description: Import and export job management
  - name: Operations
    description: Operational and administrative endpoints
  - name: Webhooks
    description: Kubernetes webhook endpoints
  - name: Debugging
    description: Debugging and profiling endpoints
  - name: Monitoring
    description: Metrics and monitoring endpoints
  - name: gRPC Services
    description: gRPC services accessible via HTTP/2
