diff options
Diffstat (limited to 'api/app/models')
-rw-r--r-- | api/app/models/__init__.py | 0 | ||||
-rw-r--r-- | api/app/models/config.py | 14 | ||||
-rw-r--r-- | api/app/models/device.py | 47 | ||||
-rw-r--r-- | api/app/models/network.py | 19 | ||||
-rw-r--r-- | api/app/models/oplog.py | 21 | ||||
-rw-r--r-- | api/app/models/ping.py | 14 | ||||
-rw-r--r-- | api/app/models/snmp.py | 12 |
7 files changed, 127 insertions, 0 deletions
diff --git a/api/app/models/__init__.py b/api/app/models/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/app/models/__init__.py diff --git a/api/app/models/config.py b/api/app/models/config.py new file mode 100644 index 0000000..e54599c --- /dev/null +++ b/api/app/models/config.py @@ -0,0 +1,14 @@ +from pydantic import BaseModel + + +class ConfigData(BaseModel): + sitename: str | None = None + publicvhost: str | None = "public-gondul.tg.no" + public: bool = False + shortname: str | None = "tg25" + + +class Config(BaseModel): + config: ConfigData + time: int | None = None + hash: str | None = None diff --git a/api/app/models/device.py b/api/app/models/device.py new file mode 100644 index 0000000..95ed525 --- /dev/null +++ b/api/app/models/device.py @@ -0,0 +1,47 @@ +from pydantic import BaseModel +import ipaddress + + +class Placement(BaseModel): + x: int + y: int + height: int + width: int + + +class PublicDevice(BaseModel): + distro_name: str | None = None + tags: list[str] = [] + placement: Placement | None = None + + +class PublicDevices(BaseModel): + switches: dict[str, PublicDevice] + time: int | None = None + hash: str | None = None + + +class DeviceInterface(BaseModel): + name: str + descr: str + type: str + + +class DeviceManagement(BaseModel): + sysname: str = "e1-1" + serial: str | None = None + platform: str | None = None + mgmt_v4_addr: ipaddress.IPv4Address | None = None + mgmt_v6_addr: ipaddress.IPv6Address | None = None + mgmt_vlan: str | None = None + traffic_vlan: str | None = None + last_updated: str | None = None + distro_name: str | None = None + distro_phy_port: str | None = None + # interfaces: dict[str, DeviceInterface] + + +class DevicesManagement(BaseModel): + switches: dict[str, DeviceManagement] + time: int | None = None + hash: str | None = None diff --git a/api/app/models/network.py b/api/app/models/network.py new file mode 100644 index 0000000..ec567a5 --- /dev/null +++ b/api/app/models/network.py @@ -0,0 +1,19 @@ +from pydantic import BaseModel +import ipaddress + + +# name, vlan, networks.tags, switches.sysname as router, subnet4, subnet6, gw4, gw6 +class Network(BaseModel): + name: str = "switches-mgmt" + vlan: int | None = 1337 + tags: list[str] = [] + subnet4: ipaddress.IPv4Network | None = "198.51.100.0/24" + subnet6: ipaddress.IPv6Network | None = "2001:db8:5b96::/64" + gw4: ipaddress.IPv4Address | None = "198.51.100.1" + gw6: ipaddress.IPv6Address | None = "2001:db8:5b96::1" + + +class Networks(BaseModel): + networks: dict[str, Network] + time: int | None = None + hash: str | None = None diff --git a/api/app/models/oplog.py b/api/app/models/oplog.py new file mode 100644 index 0000000..f5c1d49 --- /dev/null +++ b/api/app/models/oplog.py @@ -0,0 +1,21 @@ +from pydantic import BaseModel +from sqlmodel import Field, SQLModel + +class OplogBase(SQLModel, table=True): + __tablename__ = "oplog" + + id: int = Field(default=None, primary_key=True) + time: int + username: str | None = None + systems: str | None = None + message: str + +class Oplog(BaseModel): + oplog: list[OplogBase] + time: int | None = None + hash: str | None = None + +class OplogCreate(BaseModel): + username: str | None = None + systems: str | None = None + message: str diff --git a/api/app/models/ping.py b/api/app/models/ping.py new file mode 100644 index 0000000..a2e8caf --- /dev/null +++ b/api/app/models/ping.py @@ -0,0 +1,14 @@ +from pydantic import BaseModel, Field + + +class PingData(BaseModel): + latency4: float | None = Field(description="In milliseconds") + latency6: float | None = Field(description="In milliseconds") + age4: float | None = Field(description="In seconds") + age6: float | None = Field(description="In seconds") + + +class Ping(BaseModel): + switches: dict[str, PingData] + time: int | None = None + hash: str | None = None diff --git a/api/app/models/snmp.py b/api/app/models/snmp.py new file mode 100644 index 0000000..421b968 --- /dev/null +++ b/api/app/models/snmp.py @@ -0,0 +1,12 @@ +from pydantic import BaseModel + + +class Stats(BaseModel): + misc: dict | None = None + ports: dict | None = None + + +class Snmp(BaseModel): + snmp: dict[str, Stats] + time: int | None = None + hash: str | None = None |