{"definition_raw":"---\nid: booking-curve-pull\ntitle: Pull booking curve data from Neon DB\nschedule: \"0 6 * * 1-5\"\ntimeout: 120\nretry: true\nenabled: true\nnotify_on: failure\nrun_as: shell\ncommand: \"cd /home/lucienne/workspace && python3 scripts/booking_curve_pull.py\"\ntags: [flysafair, booking-curve, neondb, data]\nruntime_profile: direct_python\n---\n**OVERRIDES runtime profile:** uses `direct_python` (plain Python, no model) because the command chain never invokes the `claude` CLI or any LLM API \u2014 pure-infra task; scheduler provider env injection is a no-op (MC-4942 U12 sweep).\n\nWeekday booking curve pull. Queries the FlySafair Neon PostgreSQL database\nfor the current month route-level daily snapshot data and uploads as CSV\nto the Booking Curves folder on Google Drive.\n\nRuns weekdays at 8:10am SAST (6:10 UTC) \u2014 after ACSA monthly (7am),\nbefore ACSA website (8am Tue) and IATA fuel (8:30am Tue).\n\n100% Python, zero AI cost. ~5 seconds per run.\n\nSource: Neon DB (summary_route_daily_snapshots)\nTarget: Google Drive Booking Curves folder (ID: 1wcTbDjNWytoMpCqFZHwlNdP4qLvto3DG)\nOutput: YYYYMM Booking Curve.csv\n","id":"booking-curve-pull","last_run":{"duration_s":29.706846,"log_path":"/home/lucienne/workspace/logs/task-runs/booking-curve-pull/409662.log","output":"=== Booking Curve Pull \u2014 2026-06-12 ===\nPulling data for June 2026\nQuery returned 156731 rows\nSaved to /home/lucienne/workspace/.gdrive-cache/202606 Booking Curve.csv\nUpdated existing file on Drive (ID: 1n-yy8WeGvafnpDeJ5WBsHNjF9ZENCtBj)\n\nSuccess: 156731 rows \u2192 202606 Booking Curve.csv\n","started_at":"2026-06-12T06:00:00.591255+02:00","status":"completed"},"next_run":"2026-06-15 06:00","next_run_iso":"2026-06-15T06:00:00+02:00","runs":[{"duration_s":29.706846,"finished_at":"2026-06-12T06:00:30.302090+02:00","id":409662,"log_path":"/home/lucienne/workspace/logs/task-runs/booking-curve-pull/409662.log","output":"=== Booking Curve Pull \u2014 2026-06-12 ===\nPulling data for June 2026\nQuery returned 156731 rows\nSaved to /home/lucienne/workspace/.gdrive-cache/202606 Booking Curve.csv\nUpdated existing file on Drive (ID: 1n-yy8WeGvafnpDeJ5WBsHNjF9ZENCtBj)\n\nSuccess: 156731 rows \u2192 202606 Booking Curve.csv\n","started_at":"2026-06-12T06:00:00.591255+02:00","status":"completed","task_id":"booking-curve-pull","task_name":"Pull booking curve data from Neon DB"},{"duration_s":28.553243,"finished_at":"2026-06-11T06:00:29.114253+02:00","id":405287,"log_path":"/home/lucienne/workspace/logs/task-runs/booking-curve-pull/405287.log","output":"=== Booking Curve Pull \u2014 2026-06-11 ===\nPulling data for June 2026\nQuery returned 155607 rows\nSaved to /home/lucienne/workspace/.gdrive-cache/202606 Booking Curve.csv\nUpdated existing file on Drive (ID: 1n-yy8WeGvafnpDeJ5WBsHNjF9ZENCtBj)\n\nSuccess: 155607 rows \u2192 202606 Booking Curve.csv\n","started_at":"2026-06-11T06:00:00.557226+02:00","status":"completed","task_id":"booking-curve-pull","task_name":"Pull booking curve data from Neon DB"},{"duration_s":28.331536,"finished_at":"2026-06-10T06:00:28.939353+02:00","id":401017,"log_path":"/home/lucienne/workspace/logs/task-runs/booking-curve-pull/401017.log","output":"=== Booking Curve Pull \u2014 2026-06-10 ===\nPulling data for June 2026\nQuery returned 154414 rows\nSaved to /home/lucienne/workspace/.gdrive-cache/202606 Booking Curve.csv\nUpdated existing file on Drive (ID: 1n-yy8WeGvafnpDeJ5WBsHNjF9ZENCtBj)\n\nSuccess: 154414 rows \u2192 202606 Booking Curve.csv\n","started_at":"2026-06-10T06:00:00.588560+02:00","status":"completed","task_id":"booking-curve-pull","task_name":"Pull booking curve data from Neon DB"},{"duration_s":19.479131,"finished_at":"2026-06-09T06:00:26.226440+02:00","id":396752,"log_path":"/home/lucienne/workspace/logs/task-runs/booking-curve-pull/396752.log","output":"=== Booking Curve Pull \u2014 2026-06-09 ===\nPulling data for June 2026\nQuery returned 153221 rows\nSaved to /home/lucienne/workspace/.gdrive-cache/202606 Booking Curve.csv\nUpdated existing file on Drive (ID: 1n-yy8WeGvafnpDeJ5WBsHNjF9ZENCtBj)\n\nSuccess: 153221 rows \u2192 202606 Booking Curve.csv\n","started_at":"2026-06-09T06:00:06.744799+02:00","status":"completed","task_id":"booking-curve-pull","task_name":"Pull booking curve data from Neon DB"},{"duration_s":19.46796,"finished_at":"2026-06-08T06:00:20.068052+02:00","id":392642,"log_path":"/home/lucienne/workspace/logs/task-runs/booking-curve-pull/392642.log","output":"=== Booking Curve Pull \u2014 2026-06-08 ===\nPulling data for June 2026\nQuery returned 152028 rows\nSaved to /home/lucienne/workspace/.gdrive-cache/202606 Booking Curve.csv\nUpdated existing file on Drive (ID: 1n-yy8WeGvafnpDeJ5WBsHNjF9ZENCtBj)\n\nSuccess: 152028 rows \u2192 202606 Booking Curve.csv\n","started_at":"2026-06-08T06:00:00.581474+02:00","status":"completed","task_id":"booking-curve-pull","task_name":"Pull booking curve data from Neon DB"}],"runs_limit":20,"schedule":"0 6 * * 1-5","schedule_label":{"description":"Weekdays at 06:00","is_custom":false,"label":"Weekdays","sort":5,"sort_time":"06:00"},"stats":{"avg_duration":25.107743199999998,"completed":5,"failed":0,"timeout":0,"total":5},"task":{"_description":"**OVERRIDES runtime profile:** uses `direct_python` (plain Python, no model) because the command chain never invokes the `claude` CLI or any LLM API \u2014 pure-infra task; scheduler provider env injection is a no-op (MC-4942 U12 sweep).\n\nWeekday booking curve pull. Queries the FlySafair Neon PostgreSQL database\nfor the current month route-level daily snapshot data and uploads as CSV\nto the Booking Curves folder on Google Drive.\n\nRuns weekdays at 8:10am SAST (6:10 UTC) \u2014 after ACSA monthly (7am),\nbefore ACSA website (8am Tue) and IATA fuel (8:30am Tue).\n\n100% Python, zero AI cost. ~5 seconds per run.\n\nSource: Neon DB (summary_route_daily_snapshots)\nTarget: Google Drive Booking Curves folder (ID: 1wcTbDjNWytoMpCqFZHwlNdP4qLvto3DG)\nOutput: YYYYMM Booking Curve.csv","_file":"booking-curve-pull.md","_path":"/home/lucienne/workspace/tasks/booking-curve-pull.md","command":"cd /home/lucienne/workspace && python3 scripts/booking_curve_pull.py","enabled":true,"id":"booking-curve-pull","notify_on":"failure","retry":true,"run_as":"shell","runtime_profile":"direct_python","schedule":"0 6 * * 1-5","tags":["flysafair","booking-curve","neondb","data"],"timeout":120,"title":"Pull booking curve data from Neon DB"}}
