be526ae614
- Added pipelineEnabled flag to Helm values (default: true) - Worker services (scheduler, ingestion, parser, extractor, aggregation, recommendation, broker-adapter, lake-publisher) scale to 0 when disabled - API services always run regardless of toggle - Redis-based runtime toggle: POST /api/ops/pipeline/toggle - Scheduler checks the flag before each cycle - Frontend: green/red Pipeline ON/OFF button on the pipeline page - Beta defaults to pipelineEnabled: false - Base values.yaml: blanked external URLs (Ollama, Polygon, Alpaca) so stages only connect to what they explicitly configure
277 lines
7.5 KiB
YAML
277 lines
7.5 KiB
YAML
## Global image settings
|
|
image:
|
|
registry: registry.celestium.life/stonks-oracle
|
|
pullPolicy: Always
|
|
tag: latest
|
|
|
|
## Pipeline toggle — when false, all worker services (ingestion, parsing,
|
|
## extraction, aggregation, recommendation, broker, lake-publisher, scheduler)
|
|
## are scaled to 0. API services always run.
|
|
pipelineEnabled: true
|
|
|
|
## Service deployments — replicas and resource overrides
|
|
services:
|
|
scheduler:
|
|
replicas: 1
|
|
pipeline: true
|
|
image: scheduler
|
|
command: "python -m services.scheduler.app"
|
|
tier: orchestration
|
|
secrets: [stonks-core-secrets]
|
|
resources:
|
|
requests: { cpu: 50m, memory: 64Mi }
|
|
limits: { cpu: 200m, memory: 128Mi }
|
|
|
|
symbolRegistry:
|
|
replicas: 1
|
|
image: symbol-registry
|
|
command: "uvicorn services.symbol_registry.app:app --host 0.0.0.0 --port 8000"
|
|
tier: api
|
|
port: 8000
|
|
secrets: [stonks-core-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
probes:
|
|
readiness: { path: /docs, port: 8000, initialDelay: 5, period: 10 }
|
|
liveness: { path: /docs, port: 8000, initialDelay: 10, period: 30 }
|
|
|
|
ingestion:
|
|
replicas: 2
|
|
pipeline: true
|
|
image: ingestion
|
|
command: "python -m services.ingestion.worker"
|
|
tier: ingestion
|
|
secrets: [stonks-core-secrets, stonks-market-secrets, stonks-broker-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
|
|
parser:
|
|
replicas: 2
|
|
pipeline: true
|
|
image: parser
|
|
command: "python -m services.parser.worker"
|
|
tier: processing
|
|
secrets: [stonks-core-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
|
|
extractor:
|
|
replicas: 1
|
|
pipeline: true
|
|
image: extractor
|
|
command: "python -m services.extractor.main"
|
|
tier: processing
|
|
secrets: [stonks-core-secrets]
|
|
resources:
|
|
requests: { cpu: 200m, memory: 256Mi }
|
|
limits: { cpu: "1", memory: 512Mi }
|
|
|
|
aggregation:
|
|
replicas: 4
|
|
pipeline: true
|
|
image: aggregation
|
|
command: "python -m services.aggregation.main"
|
|
tier: processing
|
|
secrets: [stonks-core-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
|
|
recommendation:
|
|
replicas: 1
|
|
pipeline: true
|
|
image: recommendation
|
|
command: "python -m services.recommendation.main"
|
|
tier: processing
|
|
secrets: [stonks-core-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
|
|
tradingEngine:
|
|
replicas: 1
|
|
image: trading-engine
|
|
command: "uvicorn services.trading.app:app --host 0.0.0.0 --port 8000"
|
|
tier: trading
|
|
port: 8000
|
|
secrets: [stonks-core-secrets, stonks-broker-secrets, stonks-gmail-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 256Mi }
|
|
limits: { cpu: 500m, memory: 512Mi }
|
|
probes:
|
|
readiness: { path: /ready, port: 8000, initialDelay: 5, period: 10 }
|
|
liveness: { path: /health, port: 8000, initialDelay: 10, period: 30 }
|
|
|
|
riskEngine:
|
|
replicas: 1
|
|
image: risk
|
|
command: "uvicorn services.risk.app:app --host 0.0.0.0 --port 8000"
|
|
tier: trading
|
|
port: 8000
|
|
secrets: [stonks-core-secrets, stonks-broker-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
|
|
brokerAdapter:
|
|
replicas: 1
|
|
pipeline: true
|
|
image: broker-adapter
|
|
command: "python -m services.adapters.broker_service"
|
|
tier: trading
|
|
secrets: [stonks-core-secrets, stonks-broker-secrets]
|
|
resources:
|
|
requests: { cpu: 50m, memory: 64Mi }
|
|
limits: { cpu: 200m, memory: 128Mi }
|
|
|
|
lakePublisher:
|
|
replicas: 1
|
|
pipeline: true
|
|
image: lake-publisher
|
|
command: "python -m services.lake_publisher.jobs"
|
|
tier: analytics
|
|
secrets: [stonks-core-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
|
|
queryApi:
|
|
replicas: 1
|
|
image: query-api
|
|
command: "uvicorn services.api.app:app --host 0.0.0.0 --port 8000"
|
|
tier: api
|
|
port: 8000
|
|
secrets: [stonks-core-secrets]
|
|
resources:
|
|
requests: { cpu: 100m, memory: 128Mi }
|
|
limits: { cpu: 500m, memory: 256Mi }
|
|
probes:
|
|
readiness: { path: /docs, port: 8000, initialDelay: 5, period: 10 }
|
|
|
|
dashboard:
|
|
replicas: 1
|
|
image: dashboard
|
|
tier: frontend
|
|
port: 8080
|
|
resources:
|
|
requests: { cpu: 50m, memory: 64Mi }
|
|
limits: { cpu: 200m, memory: 128Mi }
|
|
probes:
|
|
readiness: { path: /, port: 8080, initialDelay: 3, period: 10 }
|
|
liveness: { path: /, port: 8080, initialDelay: 5, period: 30 }
|
|
|
|
## ConfigMap data
|
|
config:
|
|
POSTGRES_HOST: "postgresql-rw.postgresql-service.svc.cluster.local"
|
|
POSTGRES_PORT: "5432"
|
|
POSTGRES_DB: "stonks"
|
|
POSTGRES_USER: "stonks"
|
|
REDIS_HOST: "redis-master.redis-service.svc.cluster.local"
|
|
REDIS_PORT: "6379"
|
|
REDIS_DB: "0"
|
|
MINIO_ENDPOINT: "minio.minio-service.svc.cluster.local:80"
|
|
MINIO_SECURE: "false"
|
|
OLLAMA_BASE_URL: ""
|
|
OLLAMA_MODEL: "qwen3.5:9b-fast"
|
|
OLLAMA_TIMEOUT: "240"
|
|
OLLAMA_MAX_RETRIES: "2"
|
|
OLLAMA_RETRY_BASE_DELAY: "1.0"
|
|
OLLAMA_RETRY_MAX_DELAY: "10.0"
|
|
OLLAMA_RETRY_BACKOFF_MULTIPLIER: "2.0"
|
|
TRINO_HOST: "trino.stonks-oracle.svc.cluster.local"
|
|
TRINO_PORT: "8080"
|
|
TRINO_CATALOG: "lakehouse"
|
|
TRINO_SCHEMA: "stonks"
|
|
TRINO_ICEBERG_CATALOG: "iceberg"
|
|
BROKER_MODE: "paper"
|
|
BROKER_PROVIDER: ""
|
|
MARKET_DATA_BASE_URL: ""
|
|
MARKET_DATA_PROVIDER: "polygon"
|
|
RETENTION_RAW_MARKET_DAYS: "90"
|
|
RETENTION_RAW_NEWS_DAYS: "180"
|
|
RETENTION_RAW_FILINGS_DAYS: "365"
|
|
RETENTION_NORMALIZED_DAYS: "180"
|
|
RETENTION_LLM_PROMPTS_DAYS: "365"
|
|
RETENTION_LLM_RESULTS_DAYS: "365"
|
|
RETENTION_LAKEHOUSE_DAYS: "730"
|
|
RETENTION_AUDIT_DAYS: "730"
|
|
RETENTION_CLEANUP_INTERVAL_HOURS: "24"
|
|
RETENTION_BATCH_SIZE: "1000"
|
|
LOG_LEVEL: "INFO"
|
|
JSON_LOGS: "true"
|
|
DEPLOY_STAGE: ""
|
|
ALERT_SOURCE_FAILURE_THRESHOLD: "3"
|
|
ALERT_SOURCE_FAILURE_WINDOW_HOURS: "6"
|
|
ALERT_SCHEMA_FAILURE_RATE_THRESHOLD: "0.3"
|
|
ALERT_SCHEMA_FAILURE_WINDOW_HOURS: "1"
|
|
ALERT_LAKE_LAG_THRESHOLD_MINUTES: "60"
|
|
ALERT_BROKER_ERROR_THRESHOLD: "3"
|
|
ALERT_BROKER_ERROR_WINDOW_HOURS: "1"
|
|
ALERT_CHECK_INTERVAL_SECONDS: "120"
|
|
TRADING_ENABLED: "true"
|
|
TRADING_RISK_TIER: "moderate"
|
|
TRADING_ABSOLUTE_POSITION_CAP: "10000.0"
|
|
TRADING_MAX_OPEN_POSITIONS: "10"
|
|
|
|
## Secrets
|
|
secrets:
|
|
core:
|
|
POSTGRES_PASSWORD: ""
|
|
MINIO_ACCESS_KEY: ""
|
|
MINIO_SECRET_KEY: ""
|
|
REDIS_PASSWORD: ""
|
|
broker:
|
|
BROKER_API_KEY: ""
|
|
BROKER_API_SECRET: ""
|
|
BROKER_BASE_URL: ""
|
|
market:
|
|
MARKET_DATA_API_KEY: ""
|
|
gmail:
|
|
GMAIL_SENDER: "celes@celestium.life"
|
|
GMAIL_RECIPIENT: "celes@celestium.life"
|
|
GMAIL_APP_PASSWORD: ""
|
|
dashboard:
|
|
SUPERSET_SECRET_KEY: ""
|
|
SUPERSET_ADMIN_PASSWORD: ""
|
|
|
|
## Ingress
|
|
ingress:
|
|
enabled: true
|
|
className: traefik
|
|
clusterIssuer: ca-issuer
|
|
hosts:
|
|
queryApi: stonks-api.celestium.life
|
|
symbolRegistry: stonks-registry.celestium.life
|
|
dashboard: stonks.celestium.life
|
|
superset: stonks-dash.celestium.life
|
|
trino: stonks-trino.celestium.life
|
|
tradingEngine: stonks-trading.celestium.life
|
|
|
|
## Analytics stack
|
|
trino:
|
|
enabled: true
|
|
resources:
|
|
requests: { cpu: 500m, memory: 1Gi }
|
|
limits: { cpu: "2", memory: 4Gi }
|
|
|
|
hiveMetastore:
|
|
enabled: true
|
|
storageSize: 1Gi
|
|
resources:
|
|
requests: { cpu: 200m, memory: 512Mi }
|
|
limits: { cpu: "1", memory: 1Gi }
|
|
|
|
superset:
|
|
enabled: true
|
|
storageSize: 2Gi
|
|
resources:
|
|
requests: { cpu: 200m, memory: 512Mi }
|
|
limits: { cpu: "1", memory: 2Gi }
|
|
|
|
## Network policies
|
|
networkPolicies:
|
|
enabled: true
|