import { useState } from "react"; import { useQuery } from "@tanstack/react-query"; import { MainLayout } from "@/components/layouts/main-layout"; import { DnsUpdateChart } from "@/components/charts/dns-update-chart"; import { ProviderDistributionChart } from "@/components/charts/provider-distribution-chart"; import { RecordTypeChart } from "@/components/charts/record-type-chart"; import { Domain, DnsMetric } from "@shared/schema"; import { useOrganization } from "@/context/organization-context"; import { Card, CardContent, CardHeader, CardTitle, CardDescription, } from "@/components/ui/card"; import { Tabs, TabsContent, TabsList, TabsTrigger, } from "@/components/ui/tabs"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { BarChart, LineChart, PieChart, Home, BarChart2, Activity, Clock } from "lucide-react"; export default function MetricsPage() { const { currentOrganization } = useOrganization(); const [selectedTimeframe, setSelectedTimeframe] = useState("day"); const [selectedDomain, setSelectedDomain] = useState("all"); // Fetch domains for filter const { data: domains = [] } = useQuery({ queryKey: ["/api/domains", currentOrganization?.id], enabled: !!currentOrganization?.id, }); // Calculate date range for metrics queries const getDateRange = () => { const endDate = new Date(); let startDate = new Date(); if (selectedTimeframe === "day") { startDate.setDate(startDate.getDate() - 1); } else if (selectedTimeframe === "week") { startDate.setDate(startDate.getDate() - 7); } else if (selectedTimeframe === "month") { startDate.setMonth(startDate.getMonth() - 1); } return { startDate: startDate.toISOString(), endDate: endDate.toISOString() }; }; const { startDate, endDate } = getDateRange(); // Fetch DNS metrics for the performance cards const { data: performanceMetrics = [] } = useQuery({ queryKey: ["/api/dns-metrics", "performance", startDate, endDate], queryFn: async () => { const url = new URL("/api/dns-metrics", window.location.origin); url.searchParams.append("type", "performance"); url.searchParams.append("startDate", startDate); url.searchParams.append("endDate", endDate); const response = await fetch(url.toString()); if (!response.ok) { throw new Error("Failed to fetch performance metrics"); } return response.json(); }, staleTime: 5 * 60 * 1000, // 5 minutes }); return ( {/* Filter controls */}
{/* Update Activity Chart */}
DNS Update Activity Frequency of DNS record updates over time
setSelectedTimeframe("day")} > Day setSelectedTimeframe("week")} > Week setSelectedTimeframe("month")} > Month
{/* Distribution Charts */}
DNS Provider Distribution Breakdown of domains by DNS provider
Record Type Distribution Breakdown of DNS records by type
{/* Performance Metrics */} DNS Performance Metrics Key metrics for your DNS configuration

Avg. Response Time

38 ms

5% faster than last week

Uptime

99.98%

Last 30 days

Update Frequency

4.2/day

Avg. updates per day

Propagation Time

43 sec

Avg. global propagation

{/* DNS Records Health */} DNS Records Health Health status of your DNS records

example.com

A, CNAME, MX records

Healthy

api.example.org

A, CNAME records

Outdated

cdn.testsite.com

A, AAAA records

Error

prod-db.example.net

A record

Healthy
); }