apiVersion: batch/v1 kind: CronJob metadata: name: metrics-retention namespace: polymarket-bot spec: # Daily at 00:10 UTC: collapse every past UTC day in metrics_daily to its # last snapshot (the "daily close"). The bot writes one snapshot per cycle # (~1,300/day); only the close of past days is read back (DISTINCT ON in # get_metrics_history / get_daily_pnl_closes), so intraday rows of past # days are dead weight. Today's rows are never touched: the latest one # feeds /api/summary and the close is still evolving. schedule: "10 0 * * *" suspend: true concurrencyPolicy: Forbid successfulJobsHistoryLimit: 3 failedJobsHistoryLimit: 3 jobTemplate: spec: backoffLimit: 2 template: spec: restartPolicy: Never containers: - name: prune image: postgres:16-alpine env: - name: DATABASE_URL valueFrom: secretKeyRef: name: bot-secrets-infisical key: DATABASE_URL command: - /bin/sh - -c - | set -e psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -c " DELETE FROM metrics_daily m USING ( SELECT timestamp::date AS day, MAX(timestamp) AS keep_ts FROM metrics_daily WHERE timestamp::date < CURRENT_DATE GROUP BY 1 ) k WHERE m.timestamp::date = k.day AND m.timestamp < k.keep_ts; " psql "$DATABASE_URL" -c "VACUUM ANALYZE metrics_daily;" resources: requests: cpu: 10m memory: 32Mi limits: memory: 128Mi