Forecast cycles with horizon#

About#

This example demonstrates the horizon option for date-based cycles (as_intervals = False).

Three initialization dates are defined (2020-01-01, 2020-01-02, 2020-01-03), each producing a 5-day forecast. The horizon = 5D setting computes end_date = begin_date + 5 days for every cycle, making end_date and duration available in templates via cycle_end_date and cycle_duration — without making is_interval True.

forecast task:

  • Prints the initialization date (cycle_begin_date) and the forecast end date (cycle_end_date)

  • Illustrates that a single-date cycle can carry a forecast window alongside its anchor date

  • Cycles run independently (indep = True) since forecasts do not depend on each other

Path: examples/academic/horizon.

Configuring#

workflow.cfg#
[app]
name=academic_horizon

[cycles]
begin_date=2020-01-01
end_date=2020-01-03
freq=1D
as_intervals=False
horizon=5D
indep=True

[stages]
    [[cycles]]
    seq0=forecast
tasks.cfg#
[forecast]
    [[content]]
    commandline=echo "Init: {{ cycle_begin_date.strftime('%Y-%m-%d') }}  End: {{ cycle_end_date.strftime('%Y-%m-%d') }}  ({{ cycle_duration.days }}d horizon)"

Running#

Overview#

Let’s have an overview of stages before running the workflow.

$ woom show overview
##################################### APP ######################################
name: academic_horizon
################################## TASK TREE ###################################
cycles:
    - seq0: forecast
#################################### CYCLES ####################################
2020-01-01T00:00:00+00:00 +5 days 00:00:00
2020-01-02T00:00:00+00:00 +5 days 00:00:00
2020-01-03T00:00:00+00:00 +5 days 00:00:00
################################### ENSEMBLE ###################################
no member

Dry run#

Now let’s run the workflow in test (dry) and debug modes.

$ woom run --log-no-color --log-level debug --dry-run
woom.log    : DEBUG    *** STARTED LOG SESSION ***
woom.cli    : DEBUG    Run the workflow
woom.cli    : DEBUG    Loading extensions
woom.cli    : INFO     No extension to load
woom.cli    : DEBUG    Load workflow config: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/workflow.cfg
woom.cli    : INFO     Loaded workflow config
woom.cli    : INFO     App name: academic_horizon
woom.cli    : DEBUG    Initialize the host manager
woom.cli    : INFO     Initialized the host manager
woom.cli    : DEBUG    Load hosts config file: hosts.cfg
woom.cli    : INFO     Loaded hosts config file: hosts.cfg
woom.cli    : DEBUG    Infer host
woom.cli    : INFO     Infered host: local
woom.cli    : DEBUG    Initialize the task manager
woom.cli    : INFO     Initialized the task manager
woom.cli    : DEBUG    Load the task config file: tasks.cfg
woom.cli    : INFO     Loaded the task config file: tasks.cfg
woom.cli    : DEBUG    Initialize the workflow
woom.workflow: DEBUG    Task tree:
cycles:
    - seq0: forecast
woom.cli    : INFO     Initialized the workflow
woom.cli    : INFO     Successfully setup the workflow!
woom.cli    : DEBUG    Run the workflow
woom.workflow: DEBUG    Running the workflow in fake mode
woom.workflow: DEBUG    Entering stage: prolog
woom.workflow: DEBUG    No sequence of task. Skipping...
woom.workflow: DEBUG    Entering stage: cycles
woom.workflow: INFO     Cycling on independant dates from 2020-01-01 00:00:00+00:00 to 2020-01-03 00:00:00+00:00 in 3 time(s)
woom.workflow: DEBUG    Running cycle: 2020-01-01T00:00:00+00:00 +5 days 00:00:00
woom.workflow: DEBUG    Entering sequence: seq0
woom.workflow: DEBUG    Running task: cycles/seq0/forecast
woom.workflow: DEBUG    Task path: academic_horizon/2020-01-01T00:00:00+00:00/forecast
woom.workflow: DEBUG    Cleaning task: cycles/seq0/forecast
woom.workflow: DEBUG    Creating directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00
woom.workflow: INFO     Created directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00
woom.job    : INFO     Started job manager: BackgroundJobManager()
woom.workflow: DEBUG    Submitting task: cycles/seq0/forecast
woom.workflow: DEBUG      Dependencies: 
woom.workflow: DEBUG    Creating directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00/forecast
woom.workflow: INFO     Created directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00/forecast
woom.workflow: INFO     Fake submission: academic_horizon/2020-01-01T00:00:00+00:00/forecast → bash /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00/forecast/job.sh
woom.workflow: DEBUG    Fake submission:
--------------- submission command ---------------
bash /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00/forecast/job.sh
-------------- batch script content --------------
#!/bin/bash

# Prolog
set -eo pipefail
# - handler for graceful termination
on_sigterm() {
    echo "Received termination signal, cleaning up..."
    # Just exit cleanly, let on_exit handle status
    exit 0
}
# - handler for killing termination
on_sigkill() {
    echo "Received kill signal, cleaning up..." >&2
    # Just exit cleanly, let on_exit handle status
    exit 1
}
# - handler for exit (always called)
on_exit() {
    status=$?
    if [ ! -f "/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00/forecast/job.terminating" ]; then
        echo $status > "/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00/forecast/job.status"
    fi
    exit $status
}
trap on_sigterm SIGKILL
trap on_sigkill SIGTERM SIGINT
trap on_exit EXIT


# Environment variables
export WOOM_TASK_NAME="forecast"
export WOOM_RUN_DIR="/home/docs/woom/scratch/woom/academic_horizon/2020-01-01T00:00:00+00:00/forecast"
export WOOM_WORKFLOW="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/workflow.cfg"
export WOOM_HOST="local"
export WOOM_TASKMANAGER="/home/docs/checkouts/readthedocs.org/user_builds/woom/envs/latest/lib/python3.11/site-packages/woom/tasks.cfg:/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/tasks.cfg"
export WOOM_JOBMANAGER="BackgroundJobManager"
export WOOM_TASK_TREE_CYCLES_SEQ0="['forecast']"
export WOOM_CYCLES="2020-01-01T00:00:00+00:00:2020-01-02T00:00:00+00:00:2020-01-03T00:00:00+00:00"
export WOOM_NMEMBERS="0"
export WOOM_MEMBERS=""
export WOOM_PATHS_PATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/bin"
export WOOM_PATHS_PYTHONPATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib/python"
export WOOM_PATHS_LIBRARY_PATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib"
export WOOM_PATHS_INCLUDE_PATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/include"
export WOOM_APP_PATH="academic_horizon"
export WOOM_APP_NAME="academic_horizon"
export WOOM_APP_CONF=""
export WOOM_APP_EXP=""
export WOOM_CYCLES_BEGIN_DATE="2020-01-01T00:00:00+00:00"
export WOOM_CYCLES_END_DATE="2020-01-03T00:00:00+00:00"
export WOOM_CYCLES_FREQ="1D"
export WOOM_CYCLES_AS_INTERVALS="0"
export WOOM_CYCLES_HORIZON="P5DT0H0M0S"
export WOOM_CYCLES_INDEP="1"
export WOOM_CYCLES_ROUND=""
export WOOM_CYCLES_NCYCLES="0"
export WOOM_SCRATCH_DIR="/home/docs/woom/scratch"
export WOOM_WORK_DIR="/home/docs/woom/work"
export WOOM_WORKFLOW_DIR="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon"
export WOOM_LOG_DIR="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/log"
export WOOM_CYCLE="2020-01-01T00:00:00+00:00"
export WOOM_CYCLE_BEGIN_DATE="2020-01-01T00:00:00+00:00"
export WOOM_CYCLE_LABEL="2020-01-01T00:00:00+00:00 +5 days 00:00:00"
export WOOM_CYCLE_TOKEN="2020-01-01T00:00:00+00:00"
export WOOM_CYCLE_DATE="2020-01-01T00:00:00+00:00"
export WOOM_CYCLE_END_DATE="2020-01-06T00:00:00+00:00"
export WOOM_CYCLE_DURATION="P5DT0H0M0S"
export WOOM_CYCLE_IS_FIRST="1"
export WOOM_CYCLE_IS_LAST="0"
export WOOM_CYCLE_NEXT="2020-01-02T00:00:00+00:00"
export WOOM_CYCLE_PREV=""
export WOOM_CYCLE_BEGIN_DATE_NEXT="2020-01-02T00:00:00+00:00"
export WOOM_CYCLE_LABEL_NEXT="2020-01-02T00:00:00+00:00 +5 days 00:00:00"
export WOOM_CYCLE_TOKEN_NEXT="2020-01-02T00:00:00+00:00"
export WOOM_CYCLE_DATE_NEXT="2020-01-02T00:00:00+00:00"
export WOOM_CYCLE_END_DATE_NEXT="2020-01-07T00:00:00+00:00"
export WOOM_CYCLE_DURATION_NEXT="P5DT0H0M0S"
export WOOM_CYCLE_IS_FIRST_NEXT="0"
export WOOM_CYCLE_IS_LAST_NEXT="0"
export WOOM_CYCLE_NEXT_NEXT="2020-01-03T00:00:00+00:00"
export WOOM_CYCLE_PREV_NEXT="2020-01-01T00:00:00+00:00"
export WOOM_MEMBER=""
export WOOM_TASK="forecast"
export WOOM_TASK_PATH="academic_horizon/2020-01-01T00:00:00+00:00/forecast"
export WOOM_TASK_RUN_DIR="/home/docs/woom/scratch/woom/academic_horizon/2020-01-01T00:00:00+00:00/forecast"
export WOOM_TASK_SUBMISSION_DIR="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00/forecast"
export WOOM_TASK_SCRIPT_PATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00/forecast/job.sh"
export WOOM_SUBMISSION_DIR="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00/forecast"
export WOOM_SCRIPT_PATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00/forecast/job.sh"
export WOOM_TASK_ENV=""
export WOOM_ENV=""
export WOOM_TASK_CONTEXT_JSON="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00/forecast/context.json"
export WOOM_CONTEXT_JSON="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00/forecast/context.json"
export PATH=/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/bin:$PATH
export PYTHONPATH=/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib/python:$PYTHONPATH
export LIBRARY_PATH=/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib:$LIBRARY_PATH
export INCLUDE_PATH=/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/include:$INCLUDE_PATH


# Go to run dir
{ mkdir -p /home/docs/woom/scratch/woom/academic_horizon/2020-01-01T00:00:00+00:00/forecast; cd /home/docs/woom/scratch/woom/academic_horizon/2020-01-01T00:00:00+00:00/forecast; } || exit 1

# Run the commandline(s)
echo "Init: 2020-01-01  End: 2020-01-06  (5d horizon)"
--------------------------------------------------
woom.workflow: INFO     Submitted task: cycles/seq0/forecast with job id 99370
woom.workflow: INFO     Successfully submitted cycle: 2020-01-01T00:00:00+00:00 +5 days 00:00:00
woom.workflow: DEBUG    Running cycle: 2020-01-02T00:00:00+00:00 +5 days 00:00:00
woom.workflow: DEBUG    Entering sequence: seq0
woom.workflow: DEBUG    Running task: cycles/seq0/forecast
woom.workflow: DEBUG    Task path: academic_horizon/2020-01-02T00:00:00+00:00/forecast
woom.workflow: DEBUG    Cleaning task: cycles/seq0/forecast
woom.workflow: DEBUG    Creating directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00
woom.workflow: INFO     Created directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00
woom.workflow: DEBUG    Submitting task: cycles/seq0/forecast
woom.workflow: DEBUG      Dependencies: 
woom.workflow: DEBUG    Creating directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00/forecast
woom.workflow: INFO     Created directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00/forecast
woom.workflow: INFO     Fake submission: academic_horizon/2020-01-02T00:00:00+00:00/forecast → bash /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00/forecast/job.sh
woom.workflow: DEBUG    Fake submission:
--------------- submission command ---------------
bash /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00/forecast/job.sh
-------------- batch script content --------------
#!/bin/bash

# Prolog
set -eo pipefail
# - handler for graceful termination
on_sigterm() {
    echo "Received termination signal, cleaning up..."
    # Just exit cleanly, let on_exit handle status
    exit 0
}
# - handler for killing termination
on_sigkill() {
    echo "Received kill signal, cleaning up..." >&2
    # Just exit cleanly, let on_exit handle status
    exit 1
}
# - handler for exit (always called)
on_exit() {
    status=$?
    if [ ! -f "/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00/forecast/job.terminating" ]; then
        echo $status > "/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00/forecast/job.status"
    fi
    exit $status
}
trap on_sigterm SIGKILL
trap on_sigkill SIGTERM SIGINT
trap on_exit EXIT


# Environment variables
export WOOM_TASK_NAME="forecast"
export WOOM_RUN_DIR="/home/docs/woom/scratch/woom/academic_horizon/2020-01-02T00:00:00+00:00/forecast"
export WOOM_WORKFLOW="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/workflow.cfg"
export WOOM_HOST="local"
export WOOM_TASKMANAGER="/home/docs/checkouts/readthedocs.org/user_builds/woom/envs/latest/lib/python3.11/site-packages/woom/tasks.cfg:/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/tasks.cfg"
export WOOM_JOBMANAGER="BackgroundJobManager"
export WOOM_TASK_TREE_CYCLES_SEQ0="['forecast']"
export WOOM_CYCLES="2020-01-01T00:00:00+00:00:2020-01-02T00:00:00+00:00:2020-01-03T00:00:00+00:00"
export WOOM_NMEMBERS="0"
export WOOM_MEMBERS=""
export WOOM_PATHS_PATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/bin"
export WOOM_PATHS_PYTHONPATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib/python"
export WOOM_PATHS_LIBRARY_PATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib"
export WOOM_PATHS_INCLUDE_PATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/include"
export WOOM_APP_PATH="academic_horizon"
export WOOM_APP_NAME="academic_horizon"
export WOOM_APP_CONF=""
export WOOM_APP_EXP=""
export WOOM_CYCLES_BEGIN_DATE="2020-01-01T00:00:00+00:00"
export WOOM_CYCLES_END_DATE="2020-01-03T00:00:00+00:00"
export WOOM_CYCLES_FREQ="1D"
export WOOM_CYCLES_AS_INTERVALS="0"
export WOOM_CYCLES_HORIZON="P5DT0H0M0S"
export WOOM_CYCLES_INDEP="1"
export WOOM_CYCLES_ROUND=""
export WOOM_CYCLES_NCYCLES="0"
export WOOM_SCRATCH_DIR="/home/docs/woom/scratch"
export WOOM_WORK_DIR="/home/docs/woom/work"
export WOOM_WORKFLOW_DIR="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon"
export WOOM_LOG_DIR="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/log"
export WOOM_CYCLE="2020-01-02T00:00:00+00:00"
export WOOM_CYCLE_BEGIN_DATE="2020-01-02T00:00:00+00:00"
export WOOM_CYCLE_LABEL="2020-01-02T00:00:00+00:00 +5 days 00:00:00"
export WOOM_CYCLE_TOKEN="2020-01-02T00:00:00+00:00"
export WOOM_CYCLE_DATE="2020-01-02T00:00:00+00:00"
export WOOM_CYCLE_END_DATE="2020-01-07T00:00:00+00:00"
export WOOM_CYCLE_DURATION="P5DT0H0M0S"
export WOOM_CYCLE_IS_FIRST="0"
export WOOM_CYCLE_IS_LAST="0"
export WOOM_CYCLE_NEXT="2020-01-03T00:00:00+00:00"
export WOOM_CYCLE_PREV="2020-01-01T00:00:00+00:00"
export WOOM_CYCLE_BEGIN_DATE_NEXT="2020-01-03T00:00:00+00:00"
export WOOM_CYCLE_LABEL_NEXT="2020-01-03T00:00:00+00:00 +5 days 00:00:00"
export WOOM_CYCLE_TOKEN_NEXT="2020-01-03T00:00:00+00:00"
export WOOM_CYCLE_DATE_NEXT="2020-01-03T00:00:00+00:00"
export WOOM_CYCLE_END_DATE_NEXT="2020-01-08T00:00:00+00:00"
export WOOM_CYCLE_DURATION_NEXT="P5DT0H0M0S"
export WOOM_CYCLE_IS_FIRST_NEXT="0"
export WOOM_CYCLE_IS_LAST_NEXT="1"
export WOOM_CYCLE_NEXT_NEXT=""
export WOOM_CYCLE_PREV_NEXT="2020-01-02T00:00:00+00:00"
export WOOM_MEMBER=""
export WOOM_TASK="forecast"
export WOOM_TASK_PATH="academic_horizon/2020-01-02T00:00:00+00:00/forecast"
export WOOM_TASK_RUN_DIR="/home/docs/woom/scratch/woom/academic_horizon/2020-01-02T00:00:00+00:00/forecast"
export WOOM_TASK_SUBMISSION_DIR="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00/forecast"
export WOOM_TASK_SCRIPT_PATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00/forecast/job.sh"
export WOOM_SUBMISSION_DIR="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00/forecast"
export WOOM_SCRIPT_PATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00/forecast/job.sh"
export WOOM_TASK_ENV=""
export WOOM_ENV=""
export WOOM_TASK_CONTEXT_JSON="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00/forecast/context.json"
export WOOM_CONTEXT_JSON="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00/forecast/context.json"
export WOOM_CYCLE_BEGIN_DATE_PREV="2020-01-01T00:00:00+00:00"
export WOOM_CYCLE_LABEL_PREV="2020-01-01T00:00:00+00:00 +5 days 00:00:00"
export WOOM_CYCLE_TOKEN_PREV="2020-01-01T00:00:00+00:00"
export WOOM_CYCLE_DATE_PREV="2020-01-01T00:00:00+00:00"
export WOOM_CYCLE_END_DATE_PREV="2020-01-06T00:00:00+00:00"
export WOOM_CYCLE_DURATION_PREV="P5DT0H0M0S"
export WOOM_CYCLE_IS_FIRST_PREV="1"
export WOOM_CYCLE_IS_LAST_PREV="0"
export WOOM_CYCLE_NEXT_PREV="2020-01-02T00:00:00+00:00"
export WOOM_CYCLE_PREV_PREV=""
export PATH=/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/bin:/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/bin:$PATH
export PYTHONPATH=/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib/python:/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib/python:$PYTHONPATH
export LIBRARY_PATH=/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib:/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib:$LIBRARY_PATH
export INCLUDE_PATH=/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/include:/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/include:$INCLUDE_PATH


# Go to run dir
{ mkdir -p /home/docs/woom/scratch/woom/academic_horizon/2020-01-02T00:00:00+00:00/forecast; cd /home/docs/woom/scratch/woom/academic_horizon/2020-01-02T00:00:00+00:00/forecast; } || exit 1

# Run the commandline(s)
echo "Init: 2020-01-02  End: 2020-01-07  (5d horizon)"
--------------------------------------------------
woom.workflow: INFO     Submitted task: cycles/seq0/forecast with job id 785322
woom.workflow: INFO     Successfully submitted cycle: 2020-01-02T00:00:00+00:00 +5 days 00:00:00
woom.workflow: DEBUG    Running cycle: 2020-01-03T00:00:00+00:00 +5 days 00:00:00
woom.workflow: DEBUG    Entering sequence: seq0
woom.workflow: DEBUG    Running task: cycles/seq0/forecast
woom.workflow: DEBUG    Task path: academic_horizon/2020-01-03T00:00:00+00:00/forecast
woom.workflow: DEBUG    Cleaning task: cycles/seq0/forecast
woom.workflow: DEBUG    Creating directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00
woom.workflow: INFO     Created directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00
woom.workflow: DEBUG    Submitting task: cycles/seq0/forecast
woom.workflow: DEBUG      Dependencies: 
woom.workflow: DEBUG    Creating directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00/forecast
woom.workflow: INFO     Created directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00/forecast
woom.workflow: INFO     Fake submission: academic_horizon/2020-01-03T00:00:00+00:00/forecast → bash /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00/forecast/job.sh
woom.workflow: DEBUG    Fake submission:
--------------- submission command ---------------
bash /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00/forecast/job.sh
-------------- batch script content --------------
#!/bin/bash

# Prolog
set -eo pipefail
# - handler for graceful termination
on_sigterm() {
    echo "Received termination signal, cleaning up..."
    # Just exit cleanly, let on_exit handle status
    exit 0
}
# - handler for killing termination
on_sigkill() {
    echo "Received kill signal, cleaning up..." >&2
    # Just exit cleanly, let on_exit handle status
    exit 1
}
# - handler for exit (always called)
on_exit() {
    status=$?
    if [ ! -f "/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00/forecast/job.terminating" ]; then
        echo $status > "/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00/forecast/job.status"
    fi
    exit $status
}
trap on_sigterm SIGKILL
trap on_sigkill SIGTERM SIGINT
trap on_exit EXIT


# Environment variables
export WOOM_TASK_NAME="forecast"
export WOOM_RUN_DIR="/home/docs/woom/scratch/woom/academic_horizon/2020-01-03T00:00:00+00:00/forecast"
export WOOM_WORKFLOW="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/workflow.cfg"
export WOOM_HOST="local"
export WOOM_TASKMANAGER="/home/docs/checkouts/readthedocs.org/user_builds/woom/envs/latest/lib/python3.11/site-packages/woom/tasks.cfg:/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/tasks.cfg"
export WOOM_JOBMANAGER="BackgroundJobManager"
export WOOM_TASK_TREE_CYCLES_SEQ0="['forecast']"
export WOOM_CYCLES="2020-01-01T00:00:00+00:00:2020-01-02T00:00:00+00:00:2020-01-03T00:00:00+00:00"
export WOOM_NMEMBERS="0"
export WOOM_MEMBERS=""
export WOOM_PATHS_PATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/bin"
export WOOM_PATHS_PYTHONPATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib/python"
export WOOM_PATHS_LIBRARY_PATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib"
export WOOM_PATHS_INCLUDE_PATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/include"
export WOOM_APP_PATH="academic_horizon"
export WOOM_APP_NAME="academic_horizon"
export WOOM_APP_CONF=""
export WOOM_APP_EXP=""
export WOOM_CYCLES_BEGIN_DATE="2020-01-01T00:00:00+00:00"
export WOOM_CYCLES_END_DATE="2020-01-03T00:00:00+00:00"
export WOOM_CYCLES_FREQ="1D"
export WOOM_CYCLES_AS_INTERVALS="0"
export WOOM_CYCLES_HORIZON="P5DT0H0M0S"
export WOOM_CYCLES_INDEP="1"
export WOOM_CYCLES_ROUND=""
export WOOM_CYCLES_NCYCLES="0"
export WOOM_SCRATCH_DIR="/home/docs/woom/scratch"
export WOOM_WORK_DIR="/home/docs/woom/work"
export WOOM_WORKFLOW_DIR="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon"
export WOOM_LOG_DIR="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/log"
export WOOM_CYCLE="2020-01-03T00:00:00+00:00"
export WOOM_CYCLE_BEGIN_DATE="2020-01-03T00:00:00+00:00"
export WOOM_CYCLE_LABEL="2020-01-03T00:00:00+00:00 +5 days 00:00:00"
export WOOM_CYCLE_TOKEN="2020-01-03T00:00:00+00:00"
export WOOM_CYCLE_DATE="2020-01-03T00:00:00+00:00"
export WOOM_CYCLE_END_DATE="2020-01-08T00:00:00+00:00"
export WOOM_CYCLE_DURATION="P5DT0H0M0S"
export WOOM_CYCLE_IS_FIRST="0"
export WOOM_CYCLE_IS_LAST="1"
export WOOM_CYCLE_NEXT=""
export WOOM_CYCLE_PREV="2020-01-02T00:00:00+00:00"
export WOOM_CYCLE_BEGIN_DATE_NEXT="2020-01-03T00:00:00+00:00"
export WOOM_CYCLE_LABEL_NEXT="2020-01-03T00:00:00+00:00 +5 days 00:00:00"
export WOOM_CYCLE_TOKEN_NEXT="2020-01-03T00:00:00+00:00"
export WOOM_CYCLE_DATE_NEXT="2020-01-03T00:00:00+00:00"
export WOOM_CYCLE_END_DATE_NEXT="2020-01-08T00:00:00+00:00"
export WOOM_CYCLE_DURATION_NEXT="P5DT0H0M0S"
export WOOM_CYCLE_IS_FIRST_NEXT="0"
export WOOM_CYCLE_IS_LAST_NEXT="1"
export WOOM_CYCLE_NEXT_NEXT=""
export WOOM_CYCLE_PREV_NEXT="2020-01-02T00:00:00+00:00"
export WOOM_MEMBER=""
export WOOM_TASK="forecast"
export WOOM_TASK_PATH="academic_horizon/2020-01-03T00:00:00+00:00/forecast"
export WOOM_TASK_RUN_DIR="/home/docs/woom/scratch/woom/academic_horizon/2020-01-03T00:00:00+00:00/forecast"
export WOOM_TASK_SUBMISSION_DIR="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00/forecast"
export WOOM_TASK_SCRIPT_PATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00/forecast/job.sh"
export WOOM_SUBMISSION_DIR="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00/forecast"
export WOOM_SCRIPT_PATH="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00/forecast/job.sh"
export WOOM_TASK_ENV=""
export WOOM_ENV=""
export WOOM_TASK_CONTEXT_JSON="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00/forecast/context.json"
export WOOM_CONTEXT_JSON="/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00/forecast/context.json"
export WOOM_CYCLE_BEGIN_DATE_PREV="2020-01-02T00:00:00+00:00"
export WOOM_CYCLE_LABEL_PREV="2020-01-02T00:00:00+00:00 +5 days 00:00:00"
export WOOM_CYCLE_TOKEN_PREV="2020-01-02T00:00:00+00:00"
export WOOM_CYCLE_DATE_PREV="2020-01-02T00:00:00+00:00"
export WOOM_CYCLE_END_DATE_PREV="2020-01-07T00:00:00+00:00"
export WOOM_CYCLE_DURATION_PREV="P5DT0H0M0S"
export WOOM_CYCLE_IS_FIRST_PREV="0"
export WOOM_CYCLE_IS_LAST_PREV="0"
export WOOM_CYCLE_NEXT_PREV="2020-01-03T00:00:00+00:00"
export WOOM_CYCLE_PREV_PREV="2020-01-01T00:00:00+00:00"
export PATH=/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/bin:/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/bin:/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/bin:$PATH
export PYTHONPATH=/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib/python:/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib/python:/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib/python:$PYTHONPATH
export LIBRARY_PATH=/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib:/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib:/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/lib:$LIBRARY_PATH
export INCLUDE_PATH=/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/include:/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/include:/home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/include:$INCLUDE_PATH


# Go to run dir
{ mkdir -p /home/docs/woom/scratch/woom/academic_horizon/2020-01-03T00:00:00+00:00/forecast; cd /home/docs/woom/scratch/woom/academic_horizon/2020-01-03T00:00:00+00:00/forecast; } || exit 1

# Run the commandline(s)
echo "Init: 2020-01-03  End: 2020-01-08  (5d horizon)"
--------------------------------------------------
woom.workflow: INFO     Submitted task: cycles/seq0/forecast with job id 234474
woom.workflow: INFO     Successfully submitted cycle: 2020-01-03T00:00:00+00:00 +5 days 00:00:00
woom.workflow: DEBUG    Entering stage: epilog
woom.workflow: DEBUG    No sequence of task. Skipping...
woom.workflow: DEBUG    Terminating non-blocking jobs
woom.cli    : INFO     Successfully ran the workflow!

Normal run#

And finally in run it.

$ woom run --log-no-color
woom.cli    : INFO     No extension to load
woom.cli    : INFO     Loaded workflow config
woom.cli    : INFO     App name: academic_horizon
woom.cli    : INFO     Initialized the host manager
woom.cli    : INFO     Loaded hosts config file: hosts.cfg
woom.cli    : INFO     Infered host: local
woom.cli    : INFO     Initialized the task manager
woom.cli    : INFO     Loaded the task config file: tasks.cfg
woom.cli    : INFO     Initialized the workflow
woom.cli    : INFO     Successfully setup the workflow!
woom.workflow: INFO     Cycling on independant dates from 2020-01-01 00:00:00+00:00 to 2020-01-03 00:00:00+00:00 in 3 time(s)
woom.workflow: INFO     Created directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00
woom.job    : INFO     Started job manager: BackgroundJobManager()
woom.workflow: INFO     Created directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00/forecast
woom.workflow: INFO     Created batch script: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-01T00:00:00+00:00/forecast/job.sh
woom.workflow: INFO     Submitted task: cycles/seq0/forecast with job id 915
woom.workflow: INFO     Successfully submitted cycle: 2020-01-01T00:00:00+00:00 +5 days 00:00:00
woom.workflow: INFO     Created directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00
woom.workflow: INFO     Created directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00/forecast
woom.workflow: INFO     Created batch script: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-02T00:00:00+00:00/forecast/job.sh
woom.workflow: INFO     Submitted task: cycles/seq0/forecast with job id 917
woom.workflow: INFO     Successfully submitted cycle: 2020-01-02T00:00:00+00:00 +5 days 00:00:00
woom.workflow: INFO     Created directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00
woom.workflow: INFO     Created directory: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00/forecast
woom.workflow: INFO     Created batch script: /home/docs/checkouts/readthedocs.org/user_builds/woom/checkouts/latest/examples/academic/horizon/jobs/academic_horizon/2020-01-03T00:00:00+00:00/forecast/job.sh
woom.workflow: INFO     Submitted task: cycles/seq0/forecast with job id 919
woom.workflow: INFO     Successfully submitted cycle: 2020-01-03T00:00:00+00:00 +5 days 00:00:00
woom.cli    : INFO     Successfully ran the workflow!

Check status#

Check what is running or finished.

$ woom show status
╭──────────┬─────────┬──────────┬───────────────────────────┬──────────────────────────────────────────────────────────╮
│ STATUS   │   JOBID │ TASK     │ CYCLE                     │ SUBMISSION DIR                                           │
├──────────┼─────────┼──────────┼───────────────────────────┼──────────────────────────────────────────────────────────┤
│ SUCCESS  │     915 │ forecast │ 2020-01-01T00:00:00+00:00 │ jobs/academic_horizon/2020-01-01T00:00:00+00:00/forecast │
│ SUCCESS  │     917 │ forecast │ 2020-01-02T00:00:00+00:00 │ jobs/academic_horizon/2020-01-02T00:00:00+00:00/forecast │
│ SUCCESS  │     919 │ forecast │ 2020-01-03T00:00:00+00:00 │ jobs/academic_horizon/2020-01-03T00:00:00+00:00/forecast │
╰──────────┴─────────┴──────────┴───────────────────────────┴──────────────────────────────────────────────────────────╯

Show run directories#

Show where tasks were executed.

$ woom show run_dirs
╭──────────┬───────────────────────────┬──────────────────────────────────────────────────────────────────────────────────╮
│ TASK     │ CYCLE                     │ RUN DIR                                                                          │
├──────────┼───────────────────────────┼──────────────────────────────────────────────────────────────────────────────────┤
│ forecast │ 2020-01-01T00:00:00+00:00 │ /home/docs/woom/scratch/woom/academic_horizon/2020-01-01T00:00:00+00:00/forecast │
│ forecast │ 2020-01-02T00:00:00+00:00 │ /home/docs/woom/scratch/woom/academic_horizon/2020-01-02T00:00:00+00:00/forecast │
│ forecast │ 2020-01-03T00:00:00+00:00 │ /home/docs/woom/scratch/woom/academic_horizon/2020-01-03T00:00:00+00:00/forecast │
╰──────────┴───────────────────────────┴──────────────────────────────────────────────────────────────────────────────────╯