51 lines
1.9 KiB
TypeScript
51 lines
1.9 KiB
TypeScript
import { NextResponse } from 'next/server';
|
|
import postgresClient from '@/lib/services/postgres-client';
|
|
|
|
export async function GET() {
|
|
try {
|
|
const [agents, summary] = await Promise.all([
|
|
postgresClient.query(`
|
|
SELECT a.instance_uid, a.name, a.agent_platform, a.status, a.management_agent_status,
|
|
a.operation_mode, a.platform, a.version, a.version_status, a.management_mode,
|
|
a.total_jobs_count, a.running_jobs_count, a.success_jobs_count,
|
|
a.activation_time, a.synced_at,
|
|
o.name as organization_name
|
|
FROM veeam_backup_agents a
|
|
LEFT JOIN veeam_organizations o ON o.instance_uid = a.organization_uid
|
|
ORDER BY a.name ASC
|
|
`),
|
|
postgresClient.query(`
|
|
SELECT
|
|
COUNT(*) as total,
|
|
COUNT(*) FILTER (WHERE status = 'Active') as active,
|
|
COUNT(*) FILTER (WHERE status != 'Active') as inactive,
|
|
COUNT(*) FILTER (WHERE management_agent_status = 'Inaccessible') as inaccessible,
|
|
COUNT(*) FILTER (WHERE version_status = 'Outdated') as outdated,
|
|
COUNT(*) FILTER (WHERE agent_platform = 'Windows') as windows,
|
|
COUNT(*) FILTER (WHERE agent_platform = 'Linux') as linux,
|
|
COUNT(*) FILTER (WHERE agent_platform = 'Mac') as mac,
|
|
MAX(synced_at) as last_sync
|
|
FROM veeam_backup_agents
|
|
`),
|
|
]);
|
|
|
|
const s = summary.rows[0];
|
|
return NextResponse.json({
|
|
agents: agents.rows,
|
|
summary: {
|
|
total: parseInt(s.total),
|
|
active: parseInt(s.active),
|
|
inactive: parseInt(s.inactive),
|
|
inaccessible: parseInt(s.inaccessible),
|
|
outdated: parseInt(s.outdated),
|
|
windows: parseInt(s.windows),
|
|
linux: parseInt(s.linux),
|
|
mac: parseInt(s.mac),
|
|
lastSync: s.last_sync,
|
|
},
|
|
});
|
|
} catch (error) {
|
|
console.error('[VEEAM-AGENTS-API]', error);
|
|
return NextResponse.json({ error: 'Failed to fetch agents' }, { status: 500 });
|
|
}
|
|
}
|