feat(setup): prompt operator pack output routing
This commit is contained in:
@@ -43,6 +43,8 @@ describe('setupAutomation', () => {
|
||||
false, // configure google services
|
||||
],
|
||||
asks: [
|
||||
'telegram', // output channel
|
||||
'987654321', // output peer
|
||||
'0 3 * * *', // backup schedule
|
||||
'0 7 * * 1-5', // daily briefing schedule
|
||||
],
|
||||
@@ -61,11 +63,47 @@ describe('setupAutomation', () => {
|
||||
expect(backup.schedule).toBe('0 3 * * *');
|
||||
expect(heartbeat.enabled).toBe(true);
|
||||
expect(heartbeat.notify_cooldown).toBe('30m');
|
||||
expect((heartbeat.notify as Record<string, unknown>).channel).toBe('telegram');
|
||||
expect((heartbeat.notify as Record<string, unknown>).peer).toBe('987654321');
|
||||
expect(briefing.enabled).toBe(true);
|
||||
expect(briefing.schedule).toBe('0 7 * * 1-5');
|
||||
expect(minioSync.enabled).toBe(true);
|
||||
});
|
||||
|
||||
it('allows overriding operator pack output routing', async () => {
|
||||
const builder = new ConfigBuilder();
|
||||
|
||||
const p = makePrompter({
|
||||
confirms: [
|
||||
true, // enable operator pack
|
||||
false, // include minio sync
|
||||
false, // enable cron scheduler
|
||||
false, // enable webhook receiver
|
||||
false, // configure google services
|
||||
],
|
||||
asks: [
|
||||
'discord', // output channel
|
||||
'ops-room', // output peer
|
||||
'0 4 * * *', // backup schedule
|
||||
'0 9 * * *', // daily briefing schedule
|
||||
],
|
||||
});
|
||||
|
||||
await setupAutomation(p, builder);
|
||||
|
||||
const config = builder.build() as Record<string, unknown>;
|
||||
const backup = config.backup as Record<string, unknown>;
|
||||
const automation = config.automation as Record<string, unknown>;
|
||||
const heartbeat = automation.heartbeat as Record<string, unknown>;
|
||||
const briefing = automation.daily_briefing as Record<string, unknown>;
|
||||
|
||||
expect((backup.notify as Record<string, unknown>).channel).toBe('discord');
|
||||
expect((backup.notify as Record<string, unknown>).peer).toBe('ops-room');
|
||||
expect((heartbeat.notify as Record<string, unknown>).channel).toBe('discord');
|
||||
expect((briefing.output as Record<string, unknown>).peer).toBe('ops-room');
|
||||
expect(automation.minio_sync).toBeUndefined();
|
||||
});
|
||||
|
||||
it('leaves operator pack disabled when not selected', async () => {
|
||||
const builder = new ConfigBuilder();
|
||||
|
||||
|
||||
@@ -66,19 +66,21 @@ export async function setupAutomation(p: Prompter, builder: ConfigBuilder): Prom
|
||||
const telegramPeer = config.telegram?.allowed_chat_ids?.[0];
|
||||
const defaultOutputChannel = telegramPeer ? 'telegram' : 'webchat';
|
||||
const defaultOutputPeer = telegramPeer ? String(telegramPeer) : 'operator';
|
||||
const outputChannel = await p.ask('Operator notifications output channel', defaultOutputChannel);
|
||||
const outputPeer = await p.ask('Operator notifications peer/chat ID', defaultOutputPeer);
|
||||
|
||||
const backupSchedule = await p.ask('Backup cron schedule', '0 2 * * *');
|
||||
const dailyBriefingSchedule = await p.ask('Daily briefing cron schedule', '0 8 * * *');
|
||||
const enableMinioSync = await p.confirm('Include default MinIO sync task?', true);
|
||||
|
||||
builder.applyOperatorPack({
|
||||
outputChannel: defaultOutputChannel,
|
||||
outputPeer: defaultOutputPeer,
|
||||
outputChannel,
|
||||
outputPeer,
|
||||
backupSchedule,
|
||||
dailyBriefingSchedule,
|
||||
enableMinioSync,
|
||||
});
|
||||
p.println(`✓ Operator pack enabled (alerts routed to ${defaultOutputChannel}/${defaultOutputPeer})`);
|
||||
p.println(`✓ Operator pack enabled (alerts routed to ${outputChannel}/${outputPeer})`);
|
||||
}
|
||||
|
||||
const cron = await p.confirm('Enable cron scheduler?', false);
|
||||
|
||||
@@ -80,6 +80,8 @@ describe('first-run wizard integration', () => {
|
||||
'n', // confirm: Add another channel? (no)
|
||||
'y', // confirm: Configure automation now? (yes)
|
||||
'y', // confirm: Enable operator automation pack? (yes)
|
||||
'', // ask: Operator notifications output channel (default)
|
||||
'', // ask: Operator notifications peer/chat ID (default)
|
||||
'', // ask: Backup cron schedule (default)
|
||||
'', // ask: Daily briefing cron schedule (default)
|
||||
'', // confirm: Include default MinIO sync task? (default yes)
|
||||
|
||||
Reference in New Issue
Block a user