ordo/modules/ordo/task.scm

43 lines
1.4 KiB
Scheme
Raw Normal View History

(define-module (ordo task)
2025-01-05 17:43:09 +00:00
#:use-module (ice-9 match)
2025-01-10 17:22:44 +00:00
#:use-module (logging logger)
2025-01-05 17:43:09 +00:00
#:use-module (srfi srfi-1) ; list utils
#:use-module (srfi srfi-9) ; records
#:use-module (srfi srfi-26) ; cut
#:use-module (ordo context)
2025-01-05 18:24:33 +00:00
#:export (task
task?
task-description
2025-01-10 16:53:35 +00:00
task-condition
task-action
task-register
task-triggers
2025-01-05 18:24:33 +00:00
run-task))
(define-record-type <task>
2025-01-10 16:53:35 +00:00
(make-task description condition action register triggers)
task?
(description task-description)
2025-01-10 16:53:35 +00:00
(condition task-condition)
(action task-action)
(register task-register)
(triggers task-triggers))
2025-01-10 16:53:35 +00:00
(define* (task description action #:key (condition (const #t)) (register #f) (triggers '()))
(make-task description condition action register triggers))
(define (run-task ctx t)
(match t
2025-01-10 16:53:35 +00:00
(($ <task> description condition action register triggers)
(if (not (condition ctx))
2025-01-10 17:22:44 +00:00
(log-msg 'NOTICE "Skipping task: " description " (precondition not met)")
2025-01-10 16:53:35 +00:00
(begin
2025-01-10 17:22:44 +00:00
(log-msg 'NOTICE "Running task: " description)
2025-01-10 16:53:35 +00:00
(let ((result (action ctx)))
(when register
2025-01-10 17:22:44 +00:00
(log-msg 'INFO "Registering result " register)
2025-01-10 16:53:35 +00:00
(register-context-var! ctx register result))
2025-01-10 17:22:44 +00:00
(when (and triggers (not (null? triggers)))
(log-msg 'INFO "Scheduling triggers " triggers)
2025-01-10 16:53:35 +00:00
(add-context-triggers! ctx triggers))))))))