mirror of
https://github.com/hansjone/netx.git
synced 2026-10-09 00:50:46 +08:00
Size DB pool, CLI budget, and WebCRT session caps for concurrent operators while keeping hard ceilings and env overrides. Co-authored-by: Cursor <cursoragent@cursor.com>
71 lines
2.1 KiB
Python
71 lines
2.1 KiB
Python
"""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 # legacy view of interval_hours (ceil days)
|
|
interval_hours: int = 24
|
|
concurrency: int = 4
|
|
scope_mode: str = "all"
|
|
selected_targets: list[LldpCollectTargetRef] = Field(default_factory=list)
|
|
auto_add_unmatched: bool = True
|
|
history_keep: int = 30
|
|
updated_at: datetime | None = None
|
|
|
|
|
|
class LldpCollectPolicyUpdate(BaseModel):
|
|
enabled: bool | None = None
|
|
interval_days: int | None = Field(default=None, ge=1, le=365)
|
|
interval_hours: int | None = Field(default=None, ge=1, le=8760)
|
|
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
|
|
history_keep: int | None = Field(default=None, ge=0, le=200)
|
|
|
|
|
|
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 # legacy alias of edges_missing
|
|
edges_missing: 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 # legacy alias of fabric_edge_missing
|
|
fabric_edge_missing: 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)
|