ArchiveProgramno longer vacuums the database file. Useapsis.program.internal.vacuum.VacuumProgramto schedule this separately.- Configs
python.gc.enabledandpython.gc.thresholdconfigure the Python garbage collector.
- Config
database.timeoutsets the sqlite lock timeout. - The run archive program takes
chunk_sizeandchunk_sleepparameters, to divide the archive operation into chunks with pauses in between.
apsisctl check-jobs --check-dependencies-scheduledattempts to check that dependencies of scheduled runs are themselves scheduled.
- Apsis checks at startup that the job dir exists and all YAML files within it are valid jobs. It fails to start if there are any job errors.
- Apsis, when checking jobs, instantiates runs from jobs according to schedules, to test that expansions function correctly.
- In a Procstar program with
sudo_userset, Apsis runs the command undersudofor the specified username.
This release requires changes to the schema of Apsis database files. To migrate an existing database,
- Stop Apsis.
- Create a backup of the database.
python scripts/migrate-db.py path/to/apsis.db- Start the new version.
- Apsis checks all jobs in the job directory before starting, and does not start if it encounters any errors.
- The Control page in the web UI and the live log are removed.
- The run view contains a pane showing direct dependencies and dependents of the run.
- Changes to jobs update live in the web UI.
- Changes to Procstar agent connections update live in the web UI.
- The run log updates live in the web UI.
- Output data updates live in the web UI.
apsis output --followandapsis output --tailfor live output in CLUI.apsis watchfor live run changes in CLUI.- Apsis sets the
APSIS_RUN_IDenv var in procstar programs.
- Requires Procstar v0.3.
- The Procstar agent protocol has changed substantially. Now uses msgpack.
- The
procstar.agent.connection.start_timeoutconfig controls how long Apsis waits for a suitable agent connection to start a run. - The
procstar.agent.connection.reconnect_timeoutconfig controls how long Apsis waits for an agent to reconnect, before dropping it. - An agent now unregisters itself cleanly from Apsis during normal shutdown.
- SIGUSR1 triggers a shutdown-on-idle state in an agent; see
shutdownin the Procstar docs. - The "Agents" view in the web UI shows the state of each conencted agent.
- Procstar agent-based programs.
- The child-class API of
apsis.program.base.Programhas changed. Implementrun()andconnect()in subclasses, rather than deprecatedstart()andreconnect(). Default implementations of the new methods provide compatibility with the old methods, but these will be removed in the future.
- New
existsoption to a dependency condition, to detect if the dependency doesn't exist at all. #316 - Keyword search in the web UI is case-insensitive. #312
- Collapse state of jobs in the job view is persistent. #314
- Actions are now passed a run snapshot, rather than the
Runobject which may subsequently change. - Add
apsis.action.ThreadAction, a base class for an action that runs synchronously in a separate thread. - Add
apsis.cond.ThreadPolledCondition, a base class for a condition whose check runs synchronously in a separate thread. - Add
/api/v1/liveand/api/v1/statsendpoints, to monitor basic liveness and stats, respectively. - Add estimate of async event loop latency to stats.
- Add support for async conditions. Custom conditions need to be updated accordingly; see #278.
- Polling of agent programs is now async. This allows more concurrently running programs without degraded performance.
- Update build config to
pyproject.toml.
- The config
runs_lookbackis nowruns.lookback. When configured, Apsis retires older runs from memory runs while running. - The internal program
ArchiveProgrammoves old runs out of the Apsis database into a separate archive database file. This also retires the old runs from memory. This program replaces the oldapsisctl migratemanual process. - The internal program
StatsProgramcollects and writes Apsis usage stats. Apsis no longer logs stats to its own log. - The Python builtin
formatand the Ora functionsfrom_localandto_localare available in jinja2 expressions when binding jobs. - The
shellandprogramprogram types now accept atimeout. - Durations in the Apsis config file and in job definitions now support values
with units such as
10 min,8h, and1 day.
- The web UI has been substantially improved. The new design permits navigation of a much larger number of runs, without displaying them all at one time.
- Filters for runs and views are more flexible and explicit. Click help icons for explanations.
- The URL scheme for runs and views filters has changed substantially. Any bookmarked or otherwise saved URLs to these views won't work anymore.
apsisctl check-jobschecks conditions (including dependencies) and actions for missing and extraneous args. #245
- Add a "Schedule Run" frame to the web UI job view, for manual scheduling.
- Apsis now compresses program outputs with Brotli before storing to the database. The HTTP service also returns Brotli-compressed output, if the user agent supports this encoding.
- Add the skipped state and skip operation. Remove the cancel operation; superceded by skip.
- Add
runparam to the signature forCondition.check_runs(). Custom condition classes need to be updated. - Add support for inducing a transition from
Condition.check_runs()by returning aCondition.Transitionvalue. - Add the
skip_dependencycondition type. - Group scheduler config under
schedulekey. Addschedule.horizionconfig. Renameschedule_max_agetoschedule.max_age.
- Remove UIkit from the web UI, for performance. Minor visual and behavioral changes.
- Various other performance fixes to web UI and supporting HTTP API.
- Fix #181, incorrect job fuzzy match in web UI.
- Add "no-op" program type.
- Add
waiting.max_timeconfig to impose maximum waiting time on all runs. - Log basic stats as a JSON document in a minutely INFO log line.