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.

package_access_stat.go 2.5 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package db2
  2. import (
  3. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  4. stgmod "gitlink.org.cn/cloudream/storage/common/models"
  5. coormq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/coordinator"
  6. "gorm.io/gorm"
  7. "gorm.io/gorm/clause"
  8. )
  9. type PackageAccessStatDB struct {
  10. *DB
  11. }
  12. func (db *DB) PackageAccessStat() *PackageAccessStatDB {
  13. return &PackageAccessStatDB{db}
  14. }
  15. func (*PackageAccessStatDB) Get(ctx SQLContext, pkgID cdssdk.PackageID, stgID cdssdk.StorageID) (stgmod.PackageAccessStat, error) {
  16. var ret stgmod.PackageAccessStat
  17. err := ctx.Table("PackageAccessStat").Where("PackageID = ? AND StorageID = ?", pkgID, stgID).First(&ret).Error
  18. return ret, err
  19. }
  20. func (*PackageAccessStatDB) GetByPackageID(ctx SQLContext, pkgID cdssdk.PackageID) ([]stgmod.PackageAccessStat, error) {
  21. var ret []stgmod.PackageAccessStat
  22. err := ctx.Table("PackageAccessStat").Where("PackageID = ?", pkgID).Find(&ret).Error
  23. return ret, err
  24. }
  25. func (*PackageAccessStatDB) BatchGetByPackageID(ctx SQLContext, pkgIDs []cdssdk.PackageID) ([]stgmod.PackageAccessStat, error) {
  26. if len(pkgIDs) == 0 {
  27. return nil, nil
  28. }
  29. var ret []stgmod.PackageAccessStat
  30. err := ctx.Table("PackageAccessStat").Where("PackageID IN (?)", pkgIDs).Find(&ret).Error
  31. return ret, err
  32. }
  33. func (*PackageAccessStatDB) BatchAddCounter(ctx SQLContext, entries []coormq.AddAccessStatEntry) error {
  34. if len(entries) == 0 {
  35. return nil
  36. }
  37. return ctx.Clauses(clause.OnConflict{
  38. Columns: []clause.Column{{Name: "PackageID"}, {Name: "StorageID"}},
  39. DoUpdates: clause.Assignments(map[string]any{
  40. "Counter": gorm.Expr("Counter + values(Counter)"),
  41. }),
  42. }).Table("PackageAccessStat").Create(&entries).Error
  43. }
  44. func (*PackageAccessStatDB) BatchUpdateAmount(ctx SQLContext, pkgIDs []cdssdk.PackageID, historyWeight float64) error {
  45. if len(pkgIDs) == 0 {
  46. return nil
  47. }
  48. sql := "UPDATE PackageAccessStat SET Amount = Amount * ? + Counter * (1 - ?), Counter = 0 WHERE PackageID IN (?)"
  49. return ctx.Exec(sql, historyWeight, historyWeight, pkgIDs).Error
  50. }
  51. func (*PackageAccessStatDB) UpdateAllAmount(ctx SQLContext, historyWeight float64) error {
  52. sql := "UPDATE PackageAccessStat SET Amount = Amount * ? + Counter * (1 - ?), Counter = 0"
  53. return ctx.Exec(sql, historyWeight, historyWeight).Error
  54. }
  55. func (*PackageAccessStatDB) DeleteByPackageID(ctx SQLContext, pkgID cdssdk.PackageID) error {
  56. return ctx.Table("PackageAccessStat").Where("PackageID = ?", pkgID).Delete(&stgmod.PackageAccessStat{}).Error
  57. }

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