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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. )
  7. type PackageAccessStatDB struct {
  8. *DB
  9. }
  10. func (db *DB) PackageAccessStat() *PackageAccessStatDB {
  11. return &PackageAccessStatDB{db}
  12. }
  13. func (*PackageAccessStatDB) Get(ctx SQLContext, pkgID cdssdk.PackageID, stgID cdssdk.StorageID) (stgmod.PackageAccessStat, error) {
  14. var ret stgmod.PackageAccessStat
  15. err := ctx.Table("PackageAccessStat").Where("PackageID = ? AND StorageID = ?", pkgID, stgID).First(&ret).Error
  16. return ret, err
  17. }
  18. func (*PackageAccessStatDB) GetByPackageID(ctx SQLContext, pkgID cdssdk.PackageID) ([]stgmod.PackageAccessStat, error) {
  19. var ret []stgmod.PackageAccessStat
  20. err := ctx.Table("PackageAccessStat").Where("PackageID = ?", pkgID).Find(&ret).Error
  21. return ret, err
  22. }
  23. func (*PackageAccessStatDB) BatchGetByPackageID(ctx SQLContext, pkgIDs []cdssdk.PackageID) ([]stgmod.PackageAccessStat, error) {
  24. if len(pkgIDs) == 0 {
  25. return nil, nil
  26. }
  27. var ret []stgmod.PackageAccessStat
  28. err := ctx.Table("PackageAccessStat").Where("PackageID IN (?)", pkgIDs).Find(&ret).Error
  29. return ret, err
  30. }
  31. func (*PackageAccessStatDB) BatchAddCounter(ctx SQLContext, entries []coormq.AddAccessStatEntry) error {
  32. if len(entries) == 0 {
  33. return nil
  34. }
  35. sql := "INSERT INTO PackageAccessStat(PackageID, StorageID, Counter, Amount) " +
  36. "VALUES(:PackageID, :StorageID, :Counter, 0) ON DUPLICATE KEY UPDATE Counter = Counter + VALUES(Counter)"
  37. return ctx.Exec(sql, entries).Error
  38. }
  39. func (*PackageAccessStatDB) BatchUpdateAmount(ctx SQLContext, pkgIDs []cdssdk.PackageID, historyWeight float64) error {
  40. if len(pkgIDs) == 0 {
  41. return nil
  42. }
  43. sql := "UPDATE PackageAccessStat SET Amount = Amount * ? + Counter * (1 - ?), Counter = 0 WHERE PackageID IN (?)"
  44. return ctx.Exec(sql, historyWeight, historyWeight, pkgIDs).Error
  45. }
  46. func (*PackageAccessStatDB) UpdateAllAmount(ctx SQLContext, historyWeight float64) error {
  47. sql := "UPDATE PackageAccessStat SET Amount = Amount * ? + Counter * (1 - ?), Counter = 0"
  48. return ctx.Exec(sql, historyWeight, historyWeight).Error
  49. }
  50. func (*PackageAccessStatDB) DeleteByPackageID(ctx SQLContext, pkgID cdssdk.PackageID) error {
  51. return ctx.Table("PackageAccessStat").Where("PackageID = ?", pkgID).Delete(&stgmod.PackageAccessStat{}).Error
  52. }

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