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 .ipam import IPAMNetwork, IPAMPool, IPAMAllocation, IPAMHistory
|
||||
from .tasks import TaskQueue, ProxmoxTask, DeployTask
|
||||
from .metrics import InstanceMetric, InstanceNicMetric
|
||||
from .settings import PanelSettings, SecuritySetting, Workspace, WorkspaceServer, WorkspaceUser
|
||||
from .misc import Notification, NotificationPreference, BackupJob, AuditLog
|
||||
|
||||
@@ -12,6 +13,7 @@ __all__ = [
|
||||
'OSTemplateGroup', 'OSTemplate', 'ProxmoxServer', 'VMInstance', 'VMSnapshotArchive',
|
||||
'IPAMNetwork', 'IPAMPool', 'IPAMAllocation', 'IPAMHistory',
|
||||
'TaskQueue', 'ProxmoxTask', 'DeployTask',
|
||||
'InstanceMetric', 'InstanceNicMetric',
|
||||
'PanelSettings', 'SecuritySetting', 'Workspace', 'WorkspaceServer', 'WorkspaceUser',
|
||||
'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