refactor(naming): unify service abbreviations (cmk, semaphore)
Standardise CheckMK variables to the cmk prefix (checkMkUrl -> cmkUrl, checkmk* -> cmk*) and resolve the ansible/semaphore split by renaming all booking fields to semaphore*. Includes DB migrations 0001/0002 for existing databases.
This commit is contained in:
46
server.ts
46
server.ts
@ -271,9 +271,9 @@ async function startServer() {
|
||||
res.json({
|
||||
azureEnabled: enabled && Boolean(clientId) && Boolean(tenantId) && Boolean(secret),
|
||||
effectiveRedirectUri,
|
||||
checkmkEnabled: getSetting('checkmk_enabled') === 'true',
|
||||
cmkEnabled: getSetting('checkmk_enabled') === 'true',
|
||||
semaphoreEnabled: getSetting('semaphore_enabled') === 'true',
|
||||
checkmkBaseUrl: cmkApiUrl.replace(/\/api\/.*$/, ''),
|
||||
cmkBaseUrl: cmkApiUrl.replace(/\/api\/.*$/, ''),
|
||||
isProduction: IS_PRODUCTION,
|
||||
});
|
||||
});
|
||||
@ -655,10 +655,10 @@ async function startServer() {
|
||||
startDateTime: r.startDateTime, endDateTime: r.endDateTime,
|
||||
notes: r.notes || '', status: r.status as any,
|
||||
notified: r.notified === 1, emailSent: r.emailSent === 1,
|
||||
ansibleSetupTriggered: r.ansibleSetupTriggered === 1,
|
||||
ansibleTeardownTriggered: r.ansibleTeardownTriggered === 1,
|
||||
ansibleSetupJobId: r.ansibleSetupJobId || '',
|
||||
ansibleTeardownJobId: r.ansibleTeardownJobId || '',
|
||||
semaphoreSetupTriggered: r.semaphoreSetupTriggered === 1,
|
||||
semaphoreTeardownTriggered: r.semaphoreTeardownTriggered === 1,
|
||||
semaphoreSetupJobId: r.semaphoreSetupJobId || '',
|
||||
semaphoreTeardownJobId: r.semaphoreTeardownJobId || '',
|
||||
}));
|
||||
res.json(bookings);
|
||||
} catch (err: any) {
|
||||
@ -714,14 +714,14 @@ async function startServer() {
|
||||
|
||||
// Trigger teardown if booking had already started and teardown not yet triggered
|
||||
const now = new Date();
|
||||
if (new Date(booking.startDateTime) <= now && !booking.ansibleTeardownTriggered) {
|
||||
if (new Date(booking.startDateTime) <= now && !booking.semaphoreTeardownTriggered) {
|
||||
const templateId = lab?.semaphoreTeardownTemplateId;
|
||||
if (templateId) {
|
||||
const jobId = await triggerSemaphoreTask(Number(templateId), {
|
||||
booking_id: booking.id, lab_name: lab?.name || '', user_id: booking.userId,
|
||||
start_time: booking.startDateTime, end_time: booking.endDateTime,
|
||||
});
|
||||
db.prepare('UPDATE bookings SET ansibleTeardownTriggered = 1, ansibleTeardownJobId = ? WHERE id = ?')
|
||||
db.prepare('UPDATE bookings SET semaphoreTeardownTriggered = 1, semaphoreTeardownJobId = ? WHERE id = ?')
|
||||
.run(jobId !== null ? String(jobId) : '', booking.id);
|
||||
}
|
||||
}
|
||||
@ -732,10 +732,10 @@ async function startServer() {
|
||||
id: r.id, labId: r.labId, userId: r.userId, startDateTime: r.startDateTime,
|
||||
endDateTime: r.endDateTime, notes: r.notes || '', status: r.status,
|
||||
notified: r.notified === 1, emailSent: r.emailSent === 1,
|
||||
ansibleSetupTriggered: r.ansibleSetupTriggered === 1,
|
||||
ansibleTeardownTriggered: r.ansibleTeardownTriggered === 1,
|
||||
ansibleSetupJobId: r.ansibleSetupJobId || '',
|
||||
ansibleTeardownJobId: r.ansibleTeardownJobId || '',
|
||||
semaphoreSetupTriggered: r.semaphoreSetupTriggered === 1,
|
||||
semaphoreTeardownTriggered: r.semaphoreTeardownTriggered === 1,
|
||||
semaphoreSetupJobId: r.semaphoreSetupJobId || '',
|
||||
semaphoreTeardownJobId: r.semaphoreTeardownJobId || '',
|
||||
});
|
||||
} catch (err: any) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@ -942,7 +942,7 @@ async function startServer() {
|
||||
// to 'unknown'. Runs on a self-scheduling setTimeout so that interval changes
|
||||
// in Settings take effect on the next cycle without a server restart.
|
||||
// -------------------------------------------------------------
|
||||
function checkmkHttpHint(status: number): string {
|
||||
function cmkHttpHint(status: number): string {
|
||||
if (status === 401) return 'HTTP 401 Unauthorized - wrong automation user or secret (check Settings > CheckMK)';
|
||||
if (status === 403) return 'HTTP 403 Forbidden - automation user lacks permission in CheckMK';
|
||||
if (status === 404) return 'HTTP 404 Not Found - API URL incorrect or site name wrong';
|
||||
@ -974,7 +974,7 @@ async function startServer() {
|
||||
`${CHECKMK_API_URL}/domain-types/host_config/collections/all`,
|
||||
{ headers }
|
||||
);
|
||||
if (!cfgRes.ok) throw new Error(checkmkHttpHint(cfgRes.status));
|
||||
if (!cfgRes.ok) throw new Error(cmkHttpHint(cfgRes.status));
|
||||
const cfgData = await cfgRes.json();
|
||||
ipToHostname = new Map<string, string>();
|
||||
for (const host of cfgData?.value ?? []) {
|
||||
@ -1013,7 +1013,7 @@ async function startServer() {
|
||||
`${CHECKMK_API_URL}/objects/host/${encodeURIComponent(cmkHost)}?columns=state&columns=hard_state&columns=has_been_checked`,
|
||||
{ headers }
|
||||
);
|
||||
if (!hostRes.ok) throw new Error(checkmkHttpHint(hostRes.status));
|
||||
if (!hostRes.ok) throw new Error(cmkHttpHint(hostRes.status));
|
||||
const hostData = await hostRes.json();
|
||||
|
||||
const state: number = hostData?.extensions?.state ?? -1;
|
||||
@ -1106,20 +1106,20 @@ async function startServer() {
|
||||
const setupPending = db.prepare(
|
||||
`SELECT b.*, l.semaphoreSetupTemplateId, l.name AS labName
|
||||
FROM bookings b LEFT JOIN labs l ON b.labId = l.id
|
||||
WHERE b.startDateTime <= ? AND b.ansibleSetupTriggered = 0 AND b.status != 'cancelled'`
|
||||
WHERE b.startDateTime <= ? AND b.semaphoreSetupTriggered = 0 AND b.status != 'cancelled'`
|
||||
).all(now) as any[];
|
||||
|
||||
for (const row of setupPending) {
|
||||
const templateId = row.semaphoreSetupTemplateId;
|
||||
if (!templateId) {
|
||||
db.prepare('UPDATE bookings SET ansibleSetupTriggered = 1 WHERE id = ?').run(row.id);
|
||||
db.prepare('UPDATE bookings SET semaphoreSetupTriggered = 1 WHERE id = ?').run(row.id);
|
||||
continue;
|
||||
}
|
||||
const jobId = await triggerSemaphoreTask(Number(templateId), {
|
||||
booking_id: row.id, lab_name: row.labName || '', user_id: row.userId,
|
||||
start_time: row.startDateTime, end_time: row.endDateTime,
|
||||
});
|
||||
db.prepare('UPDATE bookings SET ansibleSetupTriggered = 1, ansibleSetupJobId = ? WHERE id = ?')
|
||||
db.prepare('UPDATE bookings SET semaphoreSetupTriggered = 1, semaphoreSetupJobId = ? WHERE id = ?')
|
||||
.run(jobId !== null ? String(jobId) : '', row.id);
|
||||
}
|
||||
|
||||
@ -1127,20 +1127,20 @@ async function startServer() {
|
||||
const teardownPending = db.prepare(
|
||||
`SELECT b.*, l.semaphoreTeardownTemplateId, l.name AS labName
|
||||
FROM bookings b LEFT JOIN labs l ON b.labId = l.id
|
||||
WHERE b.endDateTime <= ? AND b.ansibleTeardownTriggered = 0 AND b.status != 'cancelled'`
|
||||
WHERE b.endDateTime <= ? AND b.semaphoreTeardownTriggered = 0 AND b.status != 'cancelled'`
|
||||
).all(now) as any[];
|
||||
|
||||
for (const row of teardownPending) {
|
||||
const templateId = row.semaphoreTeardownTemplateId;
|
||||
if (!templateId) {
|
||||
db.prepare('UPDATE bookings SET ansibleTeardownTriggered = 1 WHERE id = ?').run(row.id);
|
||||
db.prepare('UPDATE bookings SET semaphoreTeardownTriggered = 1 WHERE id = ?').run(row.id);
|
||||
continue;
|
||||
}
|
||||
const jobId = await triggerSemaphoreTask(Number(templateId), {
|
||||
booking_id: row.id, lab_name: row.labName || '', user_id: row.userId,
|
||||
start_time: row.startDateTime, end_time: row.endDateTime,
|
||||
});
|
||||
db.prepare('UPDATE bookings SET ansibleTeardownTriggered = 1, ansibleTeardownJobId = ? WHERE id = ?')
|
||||
db.prepare('UPDATE bookings SET semaphoreTeardownTriggered = 1, semaphoreTeardownJobId = ? WHERE id = ?')
|
||||
.run(jobId !== null ? String(jobId) : '', row.id);
|
||||
}
|
||||
}
|
||||
@ -1190,10 +1190,10 @@ async function startServer() {
|
||||
});
|
||||
|
||||
if (type === 'setup') {
|
||||
db.prepare('UPDATE bookings SET ansibleSetupTriggered = 1, ansibleSetupJobId = ? WHERE id = ?')
|
||||
db.prepare('UPDATE bookings SET semaphoreSetupTriggered = 1, semaphoreSetupJobId = ? WHERE id = ?')
|
||||
.run(jobId !== null ? String(jobId) : '', bookingId);
|
||||
} else {
|
||||
db.prepare('UPDATE bookings SET ansibleTeardownTriggered = 1, ansibleTeardownJobId = ? WHERE id = ?')
|
||||
db.prepare('UPDATE bookings SET semaphoreTeardownTriggered = 1, semaphoreTeardownJobId = ? WHERE id = ?')
|
||||
.run(jobId !== null ? String(jobId) : '', bookingId);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user