feat(metrics): add instance_metric and instance_nic_metric models
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -3,6 +3,7 @@ from .auth import Role, user_servers, User, ActiveSession, LoginAttempt, Blocked
|
|||||||
from .proxmox import OSTemplateGroup, OSTemplate, ProxmoxServer, VMInstance, VMSnapshotArchive
|
from .proxmox import OSTemplateGroup, OSTemplate, ProxmoxServer, VMInstance, VMSnapshotArchive
|
||||||
from .ipam import IPAMNetwork, IPAMPool, IPAMAllocation, IPAMHistory
|
from .ipam import IPAMNetwork, IPAMPool, IPAMAllocation, IPAMHistory
|
||||||
from .tasks import TaskQueue, ProxmoxTask, DeployTask
|
from .tasks import TaskQueue, ProxmoxTask, DeployTask
|
||||||
|
from .metrics import InstanceMetric, InstanceNicMetric
|
||||||
from .settings import PanelSettings, SecuritySetting, Workspace, WorkspaceServer, WorkspaceUser
|
from .settings import PanelSettings, SecuritySetting, Workspace, WorkspaceServer, WorkspaceUser
|
||||||
from .misc import Notification, NotificationPreference, BackupJob, AuditLog
|
from .misc import Notification, NotificationPreference, BackupJob, AuditLog
|
||||||
|
|
||||||
@@ -12,6 +13,7 @@ __all__ = [
|
|||||||
'OSTemplateGroup', 'OSTemplate', 'ProxmoxServer', 'VMInstance', 'VMSnapshotArchive',
|
'OSTemplateGroup', 'OSTemplate', 'ProxmoxServer', 'VMInstance', 'VMSnapshotArchive',
|
||||||
'IPAMNetwork', 'IPAMPool', 'IPAMAllocation', 'IPAMHistory',
|
'IPAMNetwork', 'IPAMPool', 'IPAMAllocation', 'IPAMHistory',
|
||||||
'TaskQueue', 'ProxmoxTask', 'DeployTask',
|
'TaskQueue', 'ProxmoxTask', 'DeployTask',
|
||||||
|
'InstanceMetric', 'InstanceNicMetric',
|
||||||
'PanelSettings', 'SecuritySetting', 'Workspace', 'WorkspaceServer', 'WorkspaceUser',
|
'PanelSettings', 'SecuritySetting', 'Workspace', 'WorkspaceServer', 'WorkspaceUser',
|
||||||
'Notification', 'NotificationPreference', 'BackupJob', 'AuditLog'
|
'Notification', 'NotificationPreference', 'BackupJob', 'AuditLog'
|
||||||
]
|
]
|
||||||
|
|||||||
39
backend/app/models/metrics.py
Normal file
39
backend/app/models/metrics.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
from sqlalchemy import Float
|
||||||
|
from .base import Base, Column, Integer, BigInteger, String, DateTime, Index, func
|
||||||
|
|
||||||
|
|
||||||
|
class InstanceMetric(Base):
|
||||||
|
__tablename__ = "instance_metric"
|
||||||
|
|
||||||
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||||
|
server_id = Column(Integer, nullable=False)
|
||||||
|
vmid = Column(Integer, nullable=False)
|
||||||
|
vm_type = Column(String(10), nullable=True)
|
||||||
|
ts = Column(DateTime(timezone=True), nullable=False, server_default=func.now())
|
||||||
|
cpu = Column(Float, nullable=True)
|
||||||
|
mem = Column(BigInteger, nullable=True)
|
||||||
|
maxmem = Column(BigInteger, nullable=True)
|
||||||
|
disk_used = Column(BigInteger, nullable=True)
|
||||||
|
disk_total = Column(BigInteger, nullable=True)
|
||||||
|
netin_rate = Column(Float, nullable=True)
|
||||||
|
netout_rate = Column(Float, nullable=True)
|
||||||
|
diskread_rate = Column(Float, nullable=True)
|
||||||
|
diskwrite_rate = Column(Float, nullable=True)
|
||||||
|
iops_read = Column(Float, nullable=True)
|
||||||
|
iops_write = Column(Float, nullable=True)
|
||||||
|
|
||||||
|
__table_args__ = (Index("ix_instance_metric_lookup", "server_id", "vmid", "ts"),)
|
||||||
|
|
||||||
|
|
||||||
|
class InstanceNicMetric(Base):
|
||||||
|
__tablename__ = "instance_nic_metric"
|
||||||
|
|
||||||
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||||
|
server_id = Column(Integer, nullable=False)
|
||||||
|
vmid = Column(Integer, nullable=False)
|
||||||
|
ts = Column(DateTime(timezone=True), nullable=False, server_default=func.now())
|
||||||
|
dev = Column(String(64), nullable=False)
|
||||||
|
in_rate = Column(Float, nullable=True)
|
||||||
|
out_rate = Column(Float, nullable=True)
|
||||||
|
|
||||||
|
__table_args__ = (Index("ix_instance_nic_metric_lookup", "server_id", "vmid", "ts"),)
|
||||||
18
backend/tests/test_metrics_models.py
Normal file
18
backend/tests/test_metrics_models.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
|
def test_instance_metric_roundtrip(db_session):
|
||||||
|
from app.models import InstanceMetric, InstanceNicMetric
|
||||||
|
ts = datetime(2026, 6, 21, 12, 0, tzinfo=timezone.utc)
|
||||||
|
db_session.add(InstanceMetric(
|
||||||
|
server_id=1, vmid=114, vm_type="qemu", ts=ts,
|
||||||
|
cpu=0.25, mem=100, maxmem=200, disk_used=10, disk_total=40,
|
||||||
|
netin_rate=1.0, netout_rate=2.0, diskread_rate=0.0, diskwrite_rate=3.0,
|
||||||
|
iops_read=12.0, iops_write=4.0,
|
||||||
|
))
|
||||||
|
db_session.add(InstanceNicMetric(
|
||||||
|
server_id=1, vmid=114, ts=ts, dev="tap114i0", in_rate=5.0, out_rate=6.0))
|
||||||
|
db_session.commit()
|
||||||
|
m = db_session.query(InstanceMetric).one()
|
||||||
|
assert m.vmid == 114 and m.iops_read == 12.0
|
||||||
|
n = db_session.query(InstanceNicMetric).one()
|
||||||
|
assert n.dev == "tap114i0" and n.out_rate == 6.0
|
||||||
Reference in New Issue
Block a user