package models import ( "errors" cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" stgmod "gitlink.org.cn/cloudream/storage/common/models" "gorm.io/gorm" "log" "time" ) type Storage struct { StorageID cdssdk.StorageID `gorm:"column:StorageID; primaryKey; type:bigint; autoIncrement" json:"storageID"` StorageName string `gorm:"column:StorageName; type:varchar(1024); not null" json:"storageName"` HubID cdssdk.HubID `gorm:"column:HubID; type:bigint; not null" json:"hubID"` DataCount int64 `gorm:"column:DataCount; type:bigint; not null" json:"dataCount"` NewDataCount int64 `gorm:"column:NewDataCount; type:bigint; not null" json:"newDataCount"` Timestamp time.Time `gorm:"column:Timestamp; type:datatime; not null" json:"timestamp"` } func (Storage) TableName() string { return "storage" } type StorageRepository struct { repo *GormRepository } func NewStorageRepository(db *gorm.DB) *StorageRepository { return &StorageRepository{repo: NewGormRepository(db)} } func (r *StorageRepository) CreateStorage(storage *Storage) error { return r.repo.Create(storage) } func (r *StorageRepository) UpdateStorage(storage *Storage) error { return r.repo.Update(storage) } func (r *StorageRepository) GetStorageByID(id int64) (*Storage, error) { var storage Storage err := r.repo.GetByID(uint(id), &storage) if err != nil { return nil, err } return &storage, nil } func (r *StorageRepository) GetStorageByHubID(hubId int64) (*Storage, error) { var storage Storage query := "SELECT * FROM storage WHERE HubID = ?" err := r.repo.db.Raw(query, hubId).Scan(&storage).Error if err != nil { return nil, err } return &storage, nil } func (r *StorageRepository) GetAllStorages() ([]Storage, error) { var storages []Storage err := r.repo.GetAll(&storages) if err != nil { return nil, err } return storages, nil } //ProcessHubStat mq推送各节点统计自身当前的总数据量时的处理逻辑 func ProcessStorageInfo(data stgmod.StorageStats) { repo := NewStorageRepository(DB) storage, err := repo.GetStorageByID(data.Body.StorageID) if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { // 插入新记录 newStorage := &Storage{ StorageID: cdssdk.StorageID(data.Body.StorageID), DataCount: data.Body.DataCount, NewDataCount: 0, } repo.CreateStorage(newStorage) } else { log.Printf("Error querying storage: %v", err) } } else { // 更新记录 newDataCount := data.Body.DataCount - storage.DataCount storage.DataCount = data.Body.DataCount storage.NewDataCount = newDataCount err := repo.UpdateStorage(storage) if err != nil { log.Printf("Error update storage: %v", err) } } }