Files
igny8/docs/90-ARCHIVED/master-docs-original/10-backend/automation/AUTOMATION-LOGGING.md
IGNY8 VPS (Salman) 6a4f95c35a docs re-org
2025-12-09 13:26:35 +00:00

4.1 KiB
Raw Blame History

Automation Logging

Purpose

Explain how automation runs are logged, where artifacts are written, and how logs are retrieved via API.

Code Locations (exact paths)

  • Logger implementation: backend/igny8_core/business/automation/services/automation_logger.py
  • Service usage: backend/igny8_core/business/automation/services/automation_service.py
  • API exposure: backend/igny8_core/business/automation/views.py (logs action)
  • Run metadata: backend/igny8_core/business/automation/models.py

High-Level Responsibilities

  • Create per-run directories and log files for automation runs (primary and optional shared mirror).
  • Record stage-level start/progress/complete events and structured traces.
  • Provide tail retrieval of logs through an API endpoint.

Detailed Behavior

  • AutomationLogger:
    • On start_run: generates run_id (run_YYYYMMDD_HHMMSS_<trigger>), creates run directory under base_log_dir (default /data/app/logs/automation), and optionally mirrors to shared_log_dir when configured. Initializes automation_run.log with run metadata and writes a JSONL trace entry (run_trace.jsonl).
    • log_stage_start: appends to main log and writes a stage-specific log file stage_<n>.log; mirrors to shared dir if configured; writes a trace event (stage_start with pending count).
    • log_stage_progress: appends progress lines to main and stage logs (and mirrored copies), and writes a stage_progress trace event.
    • log_stage_complete: writes completion info with processed count, time elapsed, credits used to main/stage logs; emits trace (stage_complete).
    • log_stage_error: writes error lines to logs and emits an error trace.
    • append_trace: helper used by the service for per-item events; appends JSONL entries.
    • get_activity_log: reads and returns the tail of automation_run.log (used by API).
  • AutomationService uses the logger at every stage boundary and significant progress point; also logs warnings/errors and mirrors events via the loggers trace helpers.
  • Stage result data is stored in AutomationRun.stage_n_result JSON fields alongside logs, providing structured state in the DB.

Data Structures / Models Involved (no code)

  • AutomationRun: stores per-stage result JSON and run status used to correlate with log files.

Execution Flow

  • Run start → start_run creates directories/files → each stage emits start/progress/complete/error logs and traces → API logs endpoint reads automation_run.log tail for a given run_id.

Cross-Module Interactions

  • Logging uses the automation run/account/site context; no external modules write to these files. AI stages provide progress data; billing is inferred from AI task logs but not logged here.

State Transitions

  • Log files accumulate throughout a run; traces document run lifecycle events. Completion or failure is also reflected in AutomationRun status/results.

Error Handling

  • Logger operations are best-effort; exceptions during file/trace writes are swallowed to avoid breaking the run.
  • API logs returns 404 if the run does not exist; otherwise returns the requested number of lines.

Tenancy Rules

  • Run directories are keyed by account/site/run; API access is constrained by site ownership through the viewset query for AutomationRun.

Billing Rules

  • None directly; credit use is recorded in stage result JSON and inferred from AI task logs, not in the file logs.

Background Tasks / Schedulers

  • Logging occurs inside Celery-executed stages; no separate scheduled logging tasks.

Key Design Considerations

  • File-based logs per run make multi-stage processes auditable and debuggable without DB bloat.
  • Optional shared log dir supports centralized aggregation when multiple containers run workers.
  • JSONL traces allow machine parsing for UI status feeds while text logs support human debugging.

How Developers Should Work With This Module

  • When adding stage steps, emit progress via AutomationLogger to keep observability consistent.
  • Keep log writes best-effort; do not raise from logger helpers.
  • Ensure any new API log endpoints read from the same per-run directory structure and remain site/account scoped.