# CronAlarm Configuration based web UI to manage _sections_ of a crontab The main application is a Blazor (server) frontend that presents an alarm selection UI based on `appsettings.json`. The .NET 5 application is meant to run in a container and communicates with the host system through a separate Python 3 Flask API that creates a thin wrapper for actually reading and writing the crontab through `crontab -l` and `crontab -`. The configuration consists of two layers: * The core settings that define the general application parameters * A secondary configuration placed in the `wwwroot/data` directory that contains the actual alert configuration # Building In the root of the project, simply execute ```bash docker-compose build ``` This will build the application and construct a tagged container image for running it. # Running Still in the root of the project, run ```bash docker-compose up ``` This runs the container and mounts the `./data` directory as `/app/wwwroot/data` which means that the `./data/settings.json` file in that directory will be used for the alert configuration. And for running the Flask API on the host - assuming that you have Python3 and Flask installed ```bash ./scripts/cron-api.py ``` # Configuration The base `appsettings.json` configuration defines the base URI of the Flask Python web API running on the host system. The URI must of course be resolvable from within the container that runs the Blazor frontend. ```json { "CronApi": { "BaseUri": "http://192.168.42.44:5000" } } ``` The main alert configuration is split into groups. All alerts use the same command, so that is defined on the top level of `Alerts.Command`. ```json { "Alerts": { "Command": "/home/pi/mpc-alarm-cron.sh", "Groups": [ // ... ] } } ``` In every alert **group** at most one alert can be selected at any given time. The group must have a `Name` and a list of `Options` where each option defines a human readable `Label` and the corresponding cron `Pattern`. When a specific option is selected, the pattern is combined with the command and will be added as a line to the crontab. ```json { "Name": "Weekdays", "Options": [ { "Label": "06:20 - Work", "Pattern": "20 06 * * MON-FRI" }, { "Label": "08:30 - Holidays", "Pattern": "30 08 * * MON-FRI" }, { "Label": "09:00 - Sleeping In", "Pattern": "00 09 * * MON-FRI" } ] } ```