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.7 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package db2
  2. import (
  3. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  4. stgmod "gitlink.org.cn/cloudream/storage2/common/models"
  5. coormq "gitlink.org.cn/cloudream/storage2/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. accs := make([]stgmod.PackageAccessStat, len(entries))
  38. for i, e := range entries {
  39. accs[i] = stgmod.PackageAccessStat{
  40. PackageID: e.PackageID,
  41. StorageID: e.StorageID,
  42. Counter: e.Counter,
  43. }
  44. }
  45. return ctx.Clauses(clause.OnConflict{
  46. Columns: []clause.Column{{Name: "PackageID"}, {Name: "StorageID"}},
  47. DoUpdates: clause.Assignments(map[string]any{
  48. "Counter": gorm.Expr("Counter + values(Counter)"),
  49. }),
  50. }).Table("PackageAccessStat").Create(&accs).Error
  51. }
  52. func (*PackageAccessStatDB) BatchUpdateAmount(ctx SQLContext, pkgIDs []cdssdk.PackageID, historyWeight float64) error {
  53. if len(pkgIDs) == 0 {
  54. return nil
  55. }
  56. sql := "UPDATE PackageAccessStat SET Amount = Amount * ? + Counter * (1 - ?), Counter = 0 WHERE PackageID IN (?)"
  57. return ctx.Exec(sql, historyWeight, historyWeight, pkgIDs).Error
  58. }
  59. func (*PackageAccessStatDB) UpdateAllAmount(ctx SQLContext, historyWeight float64) error {
  60. sql := "UPDATE PackageAccessStat SET Amount = Amount * ? + Counter * (1 - ?), Counter = 0"
  61. return ctx.Exec(sql, historyWeight, historyWeight).Error
  62. }
  63. func (*PackageAccessStatDB) DeleteByPackageID(ctx SQLContext, pkgID cdssdk.PackageID) error {
  64. return ctx.Table("PackageAccessStat").Where("PackageID = ?", pkgID).Delete(&stgmod.PackageAccessStat{}).Error
  65. }

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