{
  "repo": "tidbcloud/tcidm",
  "binary": "regional_tcidm_service",
  "binary_path": "cmd/regional_tcidm_service/main.go",
  "surface_kind": "http_service",
  "type": "http_service",
  "extensions": {},
  "services": [
    {
      "name": "PrivateLinkEndpointService",
      "type": "http_api",
      "base_path": "/api/v1/tcidm/privatelinkendpoint",
      "methods": [
        {
          "name": "GetPrivateLinkEndpointCR",
          "name_key": "PrivateLinkEndpointService.GetPrivateLinkEndpointCR",
          "http_method": "GET",
          "path": "/cr",
          "input": "namespace, name (query)",
          "output": "PrivateLinkEndpoint CR"
        },
        {
          "name": "CreatePrivateLinkEndpointCR",
          "name_key": "PrivateLinkEndpointService.CreatePrivateLinkEndpointCR",
          "http_method": "POST",
          "path": "/cr",
          "input": "PrivateLinkEndpoint (body)",
          "output": "SuccessRes"
        },
        {
          "name": "DeletePrivateLinkEndpointCR",
          "name_key": "PrivateLinkEndpointService.DeletePrivateLinkEndpointCR",
          "http_method": "DELETE",
          "path": "/cr",
          "input": "namespace, name (query)",
          "output": "SuccessRes"
        }
      ]
    },
    {
      "name": "DMJobService",
      "type": "http_api",
      "base_path": "/api/v1/tcidm/dmjob",
      "methods": [
        {
          "name": "GetDMJobCR",
          "name_key": "DMJobService.GetDMJobCR",
          "http_method": "GET",
          "path": "/cr",
          "input": "namespace, name (query)",
          "output": "DMJob CR"
        },
        {
          "name": "CreateDMJobCR",
          "name_key": "DMJobService.CreateDMJobCR",
          "http_method": "POST",
          "path": "/cr",
          "input": "DMJob (body)",
          "output": "SuccessRes"
        },
        {
          "name": "UpdateDMJobCR",
          "name_key": "DMJobService.UpdateDMJobCR",
          "http_method": "PUT",
          "path": "/cr",
          "input": "DMJob (body)",
          "output": "SuccessRes"
        },
        {
          "name": "DeleteDMJobCR",
          "name_key": "DMJobService.DeleteDMJobCR",
          "http_method": "DELETE",
          "path": "/cr",
          "input": "namespace, name (query)",
          "output": "SuccessRes"
        }
      ]
    },
    {
      "name": "ImportService",
      "type": "http_api",
      "base_path": "/api/v1/tcidm/import",
      "methods": [
        {
          "name": "GetImportCR",
          "name_key": "ImportService.GetImportCR",
          "http_method": "GET",
          "path": "/cr",
          "input": "namespace, name (query)",
          "output": "Import CR"
        },
        {
          "name": "CreateImportCR",
          "name_key": "ImportService.CreateImportCR",
          "http_method": "POST",
          "path": "/cr",
          "input": "Import (body)",
          "output": "SuccessRes"
        },
        {
          "name": "DeleteImportCR",
          "name_key": "ImportService.DeleteImportCR",
          "http_method": "DELETE",
          "path": "/cr",
          "input": "namespace, name (query)",
          "output": "SuccessRes"
        },
        {
          "name": "GetImportProgress",
          "name_key": "ImportService.GetImportProgress",
          "http_method": "POST",
          "path": "/progress",
          "input": "ImportProgressParam (body)",
          "output": "TaskProgress"
        },
        {
          "name": "ImportPrecheck",
          "name_key": "ImportService.ImportPrecheck",
          "http_method": "POST",
          "path": "/precheck",
          "input": "ImportPrecheckParam (body)",
          "output": "LightningPrecheckResp"
        },
        {
          "name": "SearchImportFiles",
          "name_key": "ImportService.SearchImportFiles",
          "http_method": "POST",
          "path": "/search-import-files",
          "input": "SearchImportFilesParam (body)",
          "output": "SearchImportFilesResp"
        },
        {
          "name": "PrecheckImportFile",
          "name_key": "ImportService.PrecheckImportFile",
          "http_method": "POST",
          "path": "/precheck-import-file",
          "input": "PrecheckImportFileParam (body)",
          "output": "SuccessRes"
        }
      ]
    },
    {
      "name": "UtilService",
      "type": "http_api",
      "base_path": "/api/v1/tcidm",
      "methods": [
        {
          "name": "CheckAzblobAccess",
          "name_key": "UtilService.CheckAzblobAccess",
          "http_method": "POST",
          "path": "/azblob/check_access",
          "input": "CheckAzblobAccessParam (body)",
          "output": "CheckAzblobAccessResp"
        },
        {
          "name": "CheckS3Access",
          "name_key": "UtilService.CheckS3Access",
          "http_method": "POST",
          "path": "/s3/check_access",
          "input": "CheckS3AccessParam (body)",
          "output": "CheckS3AccessResp"
        },
        {
          "name": "CheckGcsAccess",
          "name_key": "UtilService.CheckGcsAccess",
          "http_method": "POST",
          "path": "/gcs/check_access",
          "input": "CheckGcsAccessParam (body)",
          "output": "CheckGcsAccessResp"
        },
        {
          "name": "GetClusterTables",
          "name_key": "UtilService.GetClusterTables",
          "http_method": "POST",
          "path": "/cluster-tables",
          "input": "GetClusterTablesParam (body)",
          "output": "GetClusterTablesResp"
        },
        {
          "name": "ExecSQLOnCluster",
          "name_key": "UtilService.ExecSQLOnCluster",
          "http_method": "POST",
          "path": "/cluster/execsql",
          "input": "ExecSQLOnClusterParam (body)",
          "output": "ExecSQLResp"
        },
        {
          "name": "ListVpcs",
          "name_key": "UtilService.ListVpcs",
          "http_method": "POST",
          "path": "/vpc/list",
          "input": "ListVpcsRequest (body)",
          "output": "ListVpcsResp"
        },
        {
          "name": "GetClusterRole",
          "name_key": "UtilService.GetClusterRole",
          "http_method": "GET",
          "path": "/cluster/role",
          "input": "cluster_id (query)",
          "output": "ClusterRoleResp"
        }
      ]
    },
    {
      "name": "ProxyService",
      "type": "http_api",
      "base_path": "/api/v1/tcidm/proxy",
      "methods": [
        {
          "name": "ProxyToDM",
          "name_key": "ProxyService.ProxyToDM",
          "http_method": "ANY",
          "path": "/dm/*any",
          "input": "X-DM-Addr header required",
          "output": "Proxied response"
        },
        {
          "name": "ProxyToDataflowAgent",
          "name_key": "ProxyService.ProxyToDataflowAgent",
          "http_method": "ANY",
          "path": "/dataflow-agent/*any",
          "input": "X-TIDB-ClusterID header required",
          "output": "Proxied response"
        }
      ]
    },
    {
      "name": "HealthService",
      "type": "http_api",
      "base_path": "",
      "methods": [
        {
          "name": "Healthz",
          "name_key": "HealthService.Healthz",
          "http_method": "ANY",
          "path": "/healthz",
          "input": "none",
          "output": "200 OK"
        }
      ]
    },
    {
      "name": "MetricsService",
      "type": "http_api",
      "base_path": "",
      "methods": [
        {
          "name": "Metrics",
          "name_key": "MetricsService.Metrics",
          "http_method": "ANY",
          "path": "/metrics",
          "input": "none",
          "output": "Prometheus metrics"
        }
      ]
    }
  ]
}
