aboutsummaryrefslogtreecommitdiffstats
path: root/api/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'api/app/models')
-rw-r--r--api/app/models/__init__.py0
-rw-r--r--api/app/models/config.py14
-rw-r--r--api/app/models/device.py47
-rw-r--r--api/app/models/network.py19
-rw-r--r--api/app/models/oplog.py21
-rw-r--r--api/app/models/ping.py14
-rw-r--r--api/app/models/snmp.py12
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