Docker images / prepare-release (push) Successful in 7s
Docker images / backend-test (push) Successful in 1m40s
Docker images / frontend-image (push) Successful in 2m50s
Docker images / updater-image (push) Successful in 42s
Docker images / backend-image (push) Successful in 2m40s
Docker images / notify-webhook (push) Skipped
Docker images / publish-release (push) Successful in 10s
- Added support for fetching and displaying server data in BGP, VXLAN, and OSPF pages, improving the overall user experience. - Introduced new backend routes for OSPF and VXLAN, allowing for better data management and retrieval. - Implemented mapping functions for backend server data to frontend types, ensuring consistency across components. - Enhanced the sidebar to display counts for BGP sessions, VXLAN tunnels, and containers, providing users with quick insights into their network status. - Updated tests to cover new functionalities and ensure reliability. Co-authored-by: Cursor <[email protected]>
66 lines
2.1 KiB
TypeScript
66 lines
2.1 KiB
TypeScript
import { INIT_USERS } from "@/lib/users"
|
|
import {
|
|
asns,
|
|
domains,
|
|
filters,
|
|
greTunnels,
|
|
ipRanges,
|
|
pingProbes,
|
|
routerCertificates,
|
|
routerContainers,
|
|
servers,
|
|
vxlanTunnels,
|
|
} from "@/lib/data"
|
|
|
|
/** Число мок-сессий BGP (см. `SESSIONS` в `app/(main)/bgp/page.tsx`). */
|
|
export const MOCK_BGP_SESSION_COUNT = 12
|
|
|
|
/** Компактная подпись: тысячи как «1.8к» (кириллица), как в старом меню. */
|
|
export function formatSidebarBadgeCount(n: number): string {
|
|
if (!Number.isFinite(n) || n < 0) return "0"
|
|
if (n < 1000) return String(Math.round(n))
|
|
const k = n / 1000
|
|
const s = k >= 10 ? String(Math.round(k)) : k.toFixed(1).replace(/\.0$/, "")
|
|
return `${s}к`
|
|
}
|
|
|
|
function mockWireGuardIfacesCount(): number {
|
|
let n = 0
|
|
for (const s of servers) n += s.wireGuardIfaces?.length ?? 0
|
|
return n
|
|
}
|
|
|
|
/** Счётчики из `lib/data` для режима mock. */
|
|
export function mockSidebarBadgesByUrl(): Record<string, string> {
|
|
return {
|
|
"/uptime": formatSidebarBadgeCount(pingProbes.length),
|
|
"/domains": formatSidebarBadgeCount(domains.length),
|
|
"/ip-ranges": formatSidebarBadgeCount(ipRanges.length),
|
|
"/asns": formatSidebarBadgeCount(asns.length),
|
|
"/servers": formatSidebarBadgeCount(servers.length),
|
|
"/users": formatSidebarBadgeCount(INIT_USERS.length),
|
|
"/filters": formatSidebarBadgeCount(filters.length),
|
|
"/wireguard": formatSidebarBadgeCount(mockWireGuardIfacesCount()),
|
|
"/gre": formatSidebarBadgeCount(greTunnels.length),
|
|
"/vxlan": formatSidebarBadgeCount(vxlanTunnels.length),
|
|
"/containers": formatSidebarBadgeCount(routerContainers.length),
|
|
"/certificates": formatSidebarBadgeCount(routerCertificates.length),
|
|
"/bgp": formatSidebarBadgeCount(MOCK_BGP_SESSION_COUNT),
|
|
}
|
|
}
|
|
|
|
export interface SidebarCountsDto {
|
|
servers: number
|
|
filterRules: number
|
|
uptimeProbes: number
|
|
uptimeSpeedProbes: number
|
|
monitoringItems: number
|
|
recursiveRoutes: number
|
|
certificates?: number
|
|
wireguard?: number
|
|
users?: number
|
|
bgpSessions?: number
|
|
vxlan?: number
|
|
containers?: number
|
|
}
|