diff --git a/appinfo.yml b/appinfo.yml index dbb2d29..d16b1be 100644 --- a/appinfo.yml +++ b/appinfo.yml @@ -1,40 +1,22 @@ -version: 3 -mainunit: backup-manager -plugins: - - type: builtin - name: backups_none - - type: builtin - name: monitoring - config: - checks: - - name: main - message: Backup manager activated - interval: 3600 - okvalue: active - command: systemctl is-active --user backup-manager.timer - - name: lastrun - message: Errors last run - interval: 3600 - okvalue: "" - command: cat {{ homedir }}/.backupmanager.errors - - name: lastrunrecent - message: Backup manager did not run recently - interval: 3600 - okvalue: "OK" - command: '[ -f {{ homedir }}/.backupmanager.errors ] && [ $(find {{ homedir }}/.backupmanager.errors -mtime -2) ] && echo "OK" || echo "outdated"' -enableunits: - - backup-manager.timer +mainunit: backup-manager.timer +mainunitfile: backup-manager.timer.j2 templatefiles: - - src: backup-manager.timer.j2 - dest: ~/.config/systemd/user/backup-manager.timer - src: backup-manager.service.j2 dest: ~/.config/systemd/user/backup-manager.service - src: backupmanager.j2 dest: ~/backupmanager mode: "0755" + - src: monitor@.service.j2 + dest: ~/.config/systemd/user/monitor@.service + - src: monitor.socket.j2 + dest: ~/.config/systemd/user/monitor.socket + - src: monitor.sh.j2 + dest: ~/monitor.sh + mode: "0755" - src: monitor-test.sh.j2 dest: ~/monitor-test.sh mode: "0755" +backuptype: none configdefinition: "$id": "backup manager config" "$schema": "http://json-schema.org/draft-07/schema#" @@ -93,10 +75,6 @@ configdefinition: type: boolean default: false description: An idle repository will never give warnings that there are no recent backups - needscopy: - type: boolean - default: true - description: Will backup manager complain if there is no copy of the backup timeout: type: integer # note that the default is also in the python code - in case the host isn't filled in @@ -104,3 +82,22 @@ configdefinition: description: Repositories where the latest backup is older then timeout days will give a warning that there are no recent backups required: - repos +exports: + monitoring: + checks: + - name: main + message: Backup manager activated + interval: 3600 + type: string + okvalue: active + - name: lastrun + message: Errors last run + interval: 3600 + type: string + okvalue: "" + - name: lastrunrecent + message: Backup manager did not run recently + interval: 3600 + type: string + okvalue: "OK" + diff --git a/backup-manager.timer.j2 b/backup-manager.timer.j2 index 8de83d0..cd9b9e5 100644 --- a/backup-manager.timer.j2 +++ b/backup-manager.timer.j2 @@ -1,6 +1,5 @@ [Unit] Description=Sync backups -PartOf={{ mainunit }} [Timer] OnCalendar=*-*-* 10:00:00 @@ -8,5 +7,5 @@ RandomizedDelaySec=3h Persistent=true [Install] -WantedBy={{ mainunit }} +WantedBy=timers.target diff --git a/backupmanager.j2 b/backupmanager.j2 index d3ff954..063e48b 100644 --- a/backupmanager.j2 +++ b/backupmanager.j2 @@ -243,8 +243,7 @@ for host in allhosts: timeout = hosts[host]["timeout"] if not idle: if not have_a_copy: - if hosts[host]["needscopy"]: - output_warning(f"We do not have a copy for {host}") + output_warning(f"We do not have a copy for {host}") if most_recent_backup_ts < time.time()-(timeout*24*3600): output_warning(f"Last backup for {host} is too old") diff --git a/monitor.sh.j2 b/monitor.sh.j2 new file mode 100644 index 0000000..0e8e932 --- /dev/null +++ b/monitor.sh.j2 @@ -0,0 +1,18 @@ +#!/bin/bash +read -r command +case $command in + main) + systemctl is-active --user backup-manager.timer + ;; + lastrun) + cat {{ homedir }}/.backupmanager.errors + ;; + lastrunrecent) + [ -f {{ homedir }}/.backupmanager.errors ] && [ $(find {{ homedir }}/.backupmanager.errors -mtime -2) ] && echo "OK" || echo "outdated" + ;; + *) + echo "Parameter unknown" + ;; +esac + + diff --git a/monitor.socket.j2 b/monitor.socket.j2 new file mode 100644 index 0000000..17163d1 --- /dev/null +++ b/monitor.socket.j2 @@ -0,0 +1,9 @@ +[Unit] +Description=Execute Command Socket + +[Socket] +ListenStream={{ statedir }}/{{ name }}.monitoring +Accept=yes + +[Install] +WantedBy=sockets.target diff --git a/monitor@.service.j2 b/monitor@.service.j2 new file mode 100644 index 0000000..55ee896 --- /dev/null +++ b/monitor@.service.j2 @@ -0,0 +1,15 @@ +[Unit] +Description=Execute Command Service +After=network.target +Requires=monitor.socket + +[Service] +Type=simple +ExecStart={{ homedir }}/monitor.sh +StandardInput=socket +StandardOutput=socket +TimeoutStopSec=5 +RuntimeMaxSec=10 + +[Install] +WantedBy=sockets.target \ No newline at end of file