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.

object.go 2.8 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package models
  2. import (
  3. "fmt"
  4. "time"
  5. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  6. stgmod "gitlink.org.cn/cloudream/storage/common/models"
  7. "gitlink.org.cn/cloudream/storage/common/pkgs/sysevent"
  8. "gorm.io/gorm"
  9. )
  10. type Object struct {
  11. ObjectID cdssdk.ObjectID `gorm:"column:ObjectID; primaryKey; type:bigint; autoIncrement" json:"objectID"`
  12. PackageID cdssdk.PackageID `gorm:"column:PackageID; type:bigint; not null" json:"packageID"`
  13. Path string `gorm:"column:Path; type:varchar(1024); not null" json:"path"`
  14. Size int64 `gorm:"column:Size; type:bigint; not null" json:"size"`
  15. FileHash string `gorm:"column:FileHash; type:varchar(255); not null" json:"fileHash"`
  16. Status Status `gorm:"column:Status; type:tinyint; not null" json:"status"`
  17. FaultTolerance float64 `gorm:"column:faultTolerance; type:float; not null" json:"faultTolerance"`
  18. Redundancy float64 `gorm:"column:redundancy; type:float; not null" json:"redundancy"`
  19. AvgAccessCost float64 `gorm:"column:avgAccessCost; type:float; not null" json:"avgAccessCost"`
  20. Timestamp time.Time `gorm:"column:Timestamp; type:datatime; not null" json:"timestamp"`
  21. }
  22. func (Object) TableName() string {
  23. return "object"
  24. }
  25. // ObjectRepository 块传输记录的 Repository
  26. type ObjectRepository struct {
  27. repo *GormRepository
  28. }
  29. // NewObjectRepository 创建 ObjectRepository 实例
  30. func NewObjectRepository(db *gorm.DB) *ObjectRepository {
  31. return &ObjectRepository{repo: NewGormRepository(db)}
  32. }
  33. // CreateObject 创建块传输记录
  34. func (r *ObjectRepository) CreateObject(object *Object) error {
  35. return r.repo.Create(object)
  36. }
  37. // GetObjectByID 查询单个Object
  38. func (r *ObjectRepository) GetObjectByID(objectID int64) (*Object, error) {
  39. var object Object
  40. query := "SELECT * FROM object WHERE ObjectID = ?"
  41. err := r.repo.db.Raw(query, objectID).First(&object).Error
  42. if err != nil {
  43. return nil, err
  44. }
  45. return &object, nil
  46. }
  47. // UpdateObject 更新块传输记录
  48. func (r *ObjectRepository) UpdateObject(object *Object) error {
  49. return r.repo.Update(object)
  50. }
  51. // GetAllObjects 获取所有块传输记录
  52. func (r *ObjectRepository) GetAllObjects() ([]Object, error) {
  53. var objects []Object
  54. err := r.repo.GetAll(&objects)
  55. if err != nil {
  56. return nil, err
  57. }
  58. return objects, nil
  59. }
  60. type ObjectWatcher struct {
  61. Name string
  62. }
  63. func (w *ObjectWatcher) OnEvent(event sysevent.SysEvent) {
  64. if event.Category == "objectChange" {
  65. if _, ok := event.Body.(*stgmod.BodyNewOrUpdateObject); ok {
  66. } else {
  67. fmt.Printf("Watcher %s: Unexpected Body type, expected *ObjectInfo, got %T\n", w.Name, event.Body)
  68. }
  69. } else {
  70. fmt.Printf("Watcher %s received an event with category %s\n", w.Name, event.Category)
  71. }
  72. }

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