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

1 year ago
1 year ago
1 year ago
1 year ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  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. ObjectPathSeparator = "/"
  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, 6, 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. func (n Node) String() string {
  106. return fmt.Sprintf("%v(%v)", n.Name, n.NodeID)
  107. }
  108. type PinnedObject struct {
  109. ObjectID ObjectID `db:"ObjectID" json:"objectID"`
  110. NodeID NodeID `db:"NodeID" json:"nodeID"`
  111. CreateTime time.Time `db:"CreateTime" json:"createTime"`
  112. }
  113. type Bucket struct {
  114. BucketID BucketID `db:"BucketID" json:"bucketID"`
  115. Name string `db:"Name" json:"name"`
  116. CreatorID UserID `db:"CreatorID" json:"creatorID"`
  117. }
  118. type NodeConnectivity struct {
  119. FromNodeID NodeID `db:"FromNodeID" json:"fromNodeID"`
  120. ToNodeID NodeID `db:"ToNodeID" json:"ToNodeID"`
  121. Delay *float32 `db:"Delay" json:"delay"`
  122. TestTime time.Time `db:"TestTime" json:"testTime"`
  123. }
  124. type Storage struct {
  125. StorageID StorageID `db:"StorageID" json:"storageID"`
  126. Name string `db:"Name" json:"name"`
  127. NodeID NodeID `db:"NodeID" json:"nodeID"`
  128. LocalBase string `db:"LocalBase" json:"localBase"` // 存储服务挂载在代理节点的目录
  129. RemoteBase string `db:"RemoteBase" json:"remoteBase"` // 挂载在本地的目录对应存储服务的哪个路径
  130. State string `db:"State" json:"state"`
  131. }
  132. type NodePackageCachingInfo struct {
  133. NodeID NodeID `json:"nodeID"`
  134. FileSize int64 `json:"fileSize"`
  135. ObjectCount int64 `json:"objectCount"`
  136. }
  137. type PackageCachingInfo struct {
  138. NodeInfos []NodePackageCachingInfo `json:"nodeInfos"`
  139. PackageSize int64 `json:"packageSize"`
  140. }
  141. func NewPackageCachingInfo(nodeInfos []NodePackageCachingInfo, packageSize int64) PackageCachingInfo {
  142. return PackageCachingInfo{
  143. NodeInfos: nodeInfos,
  144. PackageSize: packageSize,
  145. }
  146. }
  147. type CodeError struct {
  148. Code string `json:"code"`
  149. Message string `json:"message"`
  150. }
  151. func (e *CodeError) Error() string {
  152. return fmt.Sprintf("code: %s, message: %s", e.Code, e.Message)
  153. }