add more notes

This commit is contained in:
niamtokik
2024-09-22 17:04:47 +00:00
parent c92412af6b
commit f754351ad4
2 changed files with 72 additions and 0 deletions

View File

@@ -142,9 +142,26 @@ and closes all its file descriptor.
| fifo | `${HOME}/.config/chore/cache/${session}/jobs/${job_name}-${date}.stdin` | job stdin fifo (disabled by default) | fifo | `${HOME}/.config/chore/cache/${session}/jobs/${job_name}-${date}.stdin` | job stdin fifo (disabled by default)
| file | `${HOME}/.config/chore/cache/${session}/jobs/${job_name}-${date}.stdout` | job stdout log file | file | `${HOME}/.config/chore/cache/${session}/jobs/${job_name}-${date}.stdout` | job stdout log file
| file | `${HOME}/.config/chore/cache/${session}/jobs/${job_name}-${date}.stderr` | job stderr log file | file | `${HOME}/.config/chore/cache/${session}/jobs/${job_name}-${date}.stderr` | job stderr log file
| file | `${HOME}/.config/chore/cache/${session}/jobs/${job_name}-${date}.stats` | stats file (dynamically overwritten)
## Memory view ## Memory view
## Features
### Debug mode
When in debug mode, `chored` and `chored` workers print verbose
information during the different tasks they have to apply.
### React mode
### Pin mode
A job can be pinned, that's mean its current state (even if stopped)
will never be removed. This job can be restarted on demand, its state
and stats will be updated accordingly. When unpinned, the job state
will be cleaned if someone check its jobs.
## Operating Systems Specificities ## Operating Systems Specificities
### OpenBSD ### OpenBSD
@@ -175,6 +192,58 @@ Mainly OpenBSD [`cron(8)`](https://man.openbsd.org/cron) daemon and by
extension [`at(1)`](https://man.openbsd.org/at.1) but also extension [`at(1)`](https://man.openbsd.org/at.1) but also
[Hashicorp Nomad](https://www.nomadproject.io/). [Hashicorp Nomad](https://www.nomadproject.io/).
### Why libevent?
To deal with many file descriptors, one can use
[`select(2)`](https://man.openbsd.org/select) or
[`poll(2)`](https://man.openbsd.org/poll), but the way to deal with
that can be quite complex, and `libevent` was designed for this kind
of issue
### Why process first?
Threads are complex to manage, can lead to many problems no one wants
to deal with. Processes are not easy to manage at first, but they are
isolated between them. Furthermore, the current application does not
need incredible performance, the goal is to follow and processes
locally.
### Why stack first?
Well, for the first part of the project, the main goal is to create a
job scheduler (that's what it is, spawning a command, waiting for its
result and so on). No thread, only new processes with
[`fork(2)`](https://man.openbsd.org/fork) and
[`execve(2)`](https://man.openbsd.org/execve). A big part of the
required information can be put on the stack, it looks even more
possible if hard limits are set during compile time.
Don't forget, this project MUST BE minimalist.
## Ideas
- configuration file
- chored state file (configuration?)
- pre-command
- post-command
- react on started job(s)
- react on stopped job(s)
- react on killed job(s)
- logs rotation
- alert(s)
- capabilities
- (linux) namespace
- (linux) cgroup
- (freebsd) jails
- communication between workers
- using [zeromq](https://zeromq.org/)?
- using binary format or a serializer between chored and its workers
- cbor? see [tinycbor](https://github.com/intel/tinycbor)
- etf? see [erlang term format](https://www.erlang.org/doc/apps/erts/erl_ext_dist)
### Configuration file
## References and Resources ## References and Resources
[libevent](https://libevent.org/) [libevent](https://libevent.org/)

View File

@@ -61,6 +61,7 @@ chore -- ${command}
| - | wip | `-d` | | switch to debug mode | - | wip | `-d` | | switch to debug mode
| - | wip | `-j` | `str[j]` | set job name also called job id | - | wip | `-j` | `str[j]` | set job name also called job id
| - | wip | `-n` | `str[n]` | set `chored` session name | - | wip | `-n` | `str[n]` | set `chored` session name
| - | wip | `-s` | | secure mode, set only required information (e.g. environment)
| - | wip | `-e` | `str[e]` | reset environment variables and set variables | - | wip | `-e` | `str[e]` | reset environment variables and set variables
| - | wip | `-l` | | list current jobs | - | wip | `-l` | | list current jobs
| - | wip | `-s` | | list job state (require `-j`) | - | wip | `-s` | | list job state (require `-j`)
@@ -74,6 +75,8 @@ chore -- ${command}
| - | wip | `-r` | `str[r]` | set a pattern to react. read line by line or truncate long buffer to 255 chars. | - | wip | `-r` | `str[r]` | set a pattern to react. read line by line or truncate long buffer to 255 chars.
| - | wip | `-R` | `str[R]` | set an action when a pattern is found (require `-r`) | - | wip | `-R` | `str[R]` | set an action when a pattern is found (require `-r`)
| - | wip | `-x` | | restart automatically the job in case of failure | - | wip | `-x` | | restart automatically the job in case of failure
| - | wip | `-p` | | Pin job, it will not be removed from the job list when done, it could then be restarted
| - | wip | `-P` | | Unpin job
| - | wip | `--` | `str[-]` | all characters after `--` until carriage retun are considered part of the command | - | wip | `--` | `str[-]` | all characters after `--` until carriage retun are considered part of the command
- `str[j]`: `^[0-9a-zA-Z_]{1,63}$` - `str[j]`: `^[0-9a-zA-Z_]{1,63}$`