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.

model.go 3.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package model
  2. import (
  3. "fmt"
  4. "reflect"
  5. "time"
  6. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  7. "gitlink.org.cn/cloudream/common/utils/serder"
  8. stgmod "gitlink.org.cn/cloudream/storage/common/models"
  9. )
  10. // TODO 可以考虑逐步迁移到cdssdk中。迁移思路:数据对象应该包含的字段都迁移到cdssdk中,内部使用的一些特殊字段则留在这里
  11. type Storage = cdssdk.Storage
  12. type User struct {
  13. UserID cdssdk.UserID `db:"UserID" json:"userID"`
  14. Password string `db:"Password" json:"password"`
  15. }
  16. type UserBucket struct {
  17. UserID cdssdk.UserID `db:"UserID" json:"userID"`
  18. BucketID cdssdk.BucketID `db:"BucketID" json:"bucketID"`
  19. }
  20. type UserNode struct {
  21. UserID cdssdk.UserID `db:"UserID" json:"userID"`
  22. NodeID cdssdk.NodeID `db:"NodeID" json:"nodeID"`
  23. }
  24. type UserStorage struct {
  25. UserID cdssdk.UserID `db:"UserID" json:"userID"`
  26. StorageID cdssdk.StorageID `db:"StorageID" json:"storageID"`
  27. }
  28. type Bucket = cdssdk.Bucket
  29. type Package = cdssdk.Package
  30. type Object = cdssdk.Object
  31. type NodeConnectivity = cdssdk.NodeConnectivity
  32. // 由于Object的Redundancy字段是interface,所以不能直接将查询结果scan成Object,必须先scan成TempObject,
  33. // 再.ToObject()转成Object
  34. type TempObject struct {
  35. cdssdk.Object
  36. Redundancy RedundancyWarpper `db:"Redundancy"`
  37. }
  38. func (o *TempObject) ToObject() cdssdk.Object {
  39. obj := o.Object
  40. obj.Redundancy = o.Redundancy.Value
  41. return obj
  42. }
  43. type RedundancyWarpper struct {
  44. Value cdssdk.Redundancy
  45. }
  46. func (o *RedundancyWarpper) Scan(src interface{}) error {
  47. data, ok := src.([]uint8)
  48. if !ok {
  49. return fmt.Errorf("unknow src type: %v", reflect.TypeOf(data))
  50. }
  51. red, err := serder.JSONToObjectEx[cdssdk.Redundancy](data)
  52. if err != nil {
  53. return err
  54. }
  55. o.Value = red
  56. return nil
  57. }
  58. type ObjectBlock = stgmod.ObjectBlock
  59. type Cache struct {
  60. FileHash string `db:"FileHash" json:"fileHash"`
  61. NodeID cdssdk.NodeID `db:"NodeID" json:"nodeID"`
  62. CreateTime time.Time `db:"CreateTime" json:"createTime"`
  63. Priority int `db:"Priority" json:"priority"`
  64. }
  65. const (
  66. StoragePackageStateNormal = "Normal"
  67. StoragePackageStateDeleted = "Deleted"
  68. StoragePackageStateOutdated = "Outdated"
  69. )
  70. // Storage当前加载的Package
  71. type StoragePackage struct {
  72. StorageID cdssdk.StorageID `db:"StorageID" json:"storageID"`
  73. PackageID cdssdk.PackageID `db:"PackageID" json:"packageID"`
  74. UserID cdssdk.UserID `db:"UserID" json:"userID"`
  75. State string `db:"State" json:"state"`
  76. }
  77. type Location struct {
  78. LocationID cdssdk.LocationID `db:"LocationID" json:"locationID"`
  79. Name string `db:"Name" json:"name"`
  80. }
  81. type PackageAccessStat struct {
  82. PackageID cdssdk.PackageID `db:"PackageID" json:"packageID"`
  83. NodeID cdssdk.NodeID `db:"NodeID" json:"nodeID"`
  84. Amount float64 `db:"Amount" json:"Amount"` // 前一日的读取量的滑动平均值
  85. Counter float64 `db:"Counter" json:"counter"` // 当日的读取量
  86. }
  87. type ObjectAccessStat struct {
  88. ObjectID cdssdk.ObjectID `db:"ObjectID" json:"objectID"`
  89. NodeID cdssdk.NodeID `db:"NodeID" json:"nodeID"`
  90. Amount float64 `db:"Amount" json:"Amount"` // 前一日的读取量的滑动平均值
  91. Counter float64 `db:"Counter" json:"counter"` // 当日的读取量
  92. }

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