control_mh1_primprod.py

← Back to workflow

Controller for daily and backfill MODIS-Aqua MH1 primary productivity runs.

#!/usr/bin/env python3
import logging
import os
import sys

from src.npp_utils import (
    load_config,
    target_date_from_env,
    process_daily_for_date,
    process_composite_for_date,
)

logging.basicConfig(
    level=os.environ.get("LOG_LEVEL", "INFO"),
    format="%(asctime)s %(levelname)s %(message)s",
)
log = logging.getLogger(__name__)

VALID_MODES = {"daily", "composite_3", "composite_8"}


def main() -> int:
    """Run the selected MH1 primary productivity processing mode."""
    cfg = load_config(os.environ.get("CONFIG_PATH", "/app/config/config.yml"))
    mode = os.environ.get("MODE", "daily").strip().lower()
    if mode not in VALID_MODES:
        raise ValueError(f"Unsupported MODE={mode!r}; use one of {sorted(VALID_MODES)}")

    target_dt = target_date_from_env(cfg.days_lag)
    log.info("MH1 PrimProd controller started | MODE=%s | target=%s", mode, target_dt.date())
    log.info("Bucket: %s", cfg.bucket)

    if mode == "daily":
        result = process_daily_for_date(cfg, target_dt)
    elif mode == "composite_3":
        result = process_composite_for_date(cfg, target_dt, 3)
    else:
        result = process_composite_for_date(cfg, target_dt, 8)

    if result:
        log.info("Produced: gs://%s/%s", cfg.bucket, result)
    else:
        log.info("Nothing produced; output already existed and OVERWRITE=false.")

    log.info("MH1 PrimProd controller completed successfully.")
    return 0


if __name__ == "__main__":
    try:
        sys.exit(main())
    except Exception as exc:
        log.exception("MH1 PrimProd failed: %s", exc)
        sys.exit(1)