feat: implement AS holder name resolution and enhance ASEntry structure. Add ASHolderName function to retrieve organization names from RIPEstat, update ASEntry model to include ASN name, prefix count, and resolution timestamp. Modify database interactions and API responses to support new fields, improving ASN metadata handling.
CI / changes (push) Successful in 5s
CI / openapi (push) Has been skipped
CI / go (push) Successful in 24s
CI / docker-web (deploy/docker/evobgp-web/Dockerfile, , evobgp-web) (push) Successful in 1m9s
CI / docker-web (deploy/docker/evobgp-web/Dockerfile, evobgp-all, evobgp-web-all) (push) Successful in 1m3s
CI / docker-bird (push) Has been skipped
CI / bird2 (push) Successful in 16s
CI / docker-go (deploy/docker/evobgp-agent/Dockerfile, , evobgp-agent) (push) Successful in 1m0s
CI / docker-go (evobgp-all, 1, deploy/docker/gobinary/Dockerfile, , evobgp-all) (push) Successful in 1m37s
CI / docker-go (evobgp-api, 1, deploy/docker/gobinary/Dockerfile, , evobgp-api) (push) Successful in 1m25s
CI / docker-go (evobgp-deploy, 0, deploy/docker/gobinary/Dockerfile, , evobgp-deploy) (push) Successful in 1m29s
CI / docker-go (evobgp-ingest, 0, deploy/docker/gobinary/Dockerfile, , evobgp-ingest) (push) Successful in 1m25s
CI / docker-go (evobgp-node, 0, deploy/docker/gobinary/Dockerfile, , evobgp-node) (push) Successful in 1m21s
CI / docker-go (evobgp-render, 0, deploy/docker/gobinary/Dockerfile, , evobgp-render) (push) Successful in 1m24s
CI / docker-go (evobgp-scheduler, 0, deploy/docker/gobinary/Dockerfile, , evobgp-scheduler) (push) Successful in 1m31s

This commit is contained in:
Denozordec
2026-04-06 01:49:31 +07:00
parent 80965adc0c
commit c958d5af0d
13 changed files with 233 additions and 16 deletions
+6
View File
@@ -38,6 +38,12 @@ export type AsEntry = {
id: string;
asn: number;
community_id: string | null;
/** Имя/держатель AS (RIPEstat), после успешного обновления модуля */
asn_name?: string | null;
/** Число объявленных префиксов на момент последнего резолва */
prefix_count?: number | null;
/** ISO-время последнего успешного резолва ASN */
asn_resolved_at?: string | null;
};
export type AsEntryCreate = {
asn: number;
+21 -2
View File
@@ -474,7 +474,9 @@
<CardHeader class="flex flex-row items-center justify-between pb-2">
<div>
<CardTitle class="text-base">AS-записи</CardTitle>
<CardDescription>Номер AS и привязка к BGP community</CardDescription>
<CardDescription>
Номер AS и community; имя, число префиксов и дата обновляются при успешном обновлении модуля (RIPEstat)
</CardDescription>
</div>
<Button size="sm" onclick={openAsCreate}><Plus />Добавить</Button>
</CardHeader>
@@ -483,6 +485,9 @@
<TableHeader>
<TableRow>
<TableHead>ASN</TableHead>
<TableHead>Название AS</TableHead>
<TableHead class="text-right">Префиксов</TableHead>
<TableHead>Обновлено</TableHead>
<TableHead>Community</TableHead>
<TableHead class="w-20"></TableHead>
</TableRow>
@@ -491,6 +496,20 @@
{#each asEntries as entry (entry.id)}
<TableRow>
<TableCell class="font-mono">{entry.asn}</TableCell>
<TableCell
class="text-muted-foreground text-sm max-w-[14rem] truncate"
title={entry.asn_name ?? ''}
>
{entry.asn_name?.trim() ? entry.asn_name : '—'}
</TableCell>
<TableCell class="text-right font-mono text-sm">
{entry.prefix_count != null && entry.prefix_count !== undefined ? entry.prefix_count : '—'}
</TableCell>
<TableCell class="text-muted-foreground text-sm whitespace-nowrap">
{entry.asn_resolved_at
? new Date(entry.asn_resolved_at).toLocaleString('ru-RU')
: '—'}
</TableCell>
<TableCell class="text-muted-foreground text-sm">{communityName(entry.community_id)}</TableCell>
<TableCell>
<div class="flex gap-1">
@@ -501,7 +520,7 @@
</TableRow>
{:else}
<TableRow>
<TableCell colspan={3} class="text-muted-foreground text-center py-6">Нет записей</TableCell>
<TableCell colspan={6} class="text-muted-foreground text-center py-6">Нет записей</TableCell>
</TableRow>
{/each}
</TableBody>