Files
ops/docs/superpowers/specs/2026-06-21-ops-project-structure-data-model-api-design.md

31 KiB
Raw Blame History

OPS 项目目录、数据模型与接口文件设计

1. 设计目标

本文根据现有项目文档和 server/ 模板结构,重新设计 OPS 的实际业务目录、完整数据模型文件边界和 REST 接口文件边界。

本设计替代已删除的旧设计文档,不以旧文档为基线。

目标:

  • 保留模板验证过的 Go 分层骨架:cmd/internal/config/internal/impl/internal/models/internal/logic/internal/routers/
  • 按 OPS-001 至 OPS-033 完整功能需求设计数据模型,先完整建模,再按阶段实现。
  • 首期优先打通“资源纳管 -> 采集/探测/Trap/Syslog -> 原始事件 -> 告警 -> 通知 -> 工单 -> 报表/大屏/审计”闭环。
  • templates/ 仅作为只读参考,不参与实际业务实现,不被实际业务代码 import。
  • 为后续生成 Go 模型、DTO、Service、Router 文件提供清晰边界和注释规范。

2. 关键决策

采用“按业务域拆分,保留模板分层”的 B 方案。

不采用以下方案:

  • 不做模板最小改造。原因是告警、工单、采集和权限会挤在少量文件中,后续维护困难。
  • 不新增大规模 domain/service/repository 重构层。原因是首期目标是可运行、可验收,过度重构会偏离模板和当前交付节奏。

约束:

  • templates/front_sample/standardtemplates/server_sample/ 只读参考。
  • 实际后端业务只落在 server/
  • 未来实际前端业务只落在 web/
  • 不新增旧项目名。
  • 命令示例只使用 Windows PowerShell。
  • PostgreSQL 保存事务数据TDengine 保存时序样本,业务代码通过适配层访问 TDengine。

3. 后端目录结构

server/
  cmd/
    main/
      main.go
    cli/
      main.go
  etc/
    ops_dev.example.yaml
    ops_test.example.yaml
    ops_prod.example.yaml
  internal/
    config/
      config.go
    impl/
      new.go
      postgres.go
      redis.go
      tsdb.go
      file_store.go
    models/
      base.go
      resource/
      metric/
      collector/
      event/
      alert/
      notification/
      ticket/
      asset/
      topology/
      ipam/
      traffic/
      knowledge/
      report/
      iam/
      audit/
    logic/
      response/
      statemachine/
      resource/
      metric/
      collector/
      event/
      alert/
      notification/
      ticket/
      asset/
      topology/
      ipam/
      traffic/
      knowledge/
      report/
      dashboard/
      iam/
      audit/
      room3d/
    routers/
      register.go
      resource.go
      metric.go
      collector.go
      event.go
      alert.go
      notification.go
      ticket.go
      asset.go
      topology.go
      ipam.go
      traffic.go
      knowledge.go
      report.go
      dashboard.go
      iam.go
      audit.go
      room3d.go
  test/
    resource/
    collector/
    event/
    alert/
    notification/
    ticket/
    room3d/

目录职责:

  • models/GORM 表结构、表名、索引、唯一约束和基础查询。模型文件不写状态机和业务编排。
  • logic/业务编排、DTO、状态机、权限判断、错误救援、审计记录和外部适配。
  • logic/statemachine/:资源、采集、原始事件、告警、事件、通知、工单状态流转集中定义。
  • logic/response/:统一响应、错误码、traceIdsuggestion
  • routers/HTTP 路由注册和参数绑定。Router 不直接操作数据库。
  • impl/PostgreSQL、Redis、TDengine、文件存储等基础设施实例。
  • test/HTTP 接口样例、验收脚本和后端测试支撑文件。

4. 前端目录结构

web/ 当前不存在。后续从前端模板初始化后,建议使用以下业务边界:

web/
  src/
    api/
      types/
        common.ts
        resource.ts
        metric.ts
        collector.ts
        event.ts
        alert.ts
        notification.ts
        ticket.ts
        asset.ts
        report.ts
        iam.ts
      resource.ts
      metric.ts
      collector.ts
      event.ts
      alert.ts
      notification.ts
      ticket.ts
      asset.ts
      report.ts
      dashboard.ts
      iam.ts
      audit.ts
      room3d.ts
    views/
      dashboard/
      monitor/
      events/
      alerts/
      tickets/
      reports/
      screens/
      iam/
      system/
      room3d-api/
    store/
      modules/
        user.ts
        permission.ts
        ops-state.ts
    components/
      ops-state/
      trace-error/
      resource-selector/
      alert-severity/
      ticket-transition/

前端规则:

  • API 类型按业务域放入 src/api/types/
  • 页面组件不得直接拼接非法状态,状态枚举以后端返回和前端类型定义为准。
  • 所有错误状态展示 traceId
  • loading、empty、error、success、partial、forbidden、stale、operating、operation_failed 必须可被页面表达。

5. 数据模型总体原则

数据模型先覆盖完整 OPS-001 至 OPS-033再按阶段实现

  • P1首期必须实现或迁移用于验收核心闭环。
  • P2上下文增强先设计模型边界后续按任务实现。
  • P3运营治理和智能化先预留统计口径。

统一规则:

  • 所有核心表包含 idtenant_idcreated_atupdated_atcreated_byupdated_bydeleted_atversion
  • 关键状态变化写 audit_logs 或对应 transition 表。
  • 敏感凭据不保存明文,只保存 secret_ref 和脱敏描述。
  • TDengine 样本不做 GORM 模型,只在 PostgreSQL 中保存指标定义、序列映射和保留策略。
  • 模型文件注释必须说明表职责、阶段和对应需求编号。

建议 server/internal/models/base.go

// BaseModel 是 OPS 事务表的通用字段。
// 所有需要审计、租户隔离或软删除的业务表都应嵌入该结构。
type BaseModel struct {
    ID        string         `gorm:"column:id;type:varchar(64);primaryKey" json:"id"`
    TenantID  string         `gorm:"column:tenant_id;type:varchar(64);index" json:"tenantId"`
    CreatedAt time.Time      `gorm:"column:created_at" json:"createdAt"`
    UpdatedAt time.Time      `gorm:"column:updated_at" json:"updatedAt"`
    CreatedBy string         `gorm:"column:created_by;type:varchar(64)" json:"createdBy"`
    UpdatedBy string         `gorm:"column:updated_by;type:varchar(64)" json:"updatedBy"`
    DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;index" json:"-"`
    Version   int            `gorm:"column:version;default:1" json:"version"`
}

6. 资源与业务系统模型

server/internal/models/resource/
  business_system.go
  resource_type.go
  resource.go
  resource_relation.go
  resource_group.go
  credential.go
文件 表名 阶段 对应需求 职责
business_system.go business_systems P1 OPS-001、OPS-011、OPS-033 HIS、LIS、PACS、EMR 等业务系统建模。
resource_type.go resource_types P1 OPS-002 至 OPS-012 主机、H3C 网络设备、数据库、虚拟化、URL/API 等资源类型。
resource.go resources P1 OPS-002 至 OPS-014、OPS-031 统一监控资源主表。
resource_relation.go resource_relations P1/P2 OPS-013、OPS-033 资源依赖、业务拓扑、基础拓扑关系。
resource_group.go resource_groupsresource_group_members P2 OPS-013、OPS-031 资源分组、多级分组、自动分组结果。
credential.go credentials P1 OPS-002 至 OPS-011、OPS-031 凭据引用和脱敏摘要。

核心字段:

  • business_systemsnamecodelevelnetwork_zoneowner_org_idowner_user_idhealth_statusdescription
  • resource_typescodenamecategoryvendordefault_metric_template_idicon
  • resourcesnameresource_type_idvendormodeliphostnamebusiness_system_idowner_org_idowner_user_idasset_idstatuscollect_statushighest_alert_severity
  • resource_relationssource_resource_idtarget_resource_idrelation_typedescription
  • credentialsnametypesecret_refmasked_summaryowner_org_idstatus

索引建议:

  • resources(tenant_id, resource_type_id, status)
  • resources(tenant_id, ip)
  • resources(tenant_id, business_system_id)
  • business_systems(tenant_id, code) 唯一。
  • resource_types(code) 唯一。

7. 指标、模板与时序映射模型

server/internal/models/metric/
  metric_template.go
  metric_definition.go
  metric_series.go
  metric_retention_policy.go
文件 表名 阶段 对应需求 职责
metric_template.go metric_templates P1 OPS-002 至 OPS-011、OPS-031 资源类型、厂商、协议维度的指标模板。
metric_definition.go metric_definitions P1 OPS-002 至 OPS-014 指标编码、单位、类型、默认采集周期和阈值建议。
metric_series.go metric_series P1 OPS-002、OPS-004、OPS-007、OPS-011、OPS-027 PostgreSQL 到 TDengine 时序序列的映射。
metric_retention_policy.go metric_retention_policies P1 OPS-015、OPS-027 原始样本保留、降采样、聚合保留策略。

核心字段:

  • metric_templatesnameresource_type_idvendorversionstatus
  • metric_definitionstemplate_idresource_type_idmetric_codemetric_nameunitvalue_typedefault_interval_secondsthreshold_hint
  • metric_seriesresource_idmetric_definition_idmetric_codetsdb_nameseries_keylabels_jsonretention_policy_id
  • metric_retention_policiesnameraw_retention_daysdownsample_rulestatus

TDengine 访问规则:

  • 业务代码只调用 logic/metric/tsdb_adapter.go
  • 查询统一使用 resource_id + metric_code + time_range
  • 不在资源、告警、报表逻辑中散落 TDengine SQL。

8. 采集、发现与探测模型

server/internal/models/collector/
  collector_task.go
  collector_run.go
  discovery_task.go
  discovery_result.go
  probe_target.go
  agent_node.go
文件 表名 阶段 对应需求 职责
collector_task.go collector_tasks P1 OPS-002 至 OPS-011、OPS-031 采集任务定义。
collector_run.go collector_runs P1 OPS-031 单次采集执行记录和失败原因。
discovery_task.go discovery_tasks P1/P2 OPS-004、OPS-016、OPS-017、OPS-031 自动发现任务。
discovery_result.go discovery_results P2 OPS-016、OPS-017、OPS-031 自动发现结果和匹配资源。
probe_target.go probe_targets P1 OPS-011 URL/API/端口探测目标。
agent_node.go agent_nodes P2 OPS-032 跨网代理节点。

核心字段:

  • collector_tasksresource_idcollector_typeprotocolcredential_idschedule_croninterval_secondstimeout_secondsretry_limitstatus
  • collector_runstask_idstarted_atfinished_atrun_statussuccess_countfailed_counterror_codeerror_messagetrace_idlast_success_at
  • discovery_tasksnamescan_rangeprotocols_jsoncredential_idschedule_cronstatus
  • probe_targetsresource_idtarget_urlmethodexpected_statustimeout_secondsstatus
  • agent_nodesnameregionnetwork_zonemodelast_heartbeat_atstatus

救援要求:

  • 采集失败写 collector_runs
  • 连续失败达到阈值后写平台内部 raw_events
  • COLLECT_UNREACHABLECOLLECT_AUTH_FAILEDCOLLECT_TIMEOUT 必须可区分。

9. 事件、Syslog 与 Trap 模型

server/internal/models/event/
  raw_event.go
  syslog_rule.go
  trap_dictionary.go
  event_replay_job.go
文件 表名 阶段 对应需求 职责
raw_event.go raw_events P1 OPS-010、OPS-018、OPS-021 原始事件池,保留解析前后状态。
syslog_rule.go syslog_rules P1 OPS-010 Syslog 匹配、字段提取和级别映射。
trap_dictionary.go trap_dictionaries P1 OPS-010 Trap OID 字典、恢复 OID 和级别配置。
event_replay_job.go event_replay_jobs P1 OPS-010 补规则后的事件重放任务。

核心字段:

  • raw_eventssource_typesource_idresource_idevent_keyoccurred_atseveritytitlemessagepayload_jsonparse_statusmatched_rule_idsuppressed_policy_id
  • syslog_rulesnamematch_exprextract_exprseverity_mapping_jsonstatus
  • trap_dictionariesvendoroidnameseverityrecover_oiddescriptionstatus
  • event_replay_jobsnamescope_typescope_idstatusresult_summary_json

规则:

  • 未解析 Trap/Syslog 不删除。
  • 重放动作必须写审计。
  • 被抑制事件仍可查询,并记录命中的策略 ID。

10. 告警与事件治理模型

server/internal/models/alert/
  alert_rule.go
  alert.go
  incident.go
  incident_alert.go
  silence_policy.go
  dedup_rule.go
  correlation_rule.go
  escalation_policy.go
  alert_quality_stat.go
文件 表名 阶段 对应需求 职责
alert_rule.go alert_rules P1 OPS-018、OPS-020 阈值、Trap、Syslog、可用性告警规则。
alert.go alerts P1 OPS-018 至 OPS-021 告警实例和生命周期。
incident.go incidents P1 OPS-021、OPS-022 多告警归并后的事件。
incident_alert.go incident_alerts P1 OPS-018、OPS-021 事件与告警关联。
silence_policy.go silence_policies P1 OPS-018 屏蔽和维护窗口。
dedup_rule.go dedup_rules P1 OPS-018 去重窗口和匹配表达式。
correlation_rule.go correlation_rules P1/P2 OPS-018、OPS-013 压缩、依赖、抑制规则。
escalation_policy.go escalation_policies P1 OPS-020 超时升级策略。
alert_quality_stat.go alert_quality_stats P3 OPS-018 后续优化 告警质量评分和规则优化依据。

核心字段:

  • alert_rulesnamescope_typescope_idmetric_codecondition_exprduration_secondsrecover_exprseveritystatus
  • alertsalert_keyresource_idrule_idfirst_seen_atlast_seen_atrecovered_atseveritystatussummary
  • incidentsincident_notitleseveritystatusowner_user_idbusiness_system_idopened_atclosed_at
  • silence_policiesnamescope_typescope_idstart_atend_atreasonstatus
  • alert_quality_statsrule_idnoise_countfalse_positive_countavg_ack_secondsavg_resolve_secondsscore

11. 通知与工单模型

server/internal/models/notification/
  notification_policy.go
  notification_template.go
  notification_record.go

server/internal/models/ticket/
  ticket.go
  ticket_transition.go
  ticket_comment.go
  ticket_sla_record.go
  ticket_dispatch_rule.go
文件 表名 阶段 对应需求 职责
notification_policy.go notification_policies P1 OPS-019、OPS-020 通知策略。
notification_template.go notification_templates P1 OPS-019、OPS-030 站内消息、短信、邮件模板。
notification_record.go notification_records P1 OPS-019、OPS-021 通知发送记录、失败原因和重试。
ticket.go tickets P1 OPS-022 工单主表。
ticket_transition.go ticket_transitions P1 OPS-022 工单状态流转记录。
ticket_comment.go ticket_comments P1 OPS-022、OPS-026 工单处理记录和附件。
ticket_sla_record.go ticket_sla_records P1/P3 OPS-022、运营治理 工单 SLA 和处理时长统计。
ticket_dispatch_rule.go ticket_dispatch_rules P1 OPS-019、OPS-022 自动派单规则。

核心字段:

  • notification_recordschannelalert_idincident_idreceiversend_statusretry_countprovider_codeerror_messagesent_at
  • ticketsticket_notitlesource_typesource_idalert_idincident_idresource_idassignee_idstatuspriorityclosed_at
  • ticket_transitionsticket_idfrom_statusto_statusoperator_idreasontrace_id
  • ticket_dispatch_rulesnamematch_exprassignee_typeassignee_idstatus

规则:

  • 通知失败不阻断告警确认和工单流转。
  • 同一告警不能重复自动创建多个未关闭工单。
  • 工单非法流转返回 STATE_CONFLICT

12. 资产、机房与 3D 接口模型

server/internal/models/asset/
  data_center.go
  room.go
  rack.go
  rack_unit.go
  asset.go
  environment_device.go
文件 表名 阶段 对应需求 职责
data_center.go data_centers P2首期接口 OPS-023 数据中心层级。
room.go rooms P2首期接口 OPS-023 机房、楼层和状态。
rack.go racks P2首期接口 OPS-024 机柜坐标、容量和状态。
rack_unit.go rack_units P2首期接口 OPS-024 U 位占用和资源/资产绑定。
asset.go assets P2 OPS-025 资产台账。
environment_device.go environment_devices P2 OPS-012、OPS-023 动环设备和机房关联。

3D 机房接口规则:

  • room3d 返回聚合 DTO不直接暴露内部 GORM 模型。
  • 必须返回数据更新时间。
  • 资产未绑定监控资源时,接口返回 bindStatus=unbound,不影响机柜结构展示。
  • 数据权限过滤在 logic/room3d/service.go 中执行。

13. 拓扑、IPAM、流量与知识库模型

server/internal/models/topology/
  topology_map.go
  topology_node.go
  topology_link.go

server/internal/models/ipam/
  ip_subnet.go
  ip_address.go
  ip_scan_task.go
  ip_change_record.go

server/internal/models/traffic/
  network_link.go
  traffic_policy.go
  traffic_anomaly.go

server/internal/models/knowledge/
  knowledge_category.go
  knowledge_article.go
  knowledge_relation.go
  knowledge_audit.go

这些模型主要属于 P2

  • topology_*OPS-013网络拓扑、业务拓扑和资源关系视图。
  • ip_*OPS-016、OPS-017子网、IP、扫描、冲突和变更。
  • traffic_*OPS-014、OPS-015链路、应用/协议策略、流量异常。
  • knowledge_*OPS-026知识分类、条目、关联检测点和审核日志。

实现建议:

  • 首期可只使用 resource_relations 支撑基础拓扑和业务视图。
  • P2 再迁移完整拓扑、IPAM、流量和知识库表。
  • 未获现场授权前,不执行生产网段扫描。

14. 报表、大屏、权限与审计模型

server/internal/models/report/
  report_template.go
  report_job.go
  report_export.go
  dashboard.go
  dashboard_widget.go

server/internal/models/iam/
  organization.go
  user.go
  role.go
  user_role.go
  role_permission.go
  data_scope.go

server/internal/models/audit/
  audit_log.go
  system_log.go
文件 表名 阶段 对应需求 职责
report_template.go report_templates P1 OPS-027 报表模板和查询结构。
report_job.go report_jobs P1 OPS-027 报表生成任务。
report_export.go report_exports P1 OPS-027 导出文件记录。
dashboard.go dashboards P1 OPS-001、OPS-028 首页模块和大屏配置。
dashboard_widget.go dashboard_widgets P1 OPS-001、OPS-028 大屏组件数据源和布局。
organization.go organizations P1 OPS-029、OPS-030 组织部门。
user.go users P1 OPS-029、OPS-030 用户账号。
role.go roles P1 OPS-029 角色。
user_role.go user_roles P1 OPS-029 用户角色关联。
role_permission.go role_permissions P1 OPS-029 功能权限。
data_scope.go data_scopes P1 OPS-029 数据权限范围。
audit_log.go audit_logs P1 全部关键操作 审计日志。
system_log.go system_logs P1 OPS-030 系统运行日志查询。

审计必写动作:

  • 资源新增、修改、停用、退役。
  • 凭据引用变更。
  • 告警确认、忽略、恢复、失效、派单。
  • 屏蔽、抑制、升级、通知策略变更。
  • 工单接单、转交、撤回、挂起、重启、关闭。
  • 权限、角色、数据权限变更。
  • 报表导出和敏感数据查看。

15. Logic 文件设计

server/internal/logic/
  response/
    response.go
    errors.go
    trace.go
  statemachine/
    resource.go
    collector.go
    raw_event.go
    alert.go
    incident.go
    notification.go
    ticket.go
  resource/
    dto.go
    service.go
  metric/
    dto.go
    service.go
    tsdb_adapter.go
  collector/
    dto.go
    service.go
    rescue.go
  event/
    dto.go
    receiver.go
    parser.go
    replay.go
  alert/
    dto.go
    service.go
    evaluator.go
    dedup.go
    silence.go
    escalation.go
  notification/
    dto.go
    service.go
    retry.go
    channel.go
  ticket/
    dto.go
    service.go
    transition.go
    dispatch.go
  asset/
    dto.go
    service.go
  report/
    dto.go
    service.go
    export.go
  dashboard/
    dto.go
    service.go
  iam/
    dto.go
    service.go
    permission.go
    data_scope.go
  audit/
    dto.go
    service.go
  room3d/
    dto.go
    service.go

规则:

  • dto.go 定义请求和响应结构,不直接向前端暴露 GORM 模型。
  • service.go 做业务编排、权限判断、状态机调用和审计记录。
  • rescue.go 处理失败救援,例如采集失败、通知失败、派单失败。
  • tsdb_adapter.go 是 TDengine 访问边界。
  • statemachine/*.go 只定义状态、合法迁移和校验方法。

16. Router 文件设计

统一前缀:

/{ServiceKey}/v1

后续服务键建议从模板的 Sample 调整为 OPS

server/internal/routers/
  register.go
  resource.go
  metric.go
  collector.go
  event.go
  alert.go
  notification.go
  ticket.go
  asset.go
  topology.go
  ipam.go
  traffic.go
  knowledge.go
  report.go
  dashboard.go
  iam.go
  audit.go
  room3d.go

Router 规则:

  • register.go 只负责调用各业务域注册函数。
  • 每个业务域一个 RegisterXxxRoutes
  • 写操作挂鉴权中间件。
  • 只做参数绑定和基础校验,业务校验放到 logic/
  • 不在 Router 中直接调用 impl.DBService

17. REST API 设计

17.1 统一响应

成功响应:

{
  "code": "OK",
  "message": "成功",
  "traceId": "01HX...",
  "suggestion": "",
  "data": {}
}

错误响应:

{
  "code": "COLLECT_AUTH_FAILED",
  "message": "凭据不可用,请检查凭据引用和设备权限",
  "traceId": "01HX...",
  "suggestion": "修改凭据后重新执行采集任务",
  "data": {
    "currentStatus": "failed"
  }
}

分页响应:

{
  "code": "OK",
  "message": "成功",
  "traceId": "01HX...",
  "data": {
    "total": 100,
    "page": 1,
    "size": 20,
    "list": []
  }
}

17.2 资源与业务系统

GET    /resources
POST   /resources
GET    /resources/:id
PUT    /resources/:id
POST   /resources/:id/enable
POST   /resources/:id/disable
POST   /resources/:id/maintenance
POST   /resources/:id/decommission
GET    /resources/:id/metrics
GET    /resources/:id/alerts
GET    /resources/:id/collector-runs

GET    /resource-types
POST   /resource-types
GET    /business-systems
POST   /business-systems
GET    /business-systems/:id/health
GET    /business-systems/:id/resources

17.3 指标与时序

GET    /metric-templates
POST   /metric-templates
GET    /metric-definitions
POST   /metric-definitions
GET    /metric-series
POST   /metrics/query
POST   /metrics/aggregate
POST   /metrics/topn
GET    /metric-retention-policies
POST   /metric-retention-policies

TSDBAdapter 接口:

// TSDBAdapter 定义 OPS 访问 TDengine 的唯一业务入口。
// 业务逻辑只能通过该接口读写时序样本,不能散落 TDengine 专有 SQL。
type TSDBAdapter interface {
    WriteBatch(ctx context.Context, samples []MetricSample) error
    QueryRange(ctx context.Context, req QueryRangeRequest) (QueryRangeReply, error)
    Aggregate(ctx context.Context, req AggregateRequest) (AggregateReply, error)
    TopN(ctx context.Context, req TopNRequest) (TopNReply, error)
    CheckHealth(ctx context.Context) error
}

17.4 采集与发现

GET    /collector-tasks
POST   /collector-tasks
GET    /collector-tasks/:id
PUT    /collector-tasks/:id
POST   /collector-tasks/:id/enable
POST   /collector-tasks/:id/disable
POST   /collector-tasks/:id/run-now
GET    /collector-tasks/:id/runs

GET    /collector-runs
GET    /collector-runs/:id

GET    /discovery-tasks
POST   /discovery-tasks
POST   /discovery-tasks/:id/run-now
GET    /discovery-results

GET    /probe-targets
POST   /probe-targets
PUT    /probe-targets/:id

17.5 事件、Syslog 与 Trap

POST   /events/raw
GET    /events/raw
GET    /events/raw/:id
POST   /events/raw/:id/replay
POST   /events/replay-jobs

GET    /syslog-rules
POST   /syslog-rules
PUT    /syslog-rules/:id

GET    /trap-dictionaries
POST   /trap-dictionaries
PUT    /trap-dictionaries/:id
POST   /trap-dictionaries/import

17.6 告警与事件治理

GET    /alerts
GET    /alerts/:id
POST   /alerts/:id/ack
POST   /alerts/:id/ignore
POST   /alerts/:id/recover
POST   /alerts/:id/expire
POST   /alerts/:id/dispatch-ticket
GET    /alerts/:id/timeline
GET    /alerts/:id/notifications
GET    /alerts/:id/audits

GET    /alert-rules
POST   /alert-rules
PUT    /alert-rules/:id
POST   /alert-rules/:id/enable
POST   /alert-rules/:id/disable

GET    /silence-policies
POST   /silence-policies
PUT    /silence-policies/:id

GET    /dedup-rules
POST   /dedup-rules

GET    /correlation-rules
POST   /correlation-rules

GET    /escalation-policies
POST   /escalation-policies

GET    /incidents
GET    /incidents/:id
POST   /incidents/:id/assign
POST   /incidents/:id/start
POST   /incidents/:id/suspend
POST   /incidents/:id/resolve
POST   /incidents/:id/close

17.7 通知与工单

GET    /notification-policies
POST   /notification-policies
PUT    /notification-policies/:id

GET    /notification-templates
POST   /notification-templates
PUT    /notification-templates/:id

GET    /notification-records
GET    /notification-records/:id
POST   /notification-records/:id/retry

GET    /tickets
POST   /tickets
GET    /tickets/:id
POST   /tickets/:id/accept
POST   /tickets/:id/start
POST   /tickets/:id/transfer
POST   /tickets/:id/suspend
POST   /tickets/:id/restart
POST   /tickets/:id/withdraw
POST   /tickets/:id/close
GET    /tickets/:id/transitions
GET    /tickets/:id/comments
POST   /tickets/:id/comments

GET    /ticket-dispatch-rules
POST   /ticket-dispatch-rules
PUT    /ticket-dispatch-rules/:id

17.8 资产、机房与 3D 接口

内部资产管理:

GET    /data-centers
POST   /data-centers
GET    /rooms
POST   /rooms
GET    /racks
POST   /racks
GET    /rack-units
PUT    /rack-units/:id
GET    /assets
POST   /assets
PUT    /assets/:id
POST   /assets/:id/bind-resource

外包 3D 前端专用接口:

GET    /room3d/data-centers
GET    /room3d/data-centers/:id/rooms
GET    /room3d/rooms/:id/racks
GET    /room3d/racks/:id/units
GET    /room3d/resources/:id/status
GET    /room3d/summary

17.9 P2 接口规划

拓扑:

GET    /topologies
POST   /topologies
GET    /topologies/:id/nodes
GET    /topologies/:id/links

IPAM

GET    /ipam/subnets
POST   /ipam/subnets
GET    /ipam/addresses
POST   /ipam/scan-tasks
GET    /ipam/change-records

流量:

GET    /traffic/links
POST   /traffic/links
GET    /traffic/policies
POST   /traffic/policies
GET    /traffic/anomalies

知识库:

GET    /knowledge/categories
POST   /knowledge/categories
GET    /knowledge/articles
POST   /knowledge/articles
POST   /knowledge/articles/:id/publish
POST   /knowledge/articles/:id/review

17.10 报表、大屏、权限与审计

GET    /report-templates
POST   /report-templates
POST   /report-jobs
GET    /report-jobs
GET    /report-jobs/:id
POST   /report-jobs/:id/export
GET    /report-exports/:id/download

GET    /dashboards
POST   /dashboards
PUT    /dashboards/:id
GET    /dashboards/:id/widgets
POST   /dashboards/:id/widgets
PUT    /dashboard-widgets/:id

GET    /iam/organizations
POST   /iam/organizations
GET    /iam/users
POST   /iam/users
POST   /iam/users/:id/enable
POST   /iam/users/:id/disable
GET    /iam/roles
POST   /iam/roles
PUT    /iam/roles/:id/permissions
PUT    /iam/data-scopes/:id

GET    /audit-logs
GET    /system-logs

18. 注释规范

后续生成 Go 文件时使用中文注释,注释要说明业务意图,不重复代码字面含义。

推荐注释位置:

  • 每个模型结构体顶部说明表职责、阶段和对应 OPS 编号。
  • 每个状态机文件顶部说明状态来源和禁止绕过规则。
  • 每个 Service 的公开方法说明业务动作和审计要求。
  • 每个错误码说明触发场景、用户提示和建议动作。
  • TDengine 适配器说明为什么不能在业务逻辑中直接写 TDengine SQL。

示例:

// Resource 是 OPS 的统一监控资源主表。
// 覆盖 OPS-002 至 OPS-014、OPS-031用于承载主机、网络设备、数据库、
// 虚拟化、URL/API 等被监控对象。状态流转必须通过 statemachine 校验。
type Resource struct {
    models.BaseModel
}

不建议的注释:

// Name 是名称
Name string

19. 实施顺序建议

第一批实现:

models/base.go
models/resource/
models/metric/
models/collector/
models/event/
models/alert/
models/notification/
models/ticket/
models/iam/
models/audit/
logic/response/
logic/statemachine/
routers/register.go

第二批实现:

models/report/
models/asset/
logic/report/
logic/dashboard/
logic/room3d/
routers/report.go
routers/dashboard.go
routers/room3d.go

第三批实现:

models/topology/
models/ipam/
models/traffic/
models/knowledge/
logic/topology/
logic/ipam/
logic/traffic/
logic/knowledge/

20. 自审结论

  • 本设计覆盖 OPS-001 至 OPS-033 的模型和接口边界。
  • 首期闭环与 P2/P3 预留已分离。
  • 未引入旧项目名。
  • 未要求修改 templates/
  • 未使用 Linux 命令示例。
  • 状态机、统一响应、TDengine 适配层、故障救援和审计边界均有明确落点。