PingWatch 网络设备离线监控系统
- FastAPI 后端 + Vue 3 前端 - Docker Compose 一键部署 - Casdoor OAuth 认证集成 - LogHive 集中式日志 - 设备批量 CSV 导入/导出 - WebSocket 实时状态推送 - 企业微信告警通知 - fping 高性能并发 Ping 检测 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import enum
|
||||
from datetime import datetime
|
||||
from sqlalchemy import Column, Integer, String, Float, Boolean, DateTime, Enum, Text
|
||||
from sqlalchemy.orm import DeclarativeBase
|
||||
|
||||
|
||||
class Base(DeclarativeBase):
|
||||
pass
|
||||
|
||||
|
||||
class DeviceTypeEnum(str, enum.Enum):
|
||||
server = "server" # 服务器
|
||||
olt = "olt" # OLT
|
||||
switch = "switch" # 交换机
|
||||
firewall = "firewall" # 防火墙
|
||||
other = "other" # 其他
|
||||
|
||||
|
||||
class Device(Base):
|
||||
__tablename__ = "devices"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
name = Column(String(128), nullable=False, comment="设备名称")
|
||||
ip = Column(String(45), nullable=False, index=True, comment="IP 地址")
|
||||
device_type = Column(Enum(DeviceTypeEnum), nullable=False, default=DeviceTypeEnum.other, comment="设备类型")
|
||||
location = Column(String(256), default="", comment="物理位置/地址")
|
||||
project_name = Column(String(256), default="", comment="所属项目")
|
||||
tags = Column(String(512), default="", comment="标签,逗号分隔")
|
||||
|
||||
# Ping 设置
|
||||
ping_interval = Column(Integer, default=30, comment="ping 间隔(秒)")
|
||||
alert_threshold = Column(Integer, default=5, comment="连续失败次数判离线")
|
||||
is_enabled = Column(Boolean, default=True, comment="是否启用监控")
|
||||
|
||||
# 运行状态
|
||||
current_status = Column(String(16), default="unknown", comment="当前状态: online/offline/unknown")
|
||||
consecutive_failures = Column(Integer, default=0, comment="当前连续失败次数")
|
||||
last_ping_time = Column(DateTime, nullable=True, comment="最后一次 ping 时间")
|
||||
last_online_time = Column(DateTime, nullable=True, comment="最后一次在线时间")
|
||||
last_offline_time = Column(DateTime, nullable=True, comment="最后一次离线时间")
|
||||
|
||||
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
||||
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Device(id={self.id}, name={self.name}, ip={self.ip})>"
|
||||
Reference in New Issue
Block a user