import { getNocoDbConfiguration } from './nocodb'; import { getMinioClient } from './minio'; interface ServiceCheckResult { status: 'up' | 'down' | 'slow'; responseTime?: number; error?: string; } export async function checkNocoDB(): Promise { const startTime = Date.now(); try { const config = getNocoDbConfiguration(); if (!config.url || !config.token) { return { status: 'down', error: 'Missing NocoDB configuration' }; } const response = await fetch(`${config.url}/api/v1/health`, { headers: { 'xc-token': config.token }, signal: AbortSignal.timeout(5000) }); const responseTime = Date.now() - startTime; if (response.ok) { return { status: responseTime > 3000 ? 'slow' : 'up', responseTime }; } return { status: 'down', responseTime, error: `HTTP ${response.status}` }; } catch (error) { return { status: 'down', error: error instanceof Error ? error.message : 'Unknown error' }; } } export async function checkDirectus(): Promise { const startTime = Date.now(); try { const directusUrl = useRuntimeConfig().public.directus?.url; if (!directusUrl) { return { status: 'down', error: 'Missing Directus configuration' }; } const response = await fetch(`${directusUrl}/server/health`, { signal: AbortSignal.timeout(5000) }); const responseTime = Date.now() - startTime; if (response.ok) { return { status: responseTime > 3000 ? 'slow' : 'up', responseTime }; } return { status: 'down', responseTime, error: `HTTP ${response.status}` }; } catch (error) { return { status: 'down', error: error instanceof Error ? error.message : 'Unknown error' }; } } export async function checkMinIO(): Promise { const startTime = Date.now(); try { const minioClient = getMinioClient(); const bucketName = useRuntimeConfig().minio.bucketName; const bucketExists = await minioClient.bucketExists(bucketName); const responseTime = Date.now() - startTime; if (bucketExists) { return { status: responseTime > 3000 ? 'slow' : 'up', responseTime }; } return { status: 'down', responseTime, error: 'Bucket not found' }; } catch (error) { return { status: 'down', error: error instanceof Error ? error.message : 'Unknown error' }; } } export async function checkDocumenso(): Promise { const startTime = Date.now(); try { const documensoUrl = process.env.NUXT_DOCUMENSO_BASE_URL; const documensoKey = process.env.NUXT_DOCUMENSO_API_KEY; if (!documensoUrl || !documensoKey) { return { status: 'down', error: 'Missing Documenso configuration' }; } const response = await fetch(`${documensoUrl}/api/health`, { headers: { 'Authorization': `Bearer ${documensoKey}` }, signal: AbortSignal.timeout(5000) }); const responseTime = Date.now() - startTime; if (response.ok || response.status === 401) { return { status: responseTime > 3000 ? 'slow' : 'up', responseTime }; } return { status: 'down', responseTime, error: `HTTP ${response.status}` }; } catch (error) { return { status: 'down', error: error instanceof Error ? error.message : 'Unknown error' }; } }