package model import ( "time" ) // ============================================ // MonitorTarget 监控目标(主机/中间件/设备/站点) // ============================================ // TargetType 监控目标类型 type TargetType string const ( TargetTypeHost TargetType = "host" // 主机 TargetTypeMiddleware TargetType = "middleware" // 中间件 TargetTypeDevice TargetType = "device" // 网络设备 TargetTypeSite TargetType = "site" // 站点 TargetTypeDatabase TargetType = "database" // 数据库 TargetTypeContainer TargetType = "container" // 容器 ) // TargetStatus 监控目标状态 type TargetStatus string const ( TargetStatusOnline TargetStatus = "online" // 在线 TargetStatusOffline TargetStatus = "offline" // 离线 TargetStatusUnknown TargetStatus = "unknown" // 未知 ) // MonitorTarget 监控目标表 // 存储所有被监控的对象,包括主机、中间件、网络设备、站点等 type MonitorTarget struct { ID uint `gorm:"primaryKey;autoIncrement;comment:主键ID" json:"id"` Name string `gorm:"type:varchar(128);not null;index;comment:目标名称" json:"name"` Type TargetType `gorm:"type:varchar(32);not null;index;comment:目标类型" json:"type"` Status TargetStatus `gorm:"type:varchar(16);default:'unknown';index;comment:状态" json:"status"` IP string `gorm:"type:varchar(64);comment:IP地址" json:"ip,omitempty"` Port int `gorm:"default:0;comment:端口" json:"port,omitempty"` AgentID string `gorm:"type:varchar(64);index;comment:Agent标识" json:"agent_id,omitempty"` OS string `gorm:"type:varchar(64);comment:操作系统" json:"os,omitempty"` OSVersion string `gorm:"type:varchar(64);comment:OS版本" json:"os_version,omitempty"` Arch string `gorm:"type:varchar(16);comment:系统架构" json:"arch,omitempty"` Kernel string `gorm:"type:varchar(64);comment:内核版本" json:"kernel,omitempty"` HostGroupID uint `gorm:"index;comment:主机组ID" json:"host_group_id,omitempty"` Tags string `gorm:"type:varchar(512);comment:标签JSON" json:"tags,omitempty"` CollectMode string `gorm:"type:varchar(16);default:'agent';comment:采集模式:agent/snmp/api" json:"collect_mode"` SNMPConfig string `gorm:"type:text;comment:SNMP配置JSON" json:"snmp_config,omitempty"` APIConfig string `gorm:"type:text;comment:API配置JSON" json:"api_config,omitempty"` Address string `gorm:"type:varchar(255);comment:监控地址(IP或域名)" json:"address,omitempty"` Protocol string `gorm:"type:varchar(32);comment:协议类型(http/https/tcp/udp/icmp/snmp)" json:"protocol,omitempty"` Timeout int `gorm:"default:30;comment:超时时间(秒)" json:"timeout,omitempty"` Config string `gorm:"type:text;comment:通用配置JSON" json:"config,omitempty"` Interval int `gorm:"default:60;comment:采集间隔(秒)" json:"interval"` Labels string `gorm:"type:varchar(512);comment:标签JSON" json:"labels,omitempty"` Description string `gorm:"type:varchar(256);comment:描述" json:"description,omitempty"` CreatedAt time.Time `gorm:"not null;index;comment:创建时间" json:"created_at"` UpdatedAt time.Time `gorm:"not null;comment:更新时间" json:"updated_at"` DeletedAt *time.Time `gorm:"index;comment:删除时间" json:"deleted_at,omitempty"` LastSeenAt *time.Time `gorm:"index;comment:最后在线时间" json:"last_seen_at,omitempty"` // 关联关系 HostGroup *HostGroup `gorm:"foreignKey:HostGroupID" json:"host_group,omitempty"` } // TableName 指定表名 func (MonitorTarget) TableName() string { return "monitor_targets" } // ============================================ // MonitorMetric 监控指标定义 // ============================================ // MetricType 指标类型 type MetricType string const ( MetricTypeGauge MetricType = "gauge" // 瞬时值 MetricTypeCounter MetricType = "counter" // 计数器 MetricTypeSummary MetricType = "summary" // 摘要 ) // DataSourceType 数据来源类型 type DataSourceType string const ( DataSourceAgent DataSourceType = "agent" // Agent采集 DataSourceSNMP DataSourceType = "snmp" // SNMP采集 DataSourceAPI DataSourceType = "api" // API采集 DataSourcePrometheus DataSourceType = "prometheus" // Prometheus DataSourceZabbix DataSourceType = "zabbix" // Zabbix ) // MonitorMetric 监控指标定义表 // 定义系统中所有可采集的监控指标元数据 type MonitorMetric struct { ID uint `gorm:"primaryKey;autoIncrement;comment:主键ID" json:"id"` Name string `gorm:"type:varchar(128);not null;uniqueIndex:uk_metric_name;comment:指标名称" json:"name"` DisplayName string `gorm:"type:varchar(128);not null;comment:显示名称" json:"display_name"` Description string `gorm:"type:varchar(256);comment:指标描述" json:"description,omitempty"` MetricType MetricType `gorm:"type:varchar(16);not null;comment:指标类型: gauge/counter/summary" json:"metric_type"` Unit string `gorm:"type:varchar(32);comment:单位" json:"unit,omitempty"` DataSource DataSourceType `gorm:"type:varchar(16);not null;comment:数据来源" json:"data_source"` CollectExpr string `gorm:"type:varchar(256);comment:采集表达式/OID/PromQL" json:"collect_expr,omitempty"` Interval int `gorm:"default:60;comment:采集间隔(秒)" json:"interval"` Labels string `gorm:"type:varchar(512);comment:指标标签定义JSON" json:"labels,omitempty"` ValueType string `gorm:"type:varchar(16);default:'float64';comment:值类型" json:"value_type"` Category string `gorm:"type:varchar(64);comment:指标分类" json:"category,omitempty"` IsDefault bool `gorm:"default:true;comment:是否默认启用" json:"is_default"` IsInternal bool `gorm:"default:false;comment:是否内置指标" json:"is_internal"` Status int `gorm:"default:1;comment:状态: 1启用 0禁用" json:"status"` Icon string `gorm:"type:varchar(64);comment:图标" json:"icon,omitempty"` SortOrder int `gorm:"default:0;comment:排序" json:"sort_order"` CreatedAt time.Time `gorm:"not null;comment:创建时间" json:"created_at"` UpdatedAt time.Time `gorm:"not null;comment:更新时间" json:"updated_at"` DeletedAt *time.Time `gorm:"index;comment:删除时间" json:"deleted_at,omitempty"` } // TableName 指定表名 func (MonitorMetric) TableName() string { return "monitor_metrics" } // ============================================ // MetricValue 指标值(时序数据) // ============================================ // MetricValue 指标值表(按时间分区的时序数据) // 存储采集到的实际指标数值,支持高并发写入和时序查询 type MetricValue struct { ID uint64 `gorm:"primaryKey;autoIncrement;comment:主键ID" json:"id"` MetricID uint `gorm:"not null;index:idx_metric_time;comment:指标ID" json:"metric_id"` TargetID uint `gorm:"not null;index:idx_target_metric;comment:目标ID" json:"target_id"` Instance string `gorm:"type:varchar(128);index;comment:实例标识" json:"instance,omitempty"` Value float64 `gorm:"not null;comment:指标值" json:"value"` RawValue string `gorm:"type:text;comment:原始值(用于字符串类型)" json:"raw_value,omitempty"` Labels string `gorm:"type:varchar(512);index;comment:标签JSON" json:"labels,omitempty"` Timestamp int64 `gorm:"not null;index:idx_metric_time;comment:时间戳(秒)" json:"timestamp"` CreatedAt time.Time `gorm:"not null;comment:创建时间" json:"created_at"` // 关联关系 Metric *MonitorMetric `gorm:"foreignKey:MetricID" json:"metric,omitempty"` Target *MonitorTarget `gorm:"foreignKey:TargetID" json:"target,omitempty"` } // TableName 指定表名 func (MetricValue) TableName() string { return "metric_values" } // MetricHistory 指标历史数据(简化版,供监控查询使用) type MetricHistory struct { ID uint64 `gorm:"primaryKey;autoIncrement" json:"id"` TargetID uint `gorm:"index;not null" json:"target_id"` MetricName string `gorm:"type:varchar(128);index" json:"metric_name"` Value float64 `json:"value"` Timestamp int64 `gorm:"index;not null" json:"timestamp"` } func (MetricHistory) TableName() string { return "monitor_metric_histories" } // MetricValueQuery 指标值查询参数 type MetricValueQuery struct { MetricID uint `json:"metric_id" form:"metric_id"` TargetID uint `json:"target_id" form:"target_id"` Instance string `json:"instance" form:"instance"` StartTime int64 `json:"start_time" form:"start_time"` EndTime int64 `json:"end_time" form:"end_time"` Step int `json:"step" form:"step"` // 聚合步长(秒) Limit int `json:"limit" form:"limit"` } // MetricAggResult 指标聚合结果 type MetricAggResult struct { Timestamp int64 `json:"timestamp"` Value float64 `json:"value"` Count int64 `json:"count,omitempty"` Min float64 `json:"min,omitempty"` Max float64 `json:"max,omitempty"` Avg float64 `json:"avg,omitempty"` } // ============================================ // MetricTag 指标标签 // ============================================ // MetricTag 指标标签定义表 // 定义指标维度标签,用于多维数据分析和过滤 type MetricTag struct { ID uint `gorm:"primaryKey;autoIncrement;comment:主键ID" json:"id"` MetricID uint `gorm:"not null;index:idx_metric_tag;comment:指标ID" json:"metric_id"` TagKey string `gorm:"type:varchar(64);not null;index:idx_metric_tag;comment:标签键" json:"tag_key"` TagValue string `gorm:"type:varchar(128);index;comment:标签值" json:"tag_value"` Description string `gorm:"type:varchar(128);comment:描述" json:"description,omitempty"` CreatedAt time.Time `gorm:"not null;comment:创建时间" json:"created_at"` UpdatedAt time.Time `gorm:"not null;comment:更新时间" json:"updated_at"` } // TableName 指定表名 func (MetricTag) TableName() string { return "monitor_metric_tags" } // ============================================ // MonitorDashboard 监控大屏配置 // ============================================ // DashboardType 大屏类型 type DashboardType string const ( DashboardTypeSystem DashboardType = "system" // 系统内置 DashboardTypeCustom DashboardType = "custom" // 自定义 DashboardTypeShared DashboardType = "shared" // 共享 ) // MonitorDashboard 监控大屏配置表 // 定义监控大屏的元数据配置 type MonitorDashboard struct { ID uint `gorm:"primaryKey;autoIncrement;comment:主键ID" json:"id"` Name string `gorm:"type:varchar(128);not null;comment:大屏名称" json:"name"` Type DashboardType `gorm:"type:varchar(16);default:'custom';comment:大屏类型" json:"type"` Description string `gorm:"type:varchar(256);comment:描述" json:"description,omitempty"` Layout string `gorm:"type:text;comment:布局配置JSON" json:"layout,omitempty"` Theme string `gorm:"type:varchar(32);default:'dark';comment:主题: dark/light" json:"theme"` RefreshRate int `gorm:"default:30;comment:自动刷新间隔(秒)" json:"refresh_rate"` IsDefault bool `gorm:"default:false;comment:是否默认大屏" json:"is_default"` IsPublic bool `gorm:"default:false;comment:是否公开" json:"is_public"` CreatedBy uint `gorm:"index;comment:创建人ID" json:"created_by"` Status int `gorm:"default:1;comment:状态: 1启用 0禁用" json:"status"` SortOrder int `gorm:"default:0;comment:排序" json:"sort_order"` CreatedAt time.Time `gorm:"not null;comment:创建时间" json:"created_at"` UpdatedAt time.Time `gorm:"not null;comment:更新时间" json:"updated_at"` DeletedAt *time.Time `gorm:"index;comment:删除时间" json:"deleted_at,omitempty"` // 关联关系 Panels []DashboardPanel `gorm:"foreignKey:DashboardID" json:"panels,omitempty"` } // TableName 指定表名 func (MonitorDashboard) TableName() string { return "monitor_dashboards" } // ============================================ // DashboardPanel 大屏面板 // ============================================ // PanelType 面板类型 type PanelType string const ( PanelTypeChart PanelType = "chart" // 图表 PanelTypeGauge PanelType = "gauge" // 仪表盘 PanelTypeCounter PanelType = "counter" // 计数器 PanelTypeTable PanelType = "table" // 表格 PanelTypeStatus PanelType = "status" // 状态 PanelTypeTopology PanelType = "topology" // 拓扑 PanelTypeLog PanelType = "log" // 日志 PanelTypeAlertList PanelType = "alert_list" // 告警列表 PanelTypeHeatmap PanelType = "heatmap" // 热力图 PanelTypeText PanelType = "text" // 文本 ) // ChartType 图表类型 type ChartType string const ( ChartTypeLine ChartType = "line" // 折线 ChartTypeBar ChartType = "bar" // 柱状 ChartTypeArea ChartType = "area" // 面积 ChartTypePie ChartType = "pie" // 饼图 ChartTypeScatter ChartType = "scatter" // 散点 ) // DashboardPanel 大屏面板配置表 // 定义监控大屏中的各个面板配置 type DashboardPanel struct { ID uint `gorm:"primaryKey;autoIncrement;comment:主键ID" json:"id"` DashboardID uint `gorm:"not null;index;comment:大屏ID" json:"dashboard_id"` Title string `gorm:"type:varchar(128);not null;comment:面板标题" json:"title"` Description string `gorm:"type:varchar(256);comment:描述" json:"description,omitempty"` PanelType PanelType `gorm:"type:varchar(16);not null;comment:面板类型" json:"panel_type"` ChartType ChartType `gorm:"type:varchar(16);comment:图表类型" json:"chart_type,omitempty"` // 位置布局配置 X int `gorm:"default:0;comment:网格X坐标" json:"x"` Y int `gorm:"default:0;comment:网格Y坐标" json:"y"` Width int `gorm:"default:6;comment:宽度(网格列数)" json:"width"` Height int `gorm:"default:4;comment:高度(网格行数)" json:"height"` // 数据源配置 DataSource string `gorm:"type:varchar(16);comment:数据源类型" json:"data_source,omitempty"` MetricID uint `gorm:"comment:关联指标ID" json:"metric_id,omitempty"` TargetID uint `gorm:"comment:关联目标ID" json:"target_id,omitempty"` QueryExpr string `gorm:"type:text;comment:查询表达式" json:"query_expr,omitempty"` QueryConfig string `gorm:"type:text;comment:查询配置JSON" json:"query_config,omitempty"` // 展示配置 TimeRange string `gorm:"type:varchar(16);default:'1h';comment:时间范围" json:"time_range"` RefreshRate int `gorm:"default:0;comment:刷新间隔(秒),0表示继承大屏" json:"refresh_rate"` Thresholds string `gorm:"type:text;comment:阈值配置JSON" json:"thresholds,omitempty"` Colors string `gorm:"type:text;comment:颜色配置JSON" json:"colors,omitempty"` Legend string `gorm:"type:varchar(64);comment:图例配置" json:"legend,omitempty"` Unit string `gorm:"type:varchar(32);comment:显示单位" json:"unit,omitempty"` Decimals int `gorm:"default:2;comment:小数位数" json:"decimals"` // 状态 Status int `gorm:"default:1;comment:状态: 1启用 0禁用" json:"status"` SortOrder int `gorm:"default:0;comment:排序" json:"sort_order"` CreatedAt time.Time `gorm:"not null;comment:创建时间" json:"created_at"` UpdatedAt time.Time `gorm:"not null;comment:更新时间" json:"updated_at"` } // TableName 指定表名 func (DashboardPanel) TableName() string { return "dashboard_panels" } // PanelQueryConfig 面板查询配置 type PanelQueryConfig struct { Metrics []string `json:"metrics"` // 指标名称列表 Targets []uint `json:"targets"` // 目标ID列表 Instances []string `json:"instances"` // 实例列表 Aggregations []string `json:"aggregations"` // 聚合函数 GroupBy []string `json:"group_by"` // 分组标签 Filters map[string]string `json:"filters"` // 过滤条件 Step int `json:"step"` // 步长 LegendFormat string `json:"legend_format"` // 图例格式 } // ThresholdConfig 阈值配置 type ThresholdConfig struct { Critical float64 `json:"critical"` // 严重 Warning float64 `json:"warning"` // 警告 Info float64 `json:"info"` // 提示 Unit string `json:"unit"` // 单位 } // HostGroup 主机组 type HostGroup struct { ID uint `gorm:"primaryKey;autoIncrement;comment:主键ID" json:"id"` Name string `gorm:"type:varchar(128);not null;uniqueIndex;comment:组名称" json:"name"` Description string `gorm:"type:varchar(256);comment:描述" json:"description,omitempty"` ParentID uint `gorm:"index;comment:父组ID" json:"parent_id,omitempty"` SortOrder int `gorm:"default:0;comment:排序" json:"sort_order"` CreatedAt time.Time `gorm:"not null;comment:创建时间" json:"created_at"` UpdatedAt time.Time `gorm:"not null;comment:更新时间" json:"updated_at"` DeletedAt *time.Time `gorm:"index;comment:删除时间" json:"deleted_at,omitempty"` } // TableName 指定表名 func (HostGroup) TableName() string { return "asset_host_groups" } // ============================================ // HealthProbe 健康探针配置(Agent 本地执行) // ============================================ // ProbeType 探针类型 type ProbeType string const ( ProbeTypeHTTP ProbeType = "http_get" // HTTP GET 探测 ProbeTypeTCP ProbeType = "tcp_socket" // TCP 端口连接探测 ProbeTypeExec ProbeType = "exec_command" // 命令执行探测 ) // ProbeStatus 探针结果状态 type ProbeStatus string const ( ProbeStatusUp ProbeStatus = "up" // 健康 ProbeStatusDown ProbeStatus = "down" // 异常 ) // HealthProbe 健康探针配置表 // 存储在平台 DB,Agent 拉取配置后在目标主机本地执行,结果随心跳上报 type HealthProbe struct { ID uint `gorm:"primaryKey;autoIncrement" json:"id"` Name string `gorm:"type:varchar(128);not null;index" json:"name"` Hostname string `gorm:"type:varchar(255);index;not null" json:"hostname"` ProbeType ProbeType `gorm:"type:varchar(32);not null" json:"probe_type"` // HTTP 探针配置 HTTPURL string `gorm:"type:varchar(512)" json:"http_url,omitempty"` HTTPMethod string `gorm:"type:varchar(10);default:GET" json:"http_method,omitempty"` HTTPHeaders string `gorm:"type:text" json:"http_headers,omitempty"` HTTPExpectCode int `gorm:"default:200" json:"http_expect_code,omitempty"` HTTPExpectBody string `gorm:"type:varchar(256)" json:"http_expect_body,omitempty"` // TCP 探针配置 TCPHost string `gorm:"type:varchar(255)" json:"tcp_host,omitempty"` TCPPort int `json:"tcp_port,omitempty"` // Exec 探针配置 ExecCommand string `gorm:"type:text" json:"exec_command,omitempty"` // 通用配置 Timeout int `gorm:"default:10" json:"timeout"` Interval int `gorm:"default:60" json:"interval"` Enabled bool `gorm:"default:true;index" json:"enabled"` LastStatus ProbeStatus `gorm:"type:varchar(8);default:''" json:"last_status,omitempty"` LastCheckedAt *time.Time `json:"last_checked_at,omitempty"` LastLatencyMs int `json:"last_latency_ms"` FailCount int `json:"fail_count"` Description string `gorm:"type:varchar(256)" json:"description,omitempty"` CreatedAt time.Time `gorm:"not null" json:"created_at"` UpdatedAt time.Time `gorm:"not null" json:"updated_at"` DeletedAt *time.Time `gorm:"index" json:"deleted_at,omitempty"` } // TableName 指定表名 func (HealthProbe) TableName() string { return "monitor_health_probes" } // HealthProbeResult Agent 上报的探针执行结果(作为心跳的一部分) type HealthProbeResult struct { ProbeID uint `json:"probe_id"` Name string `json:"name"` ProbeType string `json:"probe_type"` Status ProbeStatus `json:"status"` // up / down LatencyMs int `json:"latency_ms"` // 响应延迟(ms) StatusCode int `json:"status_code,omitempty"` // HTTP 状态码 Message string `json:"message,omitempty"` // 错误/附加信息 }