Configuration
The config file must include tasks
and callbacks
dictionaries.
The former describes a collection of events to monitor and the latter a
collection of actions that can be performed upon an event. Any task can
be associatiated with any number of callbacks and any callback can be
associated with any task.
---
tasks:
task0:
type: watchfiles
changes:
- deleted
- added
callbacks:
- callback0
paths:
- /some/path/to/directory/
task1:
type: watchfiles
changes:
- modified
callbacks:
- callback1
- callback2
paths:
- /some/path/to/file1
callbacks:
callback0:
type: shell
command: sleep 3; echo 'callback0 done'
callback1:
type: shell
command: sleep 6; echo 'callback1 done'
callback2:
type: shell
command: sleep 3; echo 'callback2 done'
Callbacks
Any particular callback may be used in the contex of any number of tasks. All callbacks are executed concurrently.
Callbacks are defined in a callbacks
dictionary:
callbacks:
callback0:
type: shell
...
callback1:
type: mail
...
ShellCallback
This callback implements execution of shell commands and supports
task attributes in command
.
type: shell
command: some shell command
LoggerCallback
This callback implements custom logging to loggers defined in log_* and supports
task attributes in message
.
type: logger
level: [error | info | debug | ... (see Loguru docs)]
message: message
MailCallback
This callback implements sending mail notifications. Task attributes are supported
in message
, subject
, from
, to
and attach
. Remember, that most mail providers
will have a quota on outgoing mail traffic. MailCallback
raises appropriate
exceptions when something goes wrong. Files in attach
require proper extensions
unless they are plain/text
. It is possible to delay a call to MailCallback
by
defining an optional key delay
type: mail
host: [SMTP_HOST]
port: [SMTP_PORT]
login: [SMTP_LOGIN]
password: [SMTP_PASSWORD]
security: [starttls | ssl]
from: "{from}@host.com"
to: "{to}@anotherhost.com"
subject: Some subject with an attribute {custom_subject}
message: Some message with attributes {custom_message}
attach:
- path/to/file0.txt
- path/to/file1.sh
delay: 42
Tasks
Tasks define events to be watched and associate these with callbacks. All tasks are executed concurrently.
Tasks are defined in a tasks
dictionary:
...
tasks:
task0:
type: watchfiles
callbacks:
- some_callback0
- some_callback1
- some_callback2
...
task1:
type: watchfiles
callbacks:
- some_callback0
- some_callback2
...
task2:
type: watchfiles
callbacks:
- some_callback2
...
Tasks can define task attributes in an attrs
dictionary. These
attributes can be used in callbacks to implement calls specialized
to a particular task. Futhermore, this allows for repurposable
callbacks definitions.
...
tasks:
task0:
type: watchfiles
callbacks:
- some_callback
- ...
attrs:
myattr: some value to be used in any of the callbacks
otherattr: some {myattr} value
callbacks:
some_callback:
type: shell
command: some {myattr} command
...
It is also possible to use defined attributes in other attributes (see otherattr
).
In this case watch out for circular dependencies. In the case of a circular
dependency, Yasmon raises the yasmon.callbacks.CallbackCircularAttributeError
.
If the attribute requested by a callback is not defined in the task calling this
callback, Yasmon raises yasmon.callbacks.CallbackAttributeError
.
WatchfilesTask
This task implements watching changes on the file system. The change
can
one of added
, modified
or deleted
. The task checks if all
paths to be watched exist. If a path does not exist or was deleted during
operation, the task stops for timeout
seconds and retries max_retry
times to watch
all paths in paths
. If max_retry = -1
or any other negative integer,
the task will retry indefinitely. Defaults are timeout = 30
and max_retry = 5
.
Both keywords are optional. Sometimes a file is recreated upon modification
(e.g. in Vim), so sporadic warnings are not necessarly a reason for concern.
type: watchfiles
changes:
- [change]
- ...
callbacks:
- some_callback0
- some_callback1
...
paths:
- /some/path/to/file
- /some/path/to/directory/
...
attrs:
myattr: some value
...
max_retry: 42
timeout: 42
Loggers
There are three implemented loggers: log_journal
, log_stderr
and log_file
.
If none of these is defined, Yasmon will log to stderr
with level debug
.
log_file
requires a path
to the log file. Make sure it is writtable.
All loggers accept an optional level
key, which can be one of trace
,
debug
, info
, success
, warning
, error
or critical
.
Default level is debug
.
log_journal:
level: info
log_stderr:
level: trace
log_file:
path: /tmp/yasmon.log