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.

storageinfo.go 3.1 kB

10 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package models
  2. import (
  3. "fmt"
  4. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  5. stgmod "gitlink.org.cn/cloudream/storage/common/models"
  6. "gitlink.org.cn/cloudream/storage/common/pkgs/sysevent"
  7. "gorm.io/gorm"
  8. "time"
  9. )
  10. type Storage struct {
  11. StorageID cdssdk.StorageID `gorm:"column:StorageID; primaryKey; type:bigint; autoIncrement" json:"storageID"`
  12. StorageName string `gorm:"column:StorageName; type:varchar(1024); not null" json:"storageName"`
  13. HubID cdssdk.HubID `gorm:"column:HubID; type:bigint; not null" json:"hubID"`
  14. DataCount int64 `gorm:"column:DataCount; type:bigint; not null" json:"dataCount"`
  15. NewDataCount int64 `gorm:"column:NewDataCount; type:bigint; not null" json:"newDataCount"`
  16. Timestamp time.Time `gorm:"column:Timestamp; type:datatime; not null" json:"timestamp"`
  17. }
  18. func (Storage) TableName() string { return "storage" }
  19. type StorageRepository struct {
  20. repo *GormRepository
  21. }
  22. func NewStorageRepository(db *gorm.DB) *StorageRepository {
  23. return &StorageRepository{repo: NewGormRepository(db)}
  24. }
  25. func (r *StorageRepository) CreateStorage(storage *Storage) error {
  26. return r.repo.Create(storage)
  27. }
  28. func (r *StorageRepository) UpdateStorage(storage *Storage) error {
  29. return r.repo.Update(storage)
  30. }
  31. func (r *StorageRepository) DeleteStorage(storage *Storage) error {
  32. return r.repo.Delete(storage, uint(storage.StorageID))
  33. }
  34. func (r *StorageRepository) GetStorageByID(id int64) (*Storage, error) {
  35. var storage Storage
  36. err := r.repo.GetByID(uint(id), &storage)
  37. if err != nil {
  38. return nil, err
  39. }
  40. return &storage, nil
  41. }
  42. func (r *StorageRepository) GetStorageByHubID(hubId int64) (*Storage, error) {
  43. var storage Storage
  44. query := "SELECT * FROM storage WHERE HubID = ?"
  45. err := r.repo.db.Raw(query, hubId).Scan(&storage).Error
  46. if err != nil {
  47. return nil, err
  48. }
  49. return &storage, nil
  50. }
  51. func (r *StorageRepository) GetAllStorages() ([]Storage, error) {
  52. var storages []Storage
  53. err := r.repo.GetAll(&storages)
  54. if err != nil {
  55. return nil, err
  56. }
  57. return storages, nil
  58. }
  59. type StorageInfoWatcher struct {
  60. Name string
  61. }
  62. func (w *StorageInfoWatcher) OnEvent(event sysevent.SysEvent) {
  63. repo := NewStorageRepository(DB)
  64. if event.Category == "storageInfo" {
  65. if storageInfo, ok := event.Body.(*stgmod.BodyStorageInfo); ok {
  66. storage := &Storage{
  67. StorageID: storageInfo.StorageID,
  68. StorageName: storageInfo.StorageInfo.Name,
  69. HubID: storageInfo.StorageInfo.MasterHub,
  70. Timestamp: time.Now(),
  71. }
  72. switch storageInfo.Type {
  73. case "add":
  74. err := repo.CreateStorage(storage)
  75. if err != nil {
  76. return
  77. }
  78. case "update":
  79. err := repo.UpdateStorage(storage)
  80. if err != nil {
  81. return
  82. }
  83. case "delete":
  84. err := repo.DeleteStorage(storage)
  85. if err != nil {
  86. return
  87. }
  88. default:
  89. return
  90. }
  91. } else {
  92. fmt.Printf("Watcher %s: Unexpected Body type, expected *BodyStorageInfo, got %T\n", w.Name, event.Body)
  93. }
  94. } else {
  95. fmt.Printf("Watcher %s received an event with category %s\n", w.Name, event.Category)
  96. }
  97. }

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