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.

package.go 7.2 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. package coordinator
  2. import (
  3. "time"
  4. "gitlink.org.cn/cloudream/common/pkgs/mq"
  5. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  6. "gitlink.org.cn/cloudream/storage/common/pkgs/db2/model"
  7. )
  8. type PackageService interface {
  9. GetPackage(msg *GetPackage) (*GetPackageResp, *mq.CodeMessage)
  10. GetPackageByName(msg *GetPackageByName) (*GetPackageByNameResp, *mq.CodeMessage)
  11. CreatePackage(msg *CreatePackage) (*CreatePackageResp, *mq.CodeMessage)
  12. UpdatePackage(msg *UpdatePackage) (*UpdatePackageResp, *mq.CodeMessage)
  13. DeletePackage(msg *DeletePackage) (*DeletePackageResp, *mq.CodeMessage)
  14. ClonePackage(msg *ClonePackage) (*ClonePackageResp, *mq.CodeMessage)
  15. GetPackageCachedStorages(msg *GetPackageCachedStorages) (*GetPackageCachedStoragesResp, *mq.CodeMessage)
  16. }
  17. // 获取Package基本信息
  18. var _ = Register(Service.GetPackage)
  19. type GetPackage struct {
  20. mq.MessageBodyBase
  21. UserID cdssdk.UserID `json:"userID"`
  22. PackageID cdssdk.PackageID `json:"packageID"`
  23. }
  24. type GetPackageResp struct {
  25. mq.MessageBodyBase
  26. model.Package
  27. }
  28. func NewGetPackage(userID cdssdk.UserID, packageID cdssdk.PackageID) *GetPackage {
  29. return &GetPackage{
  30. UserID: userID,
  31. PackageID: packageID,
  32. }
  33. }
  34. func NewGetPackageResp(pkg model.Package) *GetPackageResp {
  35. return &GetPackageResp{
  36. Package: pkg,
  37. }
  38. }
  39. func (client *Client) GetPackage(msg *GetPackage) (*GetPackageResp, error) {
  40. return mq.Request(Service.GetPackage, client.rabbitCli, msg)
  41. }
  42. // 根据名称获取Package
  43. var _ = Register(Service.GetPackageByName)
  44. type GetPackageByName struct {
  45. mq.MessageBodyBase
  46. UserID cdssdk.UserID `json:"userID"`
  47. BucketName string `json:"bucketName"`
  48. PackageName string `json:"packageName"`
  49. }
  50. type GetPackageByNameResp struct {
  51. mq.MessageBodyBase
  52. Package cdssdk.Package `json:"package"`
  53. }
  54. func ReqGetPackageByName(userID cdssdk.UserID, bucketName string, packageName string) *GetPackageByName {
  55. return &GetPackageByName{
  56. UserID: userID,
  57. BucketName: bucketName,
  58. PackageName: packageName,
  59. }
  60. }
  61. func NewGetPackageByNameResp(pkg cdssdk.Package) *GetPackageByNameResp {
  62. return &GetPackageByNameResp{
  63. Package: pkg,
  64. }
  65. }
  66. func (client *Client) GetPackageByName(msg *GetPackageByName) (*GetPackageByNameResp, error) {
  67. return mq.Request(Service.GetPackageByName, client.rabbitCli, msg)
  68. }
  69. // 创建一个Package
  70. var _ = Register(Service.CreatePackage)
  71. type CreatePackage struct {
  72. mq.MessageBodyBase
  73. UserID cdssdk.UserID `json:"userID"`
  74. BucketID cdssdk.BucketID `json:"bucketID"`
  75. Name string `json:"name"`
  76. }
  77. type CreatePackageResp struct {
  78. mq.MessageBodyBase
  79. Package cdssdk.Package `json:"package"`
  80. }
  81. func NewCreatePackage(userID cdssdk.UserID, bucketID cdssdk.BucketID, name string) *CreatePackage {
  82. return &CreatePackage{
  83. UserID: userID,
  84. BucketID: bucketID,
  85. Name: name,
  86. }
  87. }
  88. func NewCreatePackageResp(pkg cdssdk.Package) *CreatePackageResp {
  89. return &CreatePackageResp{
  90. Package: pkg,
  91. }
  92. }
  93. func (client *Client) CreatePackage(msg *CreatePackage) (*CreatePackageResp, error) {
  94. return mq.Request(Service.CreatePackage, client.rabbitCli, msg)
  95. }
  96. // 更新Package
  97. var _ = Register(Service.UpdatePackage)
  98. type UpdatePackage struct {
  99. mq.MessageBodyBase
  100. PackageID cdssdk.PackageID `json:"packageID"`
  101. Adds []AddObjectEntry `json:"adds"`
  102. }
  103. type UpdatePackageResp struct {
  104. mq.MessageBodyBase
  105. Added []cdssdk.Object `json:"added"`
  106. }
  107. type AddObjectEntry struct {
  108. Path string `json:"path"`
  109. Size int64 `json:"size,string"`
  110. FileHash cdssdk.FileHash `json:"fileHash"`
  111. UploadTime time.Time `json:"uploadTime"` // 开始上传文件的时间
  112. StorageIDs []cdssdk.StorageID `json:"storageIDs"`
  113. }
  114. func NewUpdatePackage(packageID cdssdk.PackageID, adds []AddObjectEntry) *UpdatePackage {
  115. return &UpdatePackage{
  116. PackageID: packageID,
  117. Adds: adds,
  118. }
  119. }
  120. func NewUpdatePackageResp(added []cdssdk.Object) *UpdatePackageResp {
  121. return &UpdatePackageResp{
  122. Added: added,
  123. }
  124. }
  125. func NewAddObjectEntry(path string, size int64, fileHash cdssdk.FileHash, uploadTime time.Time, stgIDs []cdssdk.StorageID) AddObjectEntry {
  126. return AddObjectEntry{
  127. Path: path,
  128. Size: size,
  129. FileHash: fileHash,
  130. UploadTime: uploadTime,
  131. StorageIDs: stgIDs,
  132. }
  133. }
  134. func (client *Client) UpdatePackage(msg *UpdatePackage) (*UpdatePackageResp, error) {
  135. return mq.Request(Service.UpdatePackage, client.rabbitCli, msg)
  136. }
  137. // 删除对象
  138. var _ = Register(Service.DeletePackage)
  139. type DeletePackage struct {
  140. mq.MessageBodyBase
  141. UserID cdssdk.UserID `json:"userID"`
  142. PackageID cdssdk.PackageID `json:"packageID"`
  143. }
  144. type DeletePackageResp struct {
  145. mq.MessageBodyBase
  146. }
  147. func NewDeletePackage(userID cdssdk.UserID, packageID cdssdk.PackageID) *DeletePackage {
  148. return &DeletePackage{
  149. UserID: userID,
  150. PackageID: packageID,
  151. }
  152. }
  153. func NewDeletePackageResp() *DeletePackageResp {
  154. return &DeletePackageResp{}
  155. }
  156. func (client *Client) DeletePackage(msg *DeletePackage) (*DeletePackageResp, error) {
  157. return mq.Request(Service.DeletePackage, client.rabbitCli, msg)
  158. }
  159. // 克隆Package
  160. var _ = Register(Service.ClonePackage)
  161. type ClonePackage struct {
  162. mq.MessageBodyBase
  163. UserID cdssdk.UserID `json:"userID"`
  164. PackageID cdssdk.PackageID `json:"packageID"`
  165. BucketID cdssdk.BucketID `json:"bucketID"`
  166. Name string `json:"name"`
  167. }
  168. type ClonePackageResp struct {
  169. mq.MessageBodyBase
  170. Package cdssdk.Package `json:"package"`
  171. }
  172. func ReqClonePackage(userID cdssdk.UserID, packageID cdssdk.PackageID, bucketID cdssdk.BucketID, name string) *ClonePackage {
  173. return &ClonePackage{
  174. UserID: userID,
  175. PackageID: packageID,
  176. BucketID: bucketID,
  177. Name: name,
  178. }
  179. }
  180. func RespClonePackage(pkg cdssdk.Package) *ClonePackageResp {
  181. return &ClonePackageResp{
  182. Package: pkg,
  183. }
  184. }
  185. func (client *Client) ClonePackage(msg *ClonePackage) (*ClonePackageResp, error) {
  186. return mq.Request(Service.ClonePackage, client.rabbitCli, msg)
  187. }
  188. // 根据PackageID获取object分布情况
  189. var _ = Register(Service.GetPackageCachedStorages)
  190. type GetPackageCachedStorages struct {
  191. mq.MessageBodyBase
  192. UserID cdssdk.UserID `json:"userID"`
  193. PackageID cdssdk.PackageID `json:"packageID"`
  194. }
  195. type PackageCachedStorageInfo struct {
  196. StorageID int64 `json:"storageID"`
  197. FileSize int64 `json:"fileSize"`
  198. ObjectCount int64 `json:"objectCount"`
  199. }
  200. type GetPackageCachedStoragesResp struct {
  201. mq.MessageBodyBase
  202. cdssdk.PackageCachingInfo
  203. }
  204. func ReqGetPackageCachedStorages(userID cdssdk.UserID, packageID cdssdk.PackageID) *GetPackageCachedStorages {
  205. return &GetPackageCachedStorages{
  206. UserID: userID,
  207. PackageID: packageID,
  208. }
  209. }
  210. func ReqGetPackageCachedStoragesResp(stgInfos []cdssdk.StoragePackageCachingInfo, packageSize int64) *GetPackageCachedStoragesResp {
  211. return &GetPackageCachedStoragesResp{
  212. PackageCachingInfo: cdssdk.PackageCachingInfo{
  213. StorageInfos: stgInfos,
  214. PackageSize: packageSize,
  215. },
  216. }
  217. }
  218. func (client *Client) GetPackageCachedStorages(msg *GetPackageCachedStorages) (*GetPackageCachedStoragesResp, error) {
  219. return mq.Request(Service.GetPackageCachedStorages, client.rabbitCli, msg)
  220. }

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