mirror of
https://github.com/hansjone/netx.git
synced 2026-10-08 22:20:58 +08:00
Topology MCP adds pull/compact/bundle/suggest-hubs with a no-template skill path; API gains fabric level and NE collection policy; web list pages get paging and denser collect/network workflows. Co-authored-by: Cursor <cursoragent@cursor.com>
95 lines
2.4 KiB
Python
95 lines
2.4 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class CollectionTargetRef(BaseModel):
|
|
source: str = "managed" # managed | ume
|
|
id: str
|
|
|
|
|
|
class CollectionPolicyOut(BaseModel):
|
|
enabled: bool = False
|
|
interval_days: int = 1
|
|
interval_hours: int = 24
|
|
scope_mode: str = "all"
|
|
selected_targets: list[CollectionTargetRef] = Field(default_factory=list)
|
|
title: str = ""
|
|
commands: str = ""
|
|
history_keep: int = 3
|
|
updated_at: datetime | None = None
|
|
|
|
|
|
class CollectionPolicyUpdate(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)
|
|
scope_mode: str | None = None
|
|
selected_targets: list[CollectionTargetRef] | None = None
|
|
title: str | None = None
|
|
commands: str | None = None
|
|
history_keep: int | None = Field(default=None, ge=0, le=200)
|
|
|
|
|
|
class CollectionJobCreate(BaseModel):
|
|
title: str = ""
|
|
commands: str = Field(min_length=1)
|
|
ne_ids: list[str] = Field(default_factory=list)
|
|
ume_ne_ids: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class CollectionRunOut(BaseModel):
|
|
id: str
|
|
job_id: str
|
|
ne_id: str
|
|
ne_source: str = "managed"
|
|
ne_name: str
|
|
ne_ip: str
|
|
status: str
|
|
message: str
|
|
output_rel_path: str
|
|
has_output: bool
|
|
started_at: datetime | None
|
|
ended_at: datetime | None
|
|
|
|
|
|
class CollectionJobOut(BaseModel):
|
|
id: str
|
|
title: str
|
|
commands: str
|
|
trigger_mode: str = "manual"
|
|
status: str
|
|
ne_count: int
|
|
success_count: int
|
|
fail_count: int
|
|
output_count: int = 0
|
|
error_message: str
|
|
created_at: datetime
|
|
started_at: datetime | None
|
|
ended_at: datetime | None
|
|
last_run_at: datetime | None = None
|
|
|
|
|
|
class CollectionJobSummary(BaseModel):
|
|
id: str
|
|
title: str
|
|
status: str
|
|
trigger_mode: str = "manual"
|
|
ne_count: int
|
|
success_count: int
|
|
fail_count: int
|
|
created_at: datetime | None = None
|
|
started_at: datetime | None = None
|
|
ended_at: datetime | None = None
|
|
last_run_at: datetime | None = None
|
|
|
|
|
|
class CollectionDashboardOut(BaseModel):
|
|
job_count: int = 0
|
|
active_count: int = 0
|
|
running_job: CollectionJobSummary | None = None
|
|
last_job: CollectionJobSummary | None = None
|
|
next_due_at: datetime | None = None
|
|
policy: CollectionPolicyOut | None = None
|