mirror of
https://github.com/hansjone/netx.git
synced 2026-10-16 18:20:45 +08:00
Add LLDP collect page with conservative fabric edge lifecycle.
Move scheduled discovery under Network → LLDP links, mark absent edges missing after one successful scan, purge only after four miss cycles, and expose unmatched/raw job detail. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
9674de221d
commit
d05ba0f1f7
30 changed files with 4713 additions and 1870 deletions
65
netx_api/lldp_collect_schemas.py
Normal file
65
netx_api/lldp_collect_schemas.py
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
"""Schemas for network-management LLDP link collect (policy + dashboard)."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Any
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class LldpCollectTargetRef(BaseModel):
|
||||
source: str = "managed" # managed | ume
|
||||
id: str
|
||||
|
||||
|
||||
class LldpCollectPolicyOut(BaseModel):
|
||||
enabled: bool = False
|
||||
interval_days: int = 1
|
||||
concurrency: int = 4
|
||||
scope_mode: str = "all"
|
||||
selected_targets: list[LldpCollectTargetRef] = Field(default_factory=list)
|
||||
auto_add_unmatched: bool = True
|
||||
updated_at: datetime | None = None
|
||||
|
||||
|
||||
class LldpCollectPolicyUpdate(BaseModel):
|
||||
enabled: bool | None = None
|
||||
interval_days: int | None = Field(default=None, ge=1, le=365)
|
||||
concurrency: int | None = Field(default=None, ge=1, le=32)
|
||||
scope_mode: str | None = None
|
||||
selected_targets: list[LldpCollectTargetRef] | None = None
|
||||
auto_add_unmatched: bool | None = None
|
||||
|
||||
|
||||
class LldpCollectJobSummary(BaseModel):
|
||||
id: str
|
||||
scope: str = ""
|
||||
trigger_mode: str = "manual"
|
||||
status: str = ""
|
||||
total: int = 0
|
||||
done: int = 0
|
||||
edges_added: int = 0
|
||||
edges_updated: int = 0
|
||||
edges_stale: int = 0
|
||||
error: str = ""
|
||||
started_at: datetime | None = None
|
||||
ended_at: datetime | None = None
|
||||
created_at: datetime | None = None
|
||||
|
||||
|
||||
class LldpCollectDashboardOut(BaseModel):
|
||||
policy: LldpCollectPolicyOut
|
||||
fabric_node_count: int = 0
|
||||
fabric_edge_count: int = 0
|
||||
fabric_edge_active: int = 0
|
||||
fabric_edge_stale: int = 0
|
||||
last_discover_at: datetime | None = None
|
||||
running_job: LldpCollectJobSummary | None = None
|
||||
last_job: LldpCollectJobSummary | None = None
|
||||
next_due_at: datetime | None = None
|
||||
|
||||
|
||||
class LldpCollectStartOut(BaseModel):
|
||||
ok: bool = True
|
||||
job: dict[str, Any] = Field(default_factory=dict)
|
||||
Loading…
Add table
Add a link
Reference in a new issue