deploy.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package protocol
  2. // ============================================================
  3. // 部署指令/分片 (Cloud → Edge)
  4. // ============================================================
  5. // Pack_DeployCmd 部署指令或分片
  6. type Pack_DeployCmd struct {
  7. Header
  8. Data DeployCmdData `json:"data"`
  9. }
  10. type DeployCmdData struct {
  11. Version string `json:"Version"` // 目标版本号
  12. FileName string `json:"FileName"` // 文件名, e.g. "ipole"
  13. TotalChunks int `json:"TotalChunks"` // 分片总数(Action="start"时有效)
  14. ChunkSize int `json:"ChunkSize"` // 单片大小(Action="start"时有效)
  15. ChunkIndex int `json:"ChunkIndex"` // 当前分片索引(Action="chunk"时有效)
  16. MD5 string `json:"MD5"` // 完整文件 MD5(Action="start"时有效)
  17. Data string `json:"Data"` // base64 编码的分片数据(Action="chunk"时有效)
  18. Action string `json:"Action"` // "start" | "chunk" | "abort"
  19. }
  20. func (o *Pack_DeployCmd) EnCodeCmd(id, gid string, seq uint64, version, fileName, md5 string, totalChunks, chunkSize int) (string, error) {
  21. o.Header.SetHeaderData(id, gid, seq)
  22. o.Data.Version = version
  23. o.Data.FileName = fileName
  24. o.Data.TotalChunks = totalChunks
  25. o.Data.ChunkSize = chunkSize
  26. o.Data.MD5 = md5
  27. o.Data.Action = "start"
  28. return json.MarshalToString(o)
  29. }
  30. func (o *Pack_DeployCmd) EnCodeChunk(id, gid string, seq uint64, version string, chunkIndex int, data string) (string, error) {
  31. o.Header.SetHeaderData(id, gid, seq)
  32. o.Data.Version = version
  33. o.Data.ChunkIndex = chunkIndex
  34. o.Data.Data = data
  35. o.Data.Action = "chunk"
  36. return json.MarshalToString(o)
  37. }
  38. func (o *Pack_DeployCmd) EnCodeAbort(id, gid string, seq uint64, version string) (string, error) {
  39. o.Header.SetHeaderData(id, gid, seq)
  40. o.Data.Version = version
  41. o.Data.Action = "abort"
  42. return json.MarshalToString(o)
  43. }
  44. func (o *Pack_DeployCmd) DeCode(message string) error {
  45. return json.UnmarshalFromString(message, o)
  46. }
  47. // ============================================================
  48. // 部署执行 ACK (Edge → Cloud)
  49. // ============================================================
  50. // Pack_DeployAck 部署执行结果(文件接收+替换的成功/失败)
  51. type Pack_DeployAck struct {
  52. Header
  53. Data DeployAckData `json:"data"`
  54. }
  55. type DeployAckData struct {
  56. Version string `json:"Version"`
  57. Success bool `json:"Success"`
  58. Error string `json:"Error"` // 失败时填写原因
  59. }
  60. func (o *Pack_DeployAck) EnCode(id, gid string, seq uint64, version string, success bool, errMsg string) (string, error) {
  61. o.Header.SetHeaderData(id, gid, seq)
  62. o.Data.Version = version
  63. o.Data.Success = success
  64. o.Data.Error = errMsg
  65. return json.MarshalToString(o)
  66. }
  67. func (o *Pack_DeployAck) DeCode(message string) error {
  68. return json.UnmarshalFromString(message, o)
  69. }
  70. // ============================================================
  71. // 健康检测结果 (Edge → Cloud)
  72. // ============================================================
  73. // Pack_HealthCheck 健康检测结果上报
  74. type Pack_HealthCheck struct {
  75. Header
  76. Data HealthCheckData `json:"data"`
  77. }
  78. type HealthCheckData struct {
  79. Version string `json:"Version"`
  80. Phase int `json:"Phase"` // 1 或 2
  81. Success bool `json:"Success"` // 当前 Phase 是否全部通过
  82. Timestamp int64 `json:"Timestamp"`
  83. Checks []HealthCheck `json:"Checks"`
  84. }
  85. type HealthCheck struct {
  86. Name string `json:"Name"` // "process" | "mqtt" | "redis" | "serial" | "modbus" | "device_online"
  87. Status string `json:"Status"` // "ok" | "fail" | "pending" | "timeout"
  88. Detail string `json:"Detail"` // 人类可读的详情
  89. DurationMs int `json:"DurationMs"` // 检测耗时ms
  90. }
  91. func (o *Pack_HealthCheck) EnCode(id, gid string, seq uint64, version string, phase int, success bool, checks []HealthCheck) (string, error) {
  92. o.Header.SetHeaderData(id, gid, seq)
  93. o.Data.Version = version
  94. o.Data.Phase = phase
  95. o.Data.Success = success
  96. o.Data.Timestamp = BJNow().Unix()
  97. o.Data.Checks = checks
  98. return json.MarshalToString(o)
  99. }
  100. func (o *Pack_HealthCheck) DeCode(message string) error {
  101. return json.UnmarshalFromString(message, o)
  102. }