163 lines
3.6 KiB
TypeScript
163 lines
3.6 KiB
TypeScript
import { getNocoDbConfiguration } from './nocodb';
|
|
import { getMinioClient } from './minio';
|
|
|
|
interface ServiceCheckResult {
|
|
status: 'up' | 'down' | 'slow';
|
|
responseTime?: number;
|
|
error?: string;
|
|
}
|
|
|
|
export async function checkNocoDB(): Promise<ServiceCheckResult> {
|
|
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<ServiceCheckResult> {
|
|
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<ServiceCheckResult> {
|
|
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<ServiceCheckResult> {
|
|
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'
|
|
};
|
|
}
|
|
}
|