- Add Veeam RPO analysis page (/veeam-analysis) and comparison page (/veeam-comparison) - Add API routes: /api/veeam/rpo-analyze, rpo-comparison, rpo-offline-log, ticket-analysis - Add veeam-rpo-service.ts enhancements (RPO logic, offline detection, comparison) - Add veeam-analysis-state.ts and rmm-device-resolver.ts services - Add migrations 065-068: company_teams, veeam_rpo_offline_log, rpo_comparison_tables, veeam_ticket_analysis - Add backup-status page updates and nav links for new Veeam pages - Add scripts: deactivate-cis-for-inactive-companies, workstation category updates - Add docs: mimecast-api-guide, veeam-backup-alerting-recommendation, workstation-backup-overview, ticket-analyzer-prompt - Minor: webhook-service, entity-sync, entity-mapper, sync-helpers, sync.ts, middleware.ts updates
32 lines
1.2 KiB
TypeScript
32 lines
1.2 KiB
TypeScript
import { NextResponse } from 'next/server';
|
|
import postgresClient from '@/lib/services/postgres-client';
|
|
import { analysisState } from '@/lib/services/veeam-analysis-state';
|
|
|
|
export async function GET() {
|
|
const [analyzedRes, eligibleRes] = await Promise.all([
|
|
postgresClient.query(`
|
|
SELECT COUNT(*) AS total_analyzed, MAX(analyzed_at) AS last_analyzed_at
|
|
FROM veeam_ticket_analysis
|
|
WHERE ticket_created_at >= DATE_TRUNC('year', NOW())
|
|
`),
|
|
postgresClient.query(`
|
|
SELECT COUNT(DISTINCT t.id) AS total_eligible
|
|
FROM tickets t
|
|
INNER JOIN time_entries te ON te.ticket_id = t.id
|
|
WHERE t.title ILIKE 'Veeam:%'
|
|
AND t.title NOT ILIKE '[Veeam RPO]%'
|
|
AND t.create_date >= DATE_TRUNC('year', NOW())
|
|
`),
|
|
]);
|
|
|
|
return NextResponse.json({
|
|
is_running: analysisState.isRunning,
|
|
run_total: analysisState.total,
|
|
run_done: analysisState.done,
|
|
run_errors: analysisState.errors,
|
|
run_started_at: analysisState.startedAt,
|
|
total_analyzed: parseInt(analyzedRes.rows[0]?.total_analyzed ?? 0),
|
|
total_eligible: parseInt(eligibleRes.rows[0]?.total_eligible ?? 0),
|
|
last_analyzed_at: analyzedRes.rows[0]?.last_analyzed_at ?? null,
|
|
});
|
|
}
|