You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

datamap.go 11 kB

10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. package stgmod
  2. import (
  3. "time"
  4. "gitlink.org.cn/cloudream/common/pkgs/types"
  5. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  6. "gitlink.org.cn/cloudream/common/utils/serder"
  7. )
  8. // 系统事件
  9. type SysEvent struct {
  10. Timestamp time.Time `json:"timestamp"`
  11. Source SysEventSource `json:"source"`
  12. Body SysEventBody `json:"body"`
  13. }
  14. // 事件源
  15. type SysEventSource interface {
  16. GetSourceType() string
  17. }
  18. var _ = serder.UseTypeUnionInternallyTagged(types.Ref(types.NewTypeUnion[SysEventSource](
  19. (*SourceCoordinator)(nil),
  20. (*SourceScanner)(nil),
  21. (*SourceHub)(nil),
  22. )), "type")
  23. type SourceCoordinator struct {
  24. serder.Metadata `union:"Coordinator"`
  25. Type string `json:"type"`
  26. }
  27. func (s *SourceCoordinator) GetSourceType() string {
  28. return "Coordinator"
  29. }
  30. type SourceScanner struct {
  31. serder.Metadata `union:"Scanner"`
  32. Type string `json:"type"`
  33. }
  34. func (s *SourceScanner) GetSourceType() string {
  35. return "Scanner"
  36. }
  37. type SourceHub struct {
  38. serder.Metadata `union:"Hub"`
  39. Type string `json:"type"`
  40. HubID cdssdk.HubID `json:"hubID"`
  41. HubName string `json:"hubName"`
  42. }
  43. func (s *SourceHub) GetSourceType() string {
  44. return "Hub"
  45. }
  46. // 事件体
  47. type SysEventBody interface {
  48. GetBodyType() string
  49. }
  50. var _ = serder.UseTypeUnionInternallyTagged(types.Ref(types.NewTypeUnion[SysEventBody](
  51. (*BodyNewHub)(nil),
  52. (*BodyHubUpdated)(nil),
  53. (*BodyHubDeleted)(nil),
  54. (*BodyNewStorage)(nil),
  55. (*BodyStorageUpdated)(nil),
  56. (*BodyStorageDeleted)(nil),
  57. (*BodyStorageStats)(nil),
  58. (*BodyHubTransferStats)(nil),
  59. (*BodyHubStorageTransferStats)(nil),
  60. (*BodyBlockTransfer)(nil),
  61. (*BodyBlockDistribution)(nil),
  62. (*BodyNewObject)(nil),
  63. (*BodyObjectUpdated)(nil),
  64. (*BodyObjectDeleted)(nil),
  65. (*BodyNewPackage)(nil),
  66. (*BodyPackageDeleted)(nil),
  67. (*BodyNewBucket)(nil),
  68. (*BodyBucketDeleted)(nil),
  69. )), "type")
  70. // 新增Hub的事件
  71. type BodyNewHub struct {
  72. serder.Metadata `union:"NewHub"`
  73. Type string `json:"type"`
  74. Info cdssdk.Hub `json:"info"`
  75. }
  76. func (b *BodyNewHub) GetBodyType() string {
  77. return "NewHub"
  78. }
  79. // Hub信息更新的事件
  80. type BodyHubUpdated struct {
  81. serder.Metadata `union:"HubUpdated"`
  82. Type string `json:"type"`
  83. Info cdssdk.Hub `json:"info"`
  84. }
  85. func (b *BodyHubUpdated) GetBodyType() string {
  86. return "HubUpdated"
  87. }
  88. // Hub删除的事件
  89. type BodyHubDeleted struct {
  90. serder.Metadata `union:"HubDeleted"`
  91. Type string `json:"type"`
  92. HubID cdssdk.HubID `json:"hubID"`
  93. }
  94. func (b *BodyHubDeleted) GetBodyType() string {
  95. return "HubDeleted"
  96. }
  97. // 新增Storage的事件
  98. type BodyNewStorage struct {
  99. serder.Metadata `union:"NewStorage"`
  100. Info cdssdk.Storage `json:"info"`
  101. Type string `json:"type"`
  102. }
  103. func (b *BodyNewStorage) GetBodyType() string {
  104. return "NewStorage"
  105. }
  106. // Storage信息更新的事件
  107. type BodyStorageUpdated struct {
  108. serder.Metadata `union:"StorageUpdated"`
  109. Type string `json:"type"`
  110. Info cdssdk.Storage `json:"info"`
  111. }
  112. func (b *BodyStorageUpdated) GetBodyType() string {
  113. return "StorageUpdated"
  114. }
  115. // Storage删除的事件
  116. type BodyStorageDeleted struct {
  117. serder.Metadata `union:"StorageDeleted"`
  118. Type string `json:"type"`
  119. StorageID cdssdk.StorageID `json:"storageID"`
  120. }
  121. func (b *BodyStorageDeleted) GetBodyType() string {
  122. return "StorageDeleted"
  123. }
  124. // Storage统计信息的事件
  125. type BodyStorageStats struct {
  126. serder.Metadata `union:"StorageStats"`
  127. Type string `json:"type"`
  128. StorageID cdssdk.StorageID `json:"storageID"`
  129. DataCount int64 `json:"dataCount"`
  130. }
  131. func (b *BodyStorageStats) GetBodyType() string {
  132. return "StorageStats"
  133. }
  134. // Hub数据传输统计信息的事件
  135. type BodyHubTransferStats struct {
  136. serder.Metadata `union:"HubTransferStats"`
  137. Type string `json:"type"`
  138. SourceHubID cdssdk.HubID `json:"sourceHubID"`
  139. TargetHubID cdssdk.HubID `json:"targetHubID"`
  140. Send DataTrans `json:"send"`
  141. StartTimestamp time.Time `json:"startTimestamp"`
  142. EndTimestamp time.Time `json:"endTimestamp"`
  143. }
  144. func (b *BodyHubTransferStats) GetBodyType() string {
  145. return "HubTransferStats"
  146. }
  147. type DataTrans struct {
  148. TotalTransfer int64 `json:"totalTransfer"`
  149. RequestCount int64 `json:"requestCount"`
  150. FailedRequestCount int64 `json:"failedRequestCount"`
  151. AvgTransfer int64 `json:"avgTransfer"`
  152. MaxTransfer int64 `json:"maxTransfer"`
  153. MinTransfer int64 `json:"minTransfer"`
  154. }
  155. // Hub和Storage数据传输统计信息的事件
  156. type BodyHubStorageTransferStats struct {
  157. serder.Metadata `union:"HubStorageTransferStats"`
  158. Type string `json:"type"`
  159. HubID cdssdk.HubID `json:"hubID"`
  160. StorageID cdssdk.StorageID `json:"storageID"`
  161. Send DataTrans `json:"send"`
  162. Receive DataTrans `json:"receive"`
  163. StartTimestamp time.Time `json:"startTimestamp"`
  164. EndTimestamp time.Time `json:"endTimestamp"`
  165. }
  166. func (b *BodyHubStorageTransferStats) GetBodyType() string {
  167. return "HubStorageTransferStats"
  168. }
  169. // 块传输的事件
  170. type BodyBlockTransfer struct {
  171. serder.Metadata `union:"BlockTransfer"`
  172. Type string `json:"type"`
  173. ObjectID cdssdk.ObjectID `json:"objectID"`
  174. PackageID cdssdk.PackageID `json:"packageID"`
  175. BlockChanges []BlockChange `json:"blockChanges"`
  176. }
  177. func (b *BodyBlockTransfer) GetBodyType() string {
  178. return "BlockTransfer"
  179. }
  180. // 块变化类型
  181. type BlockChange interface {
  182. GetBlockChangeType() string
  183. }
  184. var _ = serder.UseTypeUnionInternallyTagged(types.Ref(types.NewTypeUnion[BlockChange](
  185. (*BlockChangeClone)(nil),
  186. (*BlockChangeDeleted)(nil),
  187. (*BlockChangeEnDecode)(nil),
  188. // (*BlockChangeUpdated)(nil),
  189. )), "type")
  190. type Block struct {
  191. BlockType string `json:"blockType"`
  192. Index string `json:"index"`
  193. StorageID cdssdk.StorageID `json:"storageID"`
  194. }
  195. type DataTransfer struct {
  196. SourceStorageID cdssdk.StorageID `json:"sourceStorageID"`
  197. TargetStorageID cdssdk.StorageID `json:"targetStorageID"`
  198. DataTransferCount string `json:"dataTransferCount"`
  199. }
  200. type BlockChangeClone struct {
  201. serder.Metadata `union:"BlockChangeClone"`
  202. Type string `json:"type"`
  203. BlockType string `json:"blockType"`
  204. Index string `json:"index"`
  205. SourceStorageID cdssdk.StorageID `json:"sourceStorageID"`
  206. TargetStorageID cdssdk.StorageID `json:"targetStorageID"`
  207. DataTransferCount string `json:"dataTransferCount"`
  208. }
  209. func (b *BlockChangeClone) GetBlockChangeType() string {
  210. return "Clone"
  211. }
  212. type BlockChangeDeleted struct {
  213. serder.Metadata `union:"BlockChangeDeleted"`
  214. Type string `json:"type"`
  215. Index string `json:"index"`
  216. StorageID string `json:"storageID"`
  217. }
  218. func (b *BlockChangeDeleted) GetBlockChangeType() string {
  219. return "Deleted"
  220. }
  221. type BlockChangeEnDecode struct {
  222. serder.Metadata `union:"BlockChangeEnDecode"`
  223. Type string `json:"type"`
  224. SourceBlocks []Block `json:"sourceBlocks,omitempty"`
  225. TargetBlocks []Block `json:"targetBlocks,omitempty"`
  226. DataTransfers []DataTransfer `json:"dataTransfers,omitempty"`
  227. }
  228. func (b *BlockChangeEnDecode) GetBlockChangeType() string {
  229. return "EnDecode"
  230. }
  231. // TODO 块更新应该是说对象被重新上传,此时事件内应该包含全部对象块的信息,因此应该使用ObjectUpdated事件
  232. // type BlockChangeUpdated struct {
  233. // serder.Metadata `union:"BlockChangeUpdated"`
  234. // Type string `json:"type"`
  235. // Blocks []Block `json:"blocks"`
  236. // }
  237. // func (b *BlockChangeUpdated) GetBlockChangeType() string {
  238. // return "Updated"
  239. // }
  240. // 块分布的事件
  241. type BodyBlockDistribution struct {
  242. serder.Metadata `union:"BlockDistribution"`
  243. Type string `json:"type"`
  244. ObjectID cdssdk.ObjectID `json:"objectID"`
  245. PackageID cdssdk.PackageID `json:"packageID"`
  246. Path string `json:"path"`
  247. Size int64 `json:"size"`
  248. FileHash string `json:"fileHash"`
  249. FaultTolerance string `json:"faultTolerance"`
  250. Redundancy string `json:"redundancy"`
  251. AvgAccessCost string `json:"avgAccessCost"`
  252. BlockDistribution []BlockDistributionObjectInfo `json:"blockDistribution"`
  253. DataTransfers []DataTransfer `json:"dataTransfers"`
  254. }
  255. func (b *BodyBlockDistribution) GetBodyType() string {
  256. return "BlockDistribution"
  257. }
  258. type BlockDistributionObjectInfo struct {
  259. Type string `json:"type"`
  260. Index string `json:"index"`
  261. StorageID string `json:"storageID"`
  262. }
  263. // 新增Object的事件
  264. type BodyNewObject struct {
  265. serder.Metadata `union:"NewObject"`
  266. Type string `json:"type"`
  267. Info cdssdk.Object `json:"info"`
  268. BlockDistribution []BlockDistributionObjectInfo `json:"blockDistribution"`
  269. }
  270. func (b *BodyNewObject) GetBodyType() string {
  271. return "NewObject"
  272. }
  273. // Object更新的事件
  274. type BodyObjectUpdated struct {
  275. serder.Metadata `union:"ObjectUpdated"`
  276. Type string `json:"type"`
  277. Info cdssdk.Object `json:"info"`
  278. BlockDistribution []BlockDistributionObjectInfo `json:"blockDistribution"`
  279. }
  280. func (b *BodyObjectUpdated) GetBodyType() string {
  281. return "ObjectUpdated"
  282. }
  283. // Object删除的事件
  284. type BodyObjectDeleted struct {
  285. serder.Metadata `union:"ObjectDeleted"`
  286. Type string `json:"type"`
  287. ObjectID cdssdk.ObjectID `json:"objectID"`
  288. }
  289. func (b *BodyObjectDeleted) GetBodyType() string {
  290. return "ObjectDeleted"
  291. }
  292. // 新增Package的事件
  293. type BodyNewPackage struct {
  294. serder.Metadata `union:"NewPackage"`
  295. Type string `json:"type"`
  296. Info cdssdk.Package `json:"info"`
  297. }
  298. func (b *BodyNewPackage) GetBodyType() string {
  299. return "NewPackage"
  300. }
  301. // Package删除的事件
  302. type BodyPackageDeleted struct {
  303. serder.Metadata `union:"PackageDeleted"`
  304. Type string `json:"type"`
  305. PackageID cdssdk.PackageID `json:"packageID"`
  306. }
  307. func (b *BodyPackageDeleted) GetBodyType() string {
  308. return "PackageDeleted"
  309. }
  310. // 新增Bucket的事件
  311. type BodyNewBucket struct {
  312. serder.Metadata `union:"NewBucket"`
  313. Type string `json:"type"`
  314. Info cdssdk.Bucket `json:"info"`
  315. }
  316. func (b *BodyNewBucket) GetBodyType() string {
  317. return "NewBucket"
  318. }
  319. // Bucket删除的事件
  320. type BodyBucketDeleted struct {
  321. serder.Metadata `union:"BucketDeleted"`
  322. Type string `json:"type"`
  323. BucketID cdssdk.BucketID `json:"bucketID"`
  324. }
  325. func (b *BodyBucketDeleted) GetBodyType() string {
  326. return "BucketDeleted"
  327. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。