package ticktock import ( "gitlink.org.cn/cloudream/common/pkgs/logger" "gitlink.org.cn/cloudream/common/utils/reflect2" stgtypes "gitlink.org.cn/cloudream/jcs-pub/common/pkgs/storage/types" jcstypes "gitlink.org.cn/cloudream/jcs-pub/common/types" "gitlink.org.cn/cloudream/jcs-pub/common/types/datamap" ) type StatsLog struct { } func (j *StatsLog) Name() string { return reflect2.TypeNameOf[StatsLog]() } func (j *StatsLog) Execute(t *TickTock) { j.logGlobalObjectStats(t) } func (j *StatsLog) logGlobalObjectStats(t *TickTock) { log := logger.WithType[StatsLog]("Event") cnt, size, err := t.db.Object().Summary(t.db.DefCtx()) if err != nil { log.Warnf("get object summary: %v", err) return } usIDs, err := t.db.UserSpace().GetAllIDs(t.db.DefCtx()) if err != nil { log.Warnf("get user space ids: %v", err) return } var logUsIDs []jcstypes.UserSpaceID var usStats []stgtypes.ShardStoreStats details := t.spaceMeta.GetMany(usIDs) for _, d := range details { if d.UserSpace.ShardStore == nil { continue } store, err := t.stgPool.GetShardStore(d) if err != nil { log.Warnf("get shard store %v: %v", d, err) continue } logUsIDs = append(logUsIDs, d.UserSpace.UserSpaceID) usStats = append(usStats, store.Stats()) } t.evtPub.Publish(&datamap.BodyGlobalObjectStats{ TotalObjectCount: cnt, TotalDataSize: size, UserSpaceIDs: logUsIDs, UserSpaceStats: usStats, }) }