{
  "repo": "tidbcloud/account",
  "binary": "worker",
  "binary_path": "central/cmd/worker/main.go",
  "surface_kind": "worker_service",
  "type": "worker_service",
  "extensions": {},
  "services": [
    {
      "name": "HealthService",
      "package": "main",
      "type": "http",
      "port": 11000,
      "methods": [
        {"name": "Healthz", "name_key": "HealthService.Healthz", "method": "ANY", "path": "/healthz", "description": "Health check endpoint"},
        {"name": "Version", "name_key": "HealthService.Version", "method": "ANY", "path": "/version", "description": "Version info endpoint"},
        {"name": "Metrics", "name_key": "HealthService.Metrics", "method": "ANY", "path": "/metrics", "description": "Prometheus metrics endpoint"}
      ]
    },
    {
      "name": "JobQueueHandler",
      "package": "jobs",
      "type": "sqs_consumer",
      "queue_type": "AWS SQS",
      "methods": [
        {"name": "SyncSalesforce", "name_key": "JobQueueHandler.SyncSalesforce", "job_type": "sync_salesforce", "description": "Sync data to Salesforce"},
        {"name": "SyncZendesk", "name_key": "JobQueueHandler.SyncZendesk", "job_type": "sync_zendesk", "description": "Sync data to Zendesk"},
        {"name": "SyncPocApplication", "name_key": "JobQueueHandler.SyncPocApplication", "job_type": "sync_poc_application", "description": "Sync POC application to Salesforce"},
        {"name": "HeartBeatSignal", "name_key": "JobQueueHandler.HeartBeatSignal", "job_type": "heartbeat_signal", "description": "Heartbeat signal job"}
      ]
    },
    {
      "name": "ClusterEventHandler",
      "package": "events/receive",
      "type": "eventbus_consumer",
      "event_type": "ClusterEvent",
      "methods": [
        {"name": "ClusterCreating", "name_key": "ClusterEventHandler.ClusterCreating", "event_type": "ClusterCreating", "description": "Handle cluster creating event"},
        {"name": "ClusterCreated", "name_key": "ClusterEventHandler.ClusterCreated", "event_type": "ClusterCreated", "description": "Handle cluster created event"},
        {"name": "ClusterLaunching", "name_key": "ClusterEventHandler.ClusterLaunching", "event_type": "ClusterLaunching", "description": "Handle cluster launching event"},
        {"name": "ClusterDeleting", "name_key": "ClusterEventHandler.ClusterDeleting", "event_type": "ClusterDeleting", "description": "Handle cluster deleting event"},
        {"name": "ClusterDeleted", "name_key": "ClusterEventHandler.ClusterDeleted", "event_type": "ClusterDeleted", "description": "Handle cluster deleted event"}
      ]
    },
    {
      "name": "OrgEventHandler",
      "package": "events/receive",
      "type": "eventbus_consumer",
      "event_type": "OrgEvent",
      "methods": [
        {"name": "OrgActivate", "name_key": "OrgEventHandler.OrgActivate", "event_type": "Activate", "description": "Handle org activation event for MSP customer"}
      ]
    },
    {
      "name": "DataAppBindClusterEventHandler",
      "package": "events/receive",
      "type": "eventbus_consumer",
      "event_type": "DataAppBindCluster",
      "methods": [
        {"name": "AddApiKey", "name_key": "DataAppBindClusterEventHandler.AddApiKey", "action": "add_api_key", "description": "Add API key to cluster"},
        {"name": "DelApiKey", "name_key": "DataAppBindClusterEventHandler.DelApiKey", "action": "delete_api_key", "description": "Delete API key from cluster"},
        {"name": "AddCluster", "name_key": "DataAppBindClusterEventHandler.AddCluster", "action": "add_cluster", "description": "Add cluster to data app"},
        {"name": "DelCluster", "name_key": "DataAppBindClusterEventHandler.DelCluster", "action": "delete_cluster", "description": "Delete cluster from data app"}
      ]
    },
    {
      "name": "RedisSubscriber",
      "package": "events/receive",
      "type": "redis_pubsub",
      "channel": "DeleteClusterCache",
      "methods": [
        {"name": "DeleteClusterCache", "name_key": "RedisSubscriber.DeleteClusterCache", "channel": "DeleteClusterCache", "description": "Delete cluster cache on redis pub/sub message"}
      ]
    },
    {
      "name": "BackgroundWorkers",
      "package": "worker",
      "type": "scheduled_jobs",
      "methods": [
        {"name": "CleanupTenantWorker", "name_key": "BackgroundWorkers.CleanupTenantWorker", "interval": "30m", "description": "Cleanup deleted tenant resources"},
        {"name": "CleanupProjectWorker", "name_key": "BackgroundWorkers.CleanupProjectWorker", "interval": "1m", "description": "Cleanup deleted project resources"},
        {"name": "PocApplicationWorker", "name_key": "BackgroundWorkers.PocApplicationWorker", "interval": "1h", "description": "Process POC application"},
        {"name": "SyncTenantWorker", "name_key": "BackgroundWorkers.SyncTenantWorker", "interval": "1h", "description": "Sync tenant data"},
        {"name": "SQSMonitorWorker", "name_key": "BackgroundWorkers.SQSMonitorWorker", "interval": "3m", "description": "Monitor SQS queue"},
        {"name": "MarketplaceWorker", "name_key": "BackgroundWorkers.MarketplaceWorker", "interval": "30s", "description": "Process marketplace subscription changes"},
        {"name": "DBUserWorker", "name_key": "BackgroundWorkers.DBUserWorker", "interval": "5s", "description": "Process DB user commands"},
        {"name": "DBUserCheckWorker", "name_key": "BackgroundWorkers.DBUserCheckWorker", "interval": "5m", "description": "Check and validate DB users"},
        {"name": "DynamoDBDataValidationWorker", "name_key": "BackgroundWorkers.DynamoDBDataValidationWorker", "interval": "30m", "description": "Validate DynamoDB data consistency"},
        {"name": "MspCustomerConvertWorker", "name_key": "BackgroundWorkers.MspCustomerConvertWorker", "interval": "30s", "description": "Convert MSP customer"},
        {"name": "MspClearUserServicesAgreementWorker", "name_key": "BackgroundWorkers.MspClearUserServicesAgreementWorker", "interval": "1m", "description": "Clear MSP user services agreement"},
        {"name": "RoleBindingMonitorWorker", "name_key": "BackgroundWorkers.RoleBindingMonitorWorker", "interval": "10h", "description": "Monitor role bindings"},
        {"name": "ClusterRelationMonitorWorker", "name_key": "BackgroundWorkers.ClusterRelationMonitorWorker", "interval": "12h", "description": "Monitor cluster relations"},
        {"name": "ClusterRelationSyncWorker", "name_key": "BackgroundWorkers.ClusterRelationSyncWorker", "interval": "24h", "description": "Sync cluster relations"},
        {"name": "CleanupUserSessionWorker", "name_key": "BackgroundWorkers.CleanupUserSessionWorker", "interval": "24h", "description": "Cleanup expired user sessions"}
      ]
    }
  ]
}
