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.

models.go 1.5 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package stgmod
  2. import (
  3. "github.com/samber/lo"
  4. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  5. )
  6. type ObjectBlock struct {
  7. ObjectID cdssdk.ObjectID `db:"ObjectID" json:"objectID"`
  8. Index int `db:"Index" json:"index"`
  9. NodeID cdssdk.NodeID `db:"NodeID" json:"nodeID"` // 这个块应该在哪个节点上
  10. FileHash string `db:"FileHash" json:"fileHash"`
  11. }
  12. type ObjectDetail struct {
  13. Object cdssdk.Object `json:"object"`
  14. PinnedAt []cdssdk.NodeID `json:"pinnedAt"`
  15. Blocks []ObjectBlock `json:"blocks"`
  16. }
  17. func NewObjectDetail(object cdssdk.Object, pinnedAt []cdssdk.NodeID, blocks []ObjectBlock) ObjectDetail {
  18. return ObjectDetail{
  19. Object: object,
  20. PinnedAt: pinnedAt,
  21. Blocks: blocks,
  22. }
  23. }
  24. type GrouppedObjectBlock struct {
  25. ObjectID cdssdk.ObjectID
  26. Index int
  27. FileHash string
  28. NodeIDs []cdssdk.NodeID
  29. }
  30. func (o *ObjectDetail) GroupBlocks() []GrouppedObjectBlock {
  31. grps := make(map[int]GrouppedObjectBlock)
  32. for _, block := range o.Blocks {
  33. grp, ok := grps[block.Index]
  34. if !ok {
  35. grp = GrouppedObjectBlock{
  36. ObjectID: block.ObjectID,
  37. Index: block.Index,
  38. FileHash: block.FileHash,
  39. }
  40. }
  41. grp.NodeIDs = append(grp.NodeIDs, block.NodeID)
  42. grps[block.Index] = grp
  43. }
  44. return lo.Values(grps)
  45. }
  46. type LocalMachineInfo struct {
  47. NodeID *cdssdk.NodeID `json:"nodeID"`
  48. ExternalIP string `json:"externalIP"`
  49. LocalIP string `json:"localIP"`
  50. LocationID cdssdk.LocationID `json:"locationID"`
  51. }

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