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 4.6 kB

1 year ago
1 year ago
1 year ago
1 year ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. package cdssdk
  2. import (
  3. "database/sql/driver"
  4. "fmt"
  5. "time"
  6. "gitlink.org.cn/cloudream/common/pkgs/types"
  7. "gitlink.org.cn/cloudream/common/utils/serder"
  8. )
  9. const (
  10. ObjectPathSeperator = "/"
  11. )
  12. type NodeID int64
  13. type PackageID int64
  14. type ObjectID int64
  15. type UserID int64
  16. type BucketID int64
  17. type StorageID int64
  18. type LocationID int64
  19. /// TODO 将分散在各处的公共结构体定义集中到这里来
  20. type Redundancy interface {
  21. driver.Valuer
  22. }
  23. var RedundancyUnion = serder.UseTypeUnionInternallyTagged(types.Ref(types.NewTypeUnion[Redundancy](
  24. (*NoneRedundancy)(nil),
  25. (*RepRedundancy)(nil),
  26. (*ECRedundancy)(nil),
  27. )), "type")
  28. type NoneRedundancy struct {
  29. serder.Metadata `union:"none"`
  30. Type string `json:"type"`
  31. }
  32. func NewNoneRedundancy() *NoneRedundancy {
  33. return &NoneRedundancy{
  34. Type: "none",
  35. }
  36. }
  37. func (b *NoneRedundancy) Value() (driver.Value, error) {
  38. return serder.ObjectToJSONEx[Redundancy](b)
  39. }
  40. var DefaultRepRedundancy = *NewRepRedundancy(2)
  41. type RepRedundancy struct {
  42. serder.Metadata `union:"rep"`
  43. Type string `json:"type"`
  44. RepCount int `json:"repCount"`
  45. }
  46. func NewRepRedundancy(repCount int) *RepRedundancy {
  47. return &RepRedundancy{
  48. Type: "rep",
  49. RepCount: repCount,
  50. }
  51. }
  52. func (b *RepRedundancy) Value() (driver.Value, error) {
  53. return serder.ObjectToJSONEx[Redundancy](b)
  54. }
  55. var DefaultECRedundancy = *NewECRedundancy(3, 5, 1024*1024*5)
  56. type ECRedundancy struct {
  57. serder.Metadata `union:"ec"`
  58. Type string `json:"type"`
  59. K int `json:"k"`
  60. N int `json:"n"`
  61. ChunkSize int `json:"chunkSize"`
  62. }
  63. func NewECRedundancy(k int, n int, chunkSize int) *ECRedundancy {
  64. return &ECRedundancy{
  65. Type: "ec",
  66. K: k,
  67. N: n,
  68. ChunkSize: chunkSize,
  69. }
  70. }
  71. func (b *ECRedundancy) Value() (driver.Value, error) {
  72. return serder.ObjectToJSONEx[Redundancy](b)
  73. }
  74. const (
  75. PackageStateNormal = "Normal"
  76. PackageStateDeleted = "Deleted"
  77. )
  78. type Package struct {
  79. PackageID PackageID `db:"PackageID" json:"packageID"`
  80. Name string `db:"Name" json:"name"`
  81. BucketID BucketID `db:"BucketID" json:"bucketID"`
  82. State string `db:"State" json:"state"`
  83. }
  84. type Object struct {
  85. ObjectID ObjectID `db:"ObjectID" json:"objectID"`
  86. PackageID PackageID `db:"PackageID" json:"packageID"`
  87. Path string `db:"Path" json:"path"`
  88. Size int64 `db:"Size" json:"size,string"`
  89. FileHash string `db:"FileHash" json:"fileHash"`
  90. Redundancy Redundancy `db:"Redundancy" json:"redundancy"`
  91. CreateTime time.Time `db:"CreateTime" json:"createTime"`
  92. UpdateTime time.Time `db:"UpdateTime" json:"updateTime"`
  93. }
  94. type Node struct {
  95. NodeID NodeID `db:"NodeID" json:"nodeID"`
  96. Name string `db:"Name" json:"name"`
  97. LocalIP string `db:"LocalIP" json:"localIP"`
  98. ExternalIP string `db:"ExternalIP" json:"externalIP"`
  99. LocalGRPCPort int `db:"LocalGRPCPort" json:"localGRPCPort"`
  100. ExternalGRPCPort int `db:"ExternalGRPCPort" json:"externalGRPCPort"`
  101. LocationID LocationID `db:"LocationID" json:"locationID"`
  102. State string `db:"State" json:"state"`
  103. LastReportTime *time.Time `db:"LastReportTime" json:"lastReportTime"`
  104. }
  105. type PinnedObject struct {
  106. ObjectID ObjectID `db:"ObjectID" json:"objectID"`
  107. NodeID NodeID `db:"NodeID" json:"nodeID"`
  108. CreateTime time.Time `db:"CreateTime" json:"createTime"`
  109. }
  110. type Bucket struct {
  111. BucketID BucketID `db:"BucketID" json:"bucketID"`
  112. Name string `db:"Name" json:"name"`
  113. CreatorID UserID `db:"CreatorID" json:"creatorID"`
  114. }
  115. type NodeConnectivity struct {
  116. FromNodeID NodeID `db:"FromNodeID" json:"fromNodeID"`
  117. ToNodeID NodeID `db:"ToNodeID" json:"ToNodeID"`
  118. Delay *float32 `db:"Delay" json:"delay"`
  119. TestTime time.Time `db:"TestTime" json:"testTime"`
  120. }
  121. type NodePackageCachingInfo struct {
  122. NodeID NodeID `json:"nodeID"`
  123. FileSize int64 `json:"fileSize"`
  124. ObjectCount int64 `json:"objectCount"`
  125. }
  126. type PackageCachingInfo struct {
  127. NodeInfos []NodePackageCachingInfo `json:"nodeInfos"`
  128. PackageSize int64 `json:"packageSize"`
  129. }
  130. func NewPackageCachingInfo(nodeInfos []NodePackageCachingInfo, packageSize int64) PackageCachingInfo {
  131. return PackageCachingInfo{
  132. NodeInfos: nodeInfos,
  133. PackageSize: packageSize,
  134. }
  135. }
  136. type CodeError struct {
  137. Code string `json:"code"`
  138. Message string `json:"message"`
  139. }
  140. func (e *CodeError) Error() string {
  141. return fmt.Sprintf("code: %s, message: %s", e.Code, e.Message)
  142. }