- v0.31: AlertContact 重构(channel_type下拉+webhook_url替代三分立字段) - v0.32: Agent ProcessTop 增强(cmdline/user/cpu_pct/mem_pct) - v0.33: 端口监控 Tab(监听端口自动发现+down联动告警) - v0.34: 健康探针(Agent本地执行HTTP/TCP/Exec→结果随心跳上报) - Agent新增: ContextSwitch/FD/HealthProbe采集器 - 后端新增: health_probe handler + Agent model扩展 - HostMonitor新增Tab: 健康探针/端口监控
188 lines
6.6 KiB
Go
188 lines
6.6 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// AgentReport Agent 上报的原始指标数据 // Logan.Li
|
|
type AgentReport struct {
|
|
ID uint `gorm:"primarykey" json:"id"`
|
|
Hostname string `gorm:"size:255;index;not null" json:"hostname"`
|
|
CPUUsage float64 `gorm:"type:decimal(6,2)" json:"cpu_usage"`
|
|
CPUCores int `json:"cpu_cores"`
|
|
Load1 float64 `gorm:"type:decimal(8,2)" json:"load1"`
|
|
Load5 float64 `gorm:"type:decimal(8,2)" json:"load5"`
|
|
Load15 float64 `gorm:"type:decimal(8,2)" json:"load15"`
|
|
MemTotal float64 `gorm:"type:decimal(10,2)" json:"mem_total"`
|
|
MemUsed float64 `gorm:"type:decimal(10,2)" json:"mem_used"`
|
|
MemUsage float64 `gorm:"type:decimal(6,2)" json:"mem_usage"`
|
|
DiskInfo string `gorm:"type:text" json:"disk_info"`
|
|
PortInfo string `gorm:"type:text" json:"port_info"`
|
|
NetInfo string `gorm:"type:text" json:"net_info"`
|
|
DiskIOInfo string `gorm:"type:text" json:"disk_io_info"`
|
|
// ──── v2.0 新增字段 ────
|
|
SwapInfo string `gorm:"type:text" json:"swap_info"` // Swap JSON
|
|
ProcessTopInfo string `gorm:"type:text" json:"process_top_info"` // 进程 TOP JSON
|
|
FDInfo string `gorm:"type:text" json:"fd_info"` // FD 句柄 JSON
|
|
CSInfo string `gorm:"type:text" json:"cs_info"` // 上下文切换 JSON
|
|
HeartbeatInfo string `gorm:"type:text" json:"heartbeat_info"` // Agent 心跳 JSON
|
|
// ──────────────────────────
|
|
ReportTime time.Time `json:"report_time"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
func (AgentReport) TableName() string {
|
|
return "monitor_agent_reports"
|
|
}
|
|
|
|
// AgentLatestResponse Agent 最新状态(含服务器元信息)
|
|
type AgentLatestResponse struct {
|
|
ServerID uint `json:"server_id"`
|
|
Hostname string `json:"hostname"`
|
|
IP string `json:"ip"`
|
|
CPUUsage float64 `json:"cpu_usage"`
|
|
CPUCores int `json:"cpu_cores"`
|
|
MemUsage float64 `json:"mem_usage"`
|
|
MemTotal float64 `json:"mem_total"`
|
|
MemUsed float64 `json:"mem_used"`
|
|
DiskUsage float64 `json:"disk_usage"`
|
|
DiskTotal int64 `json:"disk_total"`
|
|
DiskInfo string `json:"disk_info"`
|
|
PortInfo string `json:"port_info"`
|
|
NetInfo string `json:"net_info"`
|
|
DiskIOInfo string `json:"disk_io_info"`
|
|
// ──── v2.0 新增 ────
|
|
SwapInfo string `json:"swap_info"`
|
|
ProcessTopInfo string `json:"process_top_info"`
|
|
FDInfo string `json:"fd_info"`
|
|
CSInfo string `json:"cs_info"`
|
|
HeartbeatInfo string `json:"heartbeat_info"`
|
|
// ─────────────────
|
|
ReportTime string `json:"report_time"`
|
|
AgentVersion string `json:"agent_version"`
|
|
AgentStatus string `json:"agent_status"`
|
|
OS string `json:"os"`
|
|
Kernel string `json:"kernel"`
|
|
Uptime int64 `json:"uptime"`
|
|
Region string `json:"region"`
|
|
HasAuth bool `json:"has_auth"`
|
|
}
|
|
|
|
// AgentReportRequest Agent 上报请求体
|
|
type AgentReportRequest struct {
|
|
Hostname string `json:"hostname" binding:"required"`
|
|
IP string `json:"ip"`
|
|
Timestamp string `json:"timestamp"`
|
|
AgentVersion string `json:"agent_version"`
|
|
CPU CPUMetric `json:"cpu"`
|
|
Memory MemMetric `json:"memory"`
|
|
Swap *SwapMetric `json:"swap,omitempty"`
|
|
Disks []DiskMetric `json:"disks"`
|
|
Ports []PortMetric `json:"ports"`
|
|
Network NetworkStatModel `json:"network"`
|
|
DiskIO DiskIOStatModel `json:"disk_io"`
|
|
System *SystemStatModel `json:"system,omitempty"`
|
|
// ──── v2.0 新增 ────
|
|
ProcessTop []ProcessMetric `json:"process_top,omitempty"`
|
|
FD *FDMetric `json:"fd,omitempty"`
|
|
ContextSwitches *CSMetric `json:"context_switches,omitempty"`
|
|
Heartbeat HeartbeatMetric `json:"heartbeat"`
|
|
ProbeResults []HealthProbeResult `json:"probe_results,omitempty"` // v2.1 健康探针结果
|
|
}
|
|
|
|
// ──── v2.0 新增上报类型 ────
|
|
|
|
type SwapMetric struct {
|
|
TotalGB float64 `json:"total_gb"`
|
|
UsedGB float64 `json:"used_gb"`
|
|
UsagePercent float64 `json:"usage_percent"`
|
|
}
|
|
|
|
type ProcessMetric struct {
|
|
PID int `json:"pid"`
|
|
Name string `json:"name"`
|
|
Cmdline string `json:"cmdline"`
|
|
User string `json:"user"`
|
|
CPUPct float64 `json:"cpu_pct"`
|
|
MemPct float64 `json:"mem_pct"`
|
|
MemoryMB float64 `json:"memory_mb"`
|
|
FDCount int `json:"fd_count"`
|
|
Threads int `json:"threads"`
|
|
}
|
|
|
|
type FDMetric struct {
|
|
Allocated int `json:"allocated"`
|
|
Max int64 `json:"max"`
|
|
UsagePct float64 `json:"usage_pct"`
|
|
}
|
|
|
|
type CSMetric struct {
|
|
CTXPerSec float64 `json:"ctx_per_sec"`
|
|
IRQPerSec float64 `json:"irq_per_sec"`
|
|
}
|
|
|
|
type HeartbeatMetric struct {
|
|
Version string `json:"version"`
|
|
UptimeSec int64 `json:"uptime_sec"`
|
|
LastErr string `json:"last_err,omitempty"`
|
|
SelfCPU float64 `json:"self_cpu_pct"`
|
|
SelfRSSMB float64 `json:"self_rss_mb"`
|
|
ReportSeq uint64 `json:"report_seq"`
|
|
}
|
|
|
|
// ──── 已有类型 ────
|
|
|
|
type SystemStatModel struct {
|
|
OSVersion string `json:"os_version"`
|
|
Kernel string `json:"kernel"`
|
|
Uptime int64 `json:"uptime"`
|
|
}
|
|
|
|
type CPUMetric struct {
|
|
UsagePercent float64 `json:"usage_percent"`
|
|
CoreCount int `json:"core_count"`
|
|
Load1 float64 `json:"load1"`
|
|
Load5 float64 `json:"load5"`
|
|
Load15 float64 `json:"load15"`
|
|
}
|
|
|
|
type MemMetric struct {
|
|
TotalGB float64 `json:"total_gb"`
|
|
UsedGB float64 `json:"used_gb"`
|
|
CachedGB float64 `json:"cached_gb"`
|
|
UsagePercent float64 `json:"usage_percent"`
|
|
}
|
|
|
|
type DiskMetric struct {
|
|
Mount string `json:"mount"`
|
|
Device string `json:"device"`
|
|
TotalGB float64 `json:"total_gb"`
|
|
UsedGB float64 `json:"used_gb"`
|
|
UsagePercent float64 `json:"usage_percent"`
|
|
}
|
|
|
|
type PortMetric struct {
|
|
Port int `json:"port"`
|
|
Protocol string `json:"protocol"`
|
|
Process string `json:"process"`
|
|
PID int `json:"pid"`
|
|
}
|
|
|
|
type NetworkStatModel struct {
|
|
TCPEstablished int `json:"tcp_established"`
|
|
TCPTimeWait int `json:"tcp_time_wait"`
|
|
TCPCloseWait int `json:"tcp_close_wait"`
|
|
TCPTotal int `json:"tcp_total"`
|
|
NicName string `json:"nic_name"`
|
|
NetRxBPS float64 `json:"net_rx_bps"`
|
|
NetTxBPS float64 `json:"net_tx_bps"`
|
|
}
|
|
|
|
type DiskIOStatModel struct {
|
|
ReadBPS float64 `json:"read_bps"`
|
|
WriteBPS float64 `json:"write_bps"`
|
|
ReadIOPS float64 `json:"read_iops"`
|
|
WriteIOPS float64 `json:"write_iops"`
|
|
}
|