From e578fea6f99481e5586bd540edd616480571f97b Mon Sep 17 00:00:00 2001 From: yuriy0803 <68668177+yuriy0803@users.noreply.github.com> Date: Tue, 20 Jun 2023 20:29:41 +0200 Subject: [PATCH] MinerCharts DeleteOldMinerData // DeleteOldMinerData deletes old miner data from the "miner" ZSets. // All entries that are older than 24 hours are removed. // DeleteOldShareData deletes old share data from the "share" ZSets. // All entries that are older than 24 hours are removed. --- api/server.go | 21 ++++++++++++---- storage/redis.go | 62 +++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 68 insertions(+), 15 deletions(-) diff --git a/api/server.go b/api/server.go index 34ba30c..77de466 100644 --- a/api/server.go +++ b/api/server.go @@ -134,6 +134,23 @@ func (s *ApiServer) Start() { s.collectMinerCharts(login, miner["currentHashrate"].(int64), miner["hashrate"].(int64), miner["workersOnline"].(int64)) } }) + + c.AddFunc("0 0 */1 * *", func() { + // Delete old miner data + err := s.backend.DeleteOldMinerData() + if err != nil { + log.Println("Error deleting old miner data:", err) + } + }) + + c.AddFunc("0 0 */1 * *", func() { + // Delete old share data + err := s.backend.DeleteOldShareData() + if err != nil { + log.Println("Error deleting old share data:", err) + } + }) + ///test share chart shareCharts := s.config.ShareCharts log.Printf("Share charts config is :%v", shareCharts) @@ -441,10 +458,6 @@ func (s *ApiServer) AccountIndex(w http.ResponseWriter, r *http.Request) { stats["pageSize"] = s.config.Payments stats["exchangedata"] = generalstats["exchangedata"] stats["minerCharts"], err = s.backend.GetMinerCharts(s.config.MinerChartsNum, login) - - // Aufruf mit Löschoperation (alle Einträge, die älter als 24 Stunden sind, werden gelöscht) - deleteCount := int64(0) - stats["minerCharts"], err = s.backend.GetMinerCharts(s.config.MinerChartsNum, login, deleteCount) stats["shareCharts"], err = s.backend.GetShareCharts(s.config.ShareChartsNum, login) stats["paymentCharts"], err = s.backend.GetPaymentCharts(login) reply = &Entry{stats: stats, updatedAt: now} diff --git a/storage/redis.go b/storage/redis.go index ce2d819..2956ce8 100644 --- a/storage/redis.go +++ b/storage/redis.go @@ -436,29 +436,69 @@ func (r *RedisClient) GetAllMinerAccount() (account []string, err error) { return account, nil } -func (r *RedisClient) GetMinerCharts(hashNum int64, login string, args ...int64) (stats []*MinerCharts, err error) { +func (r *RedisClient) GetMinerCharts(hashNum int64, login string) (stats []*MinerCharts, err error) { + tx := r.client.Multi() defer tx.Close() now := util.MakeTimestamp() / 1000 cmds, err := tx.Exec(func() error { - if len(args) > 0 && args[0] >= 0 { - deleteCount := args[0] - if deleteCount == 0 { - tx.ZRemRangeByScore(r.formatKey("charts", "miner", login), "-inf", fmt.Sprint("(", now-86400)) - } else { - tx.ZRemRangeByRank(r.formatKey("charts", "miner", login), 0, deleteCount-1) - } - } - tx.ZRevRangeWithScores(r.formatKey("charts", "miner", login), 0, hashNum-1) + tx.ZRemRangeByScore(r.formatKey("charts", "miner", login), "-inf", fmt.Sprint("(", now-172800)) + tx.ZRevRangeWithScores(r.formatKey("charts", "miner", login), 0, hashNum) return nil }) if err != nil { return nil, err } - stats = convertMinerChartsResults(cmds[len(cmds)-1].(*redis.ZSliceCmd)) + stats = convertMinerChartsResults(cmds[1].(*redis.ZSliceCmd)) return stats, nil } +// DeleteOldMinerData deletes old miner data from the "miner" ZSets. +// All entries that are older than 24 hours are removed. +func (r *RedisClient) DeleteOldMinerData() error { + now := time.Now() + pastTime := now.Add(-24 * time.Hour) + + // Retrieve all keys matching the pattern "charts:miner:*" + loginKeys, err := r.client.Keys(r.formatKey("charts", "miner", "*")).Result() + if err != nil { + return err + } + + // Iterate through all found keys and remove the old entries + for _, loginKey := range loginKeys { + _, err := r.client.ZRemRangeByScore(loginKey, "-inf", fmt.Sprintf("(%d", pastTime.Unix())).Result() + if err != nil { + return err + } + } + + return nil +} + +// DeleteOldShareData deletes old share data from the "share" ZSets. +// All entries that are older than 24 hours are removed. +func (r *RedisClient) DeleteOldShareData() error { + now := time.Now() + pastTime := now.Add(-24 * time.Hour) + + // Retrieve all keys matching the pattern "charts:share:*" + shareKeys, err := r.client.Keys(r.formatKey("charts", "share", "*")).Result() + if err != nil { + return err + } + + // Iterate through all found keys and remove the old entries + for _, shareKey := range shareKeys { + _, err := r.client.ZRemRangeByScore(shareKey, "-inf", fmt.Sprintf("(%d", pastTime.Unix())).Result() + if err != nil { + return err + } + } + + return nil +} + func (r *RedisClient) GetShareCharts(shareNum int64, login string) (stats []*ShareCharts, err error) { tx := r.client.Multi()