feat(backup): add scheduler alerts and recovery notifications

This commit is contained in:
William Valentin
2026-02-16 13:46:35 -08:00
parent ce621d1b72
commit 8684c3a07d
11 changed files with 349 additions and 72 deletions
+9
View File
@@ -208,6 +208,9 @@ describe('configSchema — backup', () => {
expect(result.backup.schedule).toBeUndefined();
expect(result.backup.interval).toBe('24h');
expect(result.backup.run_on_start).toBe(false);
expect(result.backup.notify).toBeUndefined();
expect(result.backup.failure_threshold).toBe(1);
expect(result.backup.notify_recovery).toBe(true);
expect(result.backup.include_vectors).toBe(true);
expect(result.backup.minio.enabled).toBe(false);
expect(result.backup.minio.prefix).toBe('flynn');
@@ -222,6 +225,9 @@ describe('configSchema — backup', () => {
schedule: '0 2 * * *',
interval: '12h',
run_on_start: true,
notify: { channel: 'telegram', peer: '123' },
failure_threshold: 3,
notify_recovery: false,
local_dir: '/tmp/flynn-backups',
include_vectors: false,
minio: {
@@ -240,6 +246,9 @@ describe('configSchema — backup', () => {
expect(result.backup.schedule).toBe('0 2 * * *');
expect(result.backup.interval).toBe('12h');
expect(result.backup.run_on_start).toBe(true);
expect(result.backup.notify).toEqual({ channel: 'telegram', peer: '123' });
expect(result.backup.failure_threshold).toBe(3);
expect(result.backup.notify_recovery).toBe(false);
expect(result.backup.local_dir).toBe('/tmp/flynn-backups');
expect(result.backup.include_vectors).toBe(false);
expect(result.backup.minio.enabled).toBe(true);
+6
View File
@@ -717,6 +717,12 @@ const backupSchema = z.object({
schedule: z.string().optional(),
interval: z.string().default('24h'),
run_on_start: z.boolean().default(false),
notify: z.object({
channel: z.string().min(1),
peer: z.string().min(1),
}).optional(),
failure_threshold: z.number().min(1).max(10).default(1),
notify_recovery: z.boolean().default(true),
local_dir: z.string().default('~/.local/share/flynn/backups'),
include_vectors: z.boolean().default(true),
minio: z.object({