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.

object_access_stat.go 3.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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/clause"
  7. )
  8. type ObjectAccessStatDB struct {
  9. *DB
  10. }
  11. func (db *DB) ObjectAccessStat() *ObjectAccessStatDB {
  12. return &ObjectAccessStatDB{db}
  13. }
  14. func (*ObjectAccessStatDB) Get(ctx SQLContext, objID cdssdk.ObjectID, stgID cdssdk.StorageID) (stgmod.ObjectAccessStat, error) {
  15. var ret stgmod.ObjectAccessStat
  16. err := ctx.Table("ObjectAccessStat").
  17. Where("ObjectID = ? AND StorageID = ?", objID, stgID).
  18. First(&ret).Error
  19. return ret, err
  20. }
  21. func (*ObjectAccessStatDB) GetByObjectID(ctx SQLContext, objID cdssdk.ObjectID) ([]stgmod.ObjectAccessStat, error) {
  22. var ret []stgmod.ObjectAccessStat
  23. err := ctx.Table("ObjectAccessStat").
  24. Where("ObjectID = ?", objID).
  25. Find(&ret).Error
  26. return ret, err
  27. }
  28. func (*ObjectAccessStatDB) BatchGetByObjectID(ctx SQLContext, objIDs []cdssdk.ObjectID) ([]stgmod.ObjectAccessStat, error) {
  29. if len(objIDs) == 0 {
  30. return nil, nil
  31. }
  32. var ret []stgmod.ObjectAccessStat
  33. err := ctx.Table("ObjectAccessStat").
  34. Where("ObjectID IN ?", objIDs).
  35. Find(&ret).Error
  36. return ret, err
  37. }
  38. func (*ObjectAccessStatDB) BatchGetByObjectIDOnStorage(ctx SQLContext, objIDs []cdssdk.ObjectID, stgID cdssdk.StorageID) ([]stgmod.ObjectAccessStat, error) {
  39. if len(objIDs) == 0 {
  40. return nil, nil
  41. }
  42. var ret []stgmod.ObjectAccessStat
  43. err := ctx.Table("ObjectAccessStat").
  44. Where("ObjectID IN ? AND StorageID = ?", objIDs, stgID).
  45. Find(&ret).Error
  46. return ret, err
  47. }
  48. func (*ObjectAccessStatDB) BatchAddCounter(ctx SQLContext, entries []coormq.AddAccessStatEntry) error {
  49. if len(entries) == 0 {
  50. return nil
  51. }
  52. for _, entry := range entries {
  53. err := ctx.Table("ObjectAccessStat").
  54. Clauses(clause.OnConflict{
  55. UpdateAll: true,
  56. }).
  57. Create(&entry).Error
  58. if err != nil {
  59. return err
  60. }
  61. }
  62. return nil
  63. }
  64. func (*ObjectAccessStatDB) BatchUpdateAmountInPackage(ctx SQLContext, pkgIDs []cdssdk.PackageID, historyWeight float64) error {
  65. if len(pkgIDs) == 0 {
  66. return nil
  67. }
  68. err := ctx.Exec("UPDATE ObjectAccessStat AS o INNER JOIN Object AS obj ON o.ObjectID = obj.ObjectID SET o.Amount = o.Amount * ? + o.Counter * (1 - ?), o.Counter = 0 WHERE obj.PackageID IN ?", historyWeight, historyWeight, pkgIDs).Error
  69. return err
  70. }
  71. func (*ObjectAccessStatDB) UpdateAllAmount(ctx SQLContext, historyWeight float64) error {
  72. err := ctx.Exec("UPDATE ObjectAccessStat SET Amount = Amount * ? + Counter * (1 - ?), Counter = 0", historyWeight, historyWeight).Error
  73. return err
  74. }
  75. func (*ObjectAccessStatDB) DeleteByObjectID(ctx SQLContext, objID cdssdk.ObjectID) error {
  76. err := ctx.Table("ObjectAccessStat").Where("ObjectID = ?", objID).Delete(nil).Error
  77. return err
  78. }
  79. func (*ObjectAccessStatDB) BatchDeleteByObjectID(ctx SQLContext, objIDs []cdssdk.ObjectID) error {
  80. if len(objIDs) == 0 {
  81. return nil
  82. }
  83. err := ctx.Table("ObjectAccessStat").Where("ObjectID IN ?", objIDs).Delete(nil).Error
  84. return err
  85. }
  86. func (*ObjectAccessStatDB) DeleteInPackage(ctx SQLContext, packageID cdssdk.PackageID) error {
  87. err := ctx.Exec("DELETE o FROM ObjectAccessStat o INNER JOIN Object obj ON o.ObjectID = obj.ObjectID WHERE obj.PackageID = ?", packageID).Error
  88. return err
  89. }

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