Skip to main content
Glama
+server.js5.13 kB
import { json } from '@sveltejs/kit'; import sqlite3 from 'sqlite3'; import { open } from 'sqlite'; const DB_PATH = './data/workflow.db'; async function getDatabase() { return await open({ filename: DB_PATH, driver: sqlite3.Database }); } /** @type {import('./$types').RequestHandler} */ export async function GET({ url }) { try { const db = await getDatabase(); // Get query parameters for filtering const status = url.searchParams.get('status'); const maintenance_type = url.searchParams.get('maintenance_type'); const environment_id = url.searchParams.get('environment_id'); const upcoming_only = url.searchParams.get('upcoming_only'); const sort_by = url.searchParams.get('sort_by') || 'scheduled_desc'; let query = 'SELECT * FROM maintenance_schedules WHERE 1=1'; const params = []; if (status) { query += ' AND status = ?'; params.push(status); } if (maintenance_type) { query += ' AND maintenance_type = ?'; params.push(maintenance_type); } if (environment_id) { query += ' AND environment_id = ?'; params.push(environment_id); } if (upcoming_only === 'true') { query += ' AND scheduled_start >= datetime("now")'; } // Add sorting switch (sort_by) { case 'scheduled_asc': query += ' ORDER BY scheduled_start ASC'; break; case 'created_desc': query += ' ORDER BY created_at DESC'; break; case 'created_asc': query += ' ORDER BY created_at ASC'; break; case 'status': query += ' ORDER BY status, scheduled_start ASC'; break; case 'duration_desc': query += ' ORDER BY estimated_duration DESC'; break; default: // scheduled_desc query += ' ORDER BY scheduled_start DESC NULLS LAST'; } const maintenanceSchedules = await db.all(query, params); // Get summary statistics const summary = await db.get(` SELECT COUNT(*) as total_schedules, COUNT(CASE WHEN status = 'scheduled' THEN 1 END) as scheduled, COUNT(CASE WHEN status = 'in_progress' THEN 1 END) as in_progress, COUNT(CASE WHEN status = 'completed' THEN 1 END) as completed, COUNT(CASE WHEN status = 'cancelled' THEN 1 END) as cancelled, COUNT(CASE WHEN scheduled_start >= datetime("now") THEN 1 END) as upcoming, COUNT(CASE WHEN scheduled_start < datetime("now") AND status = 'scheduled' THEN 1 END) as overdue FROM maintenance_schedules `); // Get upcoming maintenance (next 7 days) const upcomingMaintenance = await db.all(` SELECT * FROM maintenance_schedules WHERE scheduled_start BETWEEN datetime("now") AND datetime("now", "+7 days") AND status IN ('scheduled', 'in_progress') ORDER BY scheduled_start ASC LIMIT 10 `); await db.close(); return json({ maintenance_schedules: maintenanceSchedules, summary: summary, upcoming: upcomingMaintenance }); } catch (error) { console.error('Error fetching maintenance schedules:', error); return json({ maintenance_schedules: [], summary: { total_schedules: 0, scheduled: 0, in_progress: 0, completed: 0, cancelled: 0, upcoming: 0, overdue: 0 }, upcoming: [] }, { status: 500 }); } } /** @type {import('./$types').RequestHandler} */ export async function POST({ request }) { try { const maintenanceData = await request.json(); const db = await getDatabase(); const maintenanceId = crypto.randomUUID(); await db.run(` INSERT INTO maintenance_schedules ( id, title, description, maintenance_type, status, environment_id, scheduled_start, scheduled_end, estimated_duration, actual_start, actual_end, impact_level, notification_sent, tags, notes, created_at, updated_at ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) `, [ maintenanceId, maintenanceData.title, maintenanceData.description || null, maintenanceData.maintenance_type || 'planned', maintenanceData.status || 'scheduled', maintenanceData.environment_id || null, maintenanceData.scheduled_start, maintenanceData.scheduled_end || null, maintenanceData.estimated_duration || null, maintenanceData.actual_start || null, maintenanceData.actual_end || null, maintenanceData.impact_level || 'medium', maintenanceData.notification_sent !== undefined ? (maintenanceData.notification_sent ? 1 : 0) : 0, JSON.stringify(maintenanceData.tags || []), maintenanceData.notes || null ]); const maintenance = await db.get('SELECT * FROM maintenance_schedules WHERE id = ?', [maintenanceId]); await db.close(); return json(maintenance, { status: 201 }); } catch (error) { console.error('Error creating maintenance schedule:', error); return json({ error: 'Failed to create maintenance schedule' }, { status: 500 }); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/foswmine/workflow-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server