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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package db
  2. /*
  3. import (
  4. "github.com/jmoiron/sqlx"
  5. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  6. stgmod "gitlink.org.cn/cloudream/storage/common/models"
  7. coormq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/coordinator"
  8. )
  9. type ObjectAccessStatDB struct {
  10. *DB
  11. }
  12. func (db *DB) ObjectAccessStat() *ObjectAccessStatDB {
  13. return &ObjectAccessStatDB{db}
  14. }
  15. func (*ObjectAccessStatDB) Get(ctx SQLContext, objID cdssdk.ObjectID, hubID cdssdk.HubID) (stgmod.ObjectAccessStat, error) {
  16. var ret stgmod.ObjectAccessStat
  17. err := sqlx.Get(ctx, &ret, "select * from ObjectAccessStat where ObjectID=? and HubID=?", objID, hubID)
  18. return ret, err
  19. }
  20. func (*ObjectAccessStatDB) GetByObjectID(ctx SQLContext, objID cdssdk.ObjectID) ([]stgmod.ObjectAccessStat, error) {
  21. var ret []stgmod.ObjectAccessStat
  22. err := sqlx.Select(ctx, &ret, "select * from ObjectAccessStat where ObjectID=?", objID)
  23. return ret, err
  24. }
  25. func (*ObjectAccessStatDB) BatchGetByObjectID(ctx SQLContext, objIDs []cdssdk.ObjectID) ([]stgmod.ObjectAccessStat, error) {
  26. if len(objIDs) == 0 {
  27. return nil, nil
  28. }
  29. var ret []stgmod.ObjectAccessStat
  30. stmt, args, err := sqlx.In("select * from ObjectAccessStat where ObjectID in (?)", objIDs)
  31. if err != nil {
  32. return ret, err
  33. }
  34. err = sqlx.Select(ctx, &ret, stmt, args...)
  35. return ret, err
  36. }
  37. func (*ObjectAccessStatDB) BatchGetByObjectIDOnNode(ctx SQLContext, objIDs []cdssdk.ObjectID, hubID cdssdk.HubID) ([]stgmod.ObjectAccessStat, error) {
  38. if len(objIDs) == 0 {
  39. return nil, nil
  40. }
  41. var ret []stgmod.ObjectAccessStat
  42. stmt, args, err := sqlx.In("select * from ObjectAccessStat where ObjectID in (?) and HubID=?", objIDs, hubID)
  43. if err != nil {
  44. return ret, err
  45. }
  46. err = sqlx.Select(ctx, &ret, stmt, args...)
  47. return ret, err
  48. }
  49. func (*ObjectAccessStatDB) BatchAddCounter(ctx SQLContext, entries []coormq.AddAccessStatEntry) error {
  50. if len(entries) == 0 {
  51. return nil
  52. }
  53. sql := "insert into ObjectAccessStat(ObjectID, HubID, Counter, Amount) " +
  54. " values(:ObjectID, :HubID, :Counter, 0) as new" +
  55. " on duplicate key update ObjectAccessStat.Counter=ObjectAccessStat.Counter+new.Counter"
  56. err := BatchNamedExec(ctx, sql, 4, entries, nil)
  57. return err
  58. }
  59. func (*ObjectAccessStatDB) BatchUpdateAmountInPackage(ctx SQLContext, pkgIDs []cdssdk.PackageID, historyWeight float64) error {
  60. if len(pkgIDs) == 0 {
  61. return nil
  62. }
  63. stmt, args, err := sqlx.In("update ObjectAccessStat inner join Object"+
  64. " on ObjectAccessStat.ObjectID = Object.ObjectID"+
  65. " set Amount=Amount*?+Counter*(1-?), Counter = 0"+
  66. " where PackageID in (?)", historyWeight, historyWeight, pkgIDs)
  67. if err != nil {
  68. return err
  69. }
  70. _, err = ctx.Exec(stmt, args...)
  71. return err
  72. }
  73. func (*ObjectAccessStatDB) UpdateAllAmount(ctx SQLContext, historyWeight float64) error {
  74. stmt, args, err := sqlx.In("update ObjectAccessStat set Amount=Amount*?+Counter*(1-?), Counter = 0", historyWeight, historyWeight)
  75. if err != nil {
  76. return err
  77. }
  78. _, err = ctx.Exec(stmt, args...)
  79. return err
  80. }
  81. func (*ObjectAccessStatDB) DeleteByObjectID(ctx SQLContext, objID cdssdk.ObjectID) error {
  82. _, err := ctx.Exec("delete from ObjectAccessStat where ObjectID=?", objID)
  83. return err
  84. }
  85. func (*ObjectAccessStatDB) BatchDeleteByObjectID(ctx SQLContext, objIDs []cdssdk.ObjectID) error {
  86. if len(objIDs) == 0 {
  87. return nil
  88. }
  89. stmt, args, err := sqlx.In("delete from ObjectAccessStat where ObjectID in (?)", objIDs)
  90. if err != nil {
  91. return err
  92. }
  93. _, err = ctx.Exec(stmt, args...)
  94. return err
  95. }
  96. func (*ObjectAccessStatDB) DeleteInPackage(ctx SQLContext, packageID cdssdk.PackageID) error {
  97. _, err := ctx.Exec("delete ObjectAccessStat from ObjectAccessStat inner join Object on ObjectAccessStat.ObjectID = Object.ObjectID where PackageID = ?", packageID)
  98. return err
  99. }
  100. */

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