fix: adjustment directory structure
This commit is contained in:
169
proxy/Nredis/bundleclr.go
Normal file
169
proxy/Nredis/bundleclr.go
Normal file
@@ -0,0 +1,169 @@
|
||||
package Nredis
|
||||
|
||||
import (
|
||||
"proxy/MsgDef"
|
||||
. "proxy/MsgDef"
|
||||
l4g "proxy/logger"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
func CheckIfRrExpired(rr *MsgDef.RrData) bool {
|
||||
if rr == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
if rr.MeasureDomain == "01" || rr.MeasureDomain == "03" {
|
||||
if rr.UsedValue >= rr.FreeValue {
|
||||
return true
|
||||
}
|
||||
nowStr := time.Now().Format("20060102150405")
|
||||
if strings.Compare(nowStr, rr.EndTime) > 0 {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
if rr.MeasureDomain == "02" {
|
||||
nowStr := time.Now().Format("20060102150405")
|
||||
if strings.Compare(nowStr, rr.EndTime) > 0 {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func RdbGetRrByKey(key string) (*RrData, error) {
|
||||
res := rdb.HGetAll(ctx, key)
|
||||
err := res.Err()
|
||||
if err != nil {
|
||||
l4g.RedisLog.Errorf("HGetAll %s, err: %v", key, err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var rr RrData
|
||||
if err = res.Scan(&rr); err != nil {
|
||||
l4g.RedisLog.Errorf("HGetAll Scan %s, err: %v", key, err)
|
||||
return nil, err
|
||||
} else {
|
||||
//l4g.RedisLog.Debugf("Get %s, [%v]", key, rr)
|
||||
}
|
||||
|
||||
return &rr, err
|
||||
}
|
||||
|
||||
func RdbClrExpireRrRecord() error {
|
||||
l4g.RedisLog.Warnf("cron clear expire rr!")
|
||||
var cursor uint64= 0
|
||||
var err error
|
||||
for {
|
||||
var keys []string
|
||||
keys, cursor, err = rdb.Scan(ctx, cursor, "Rr:*", 30).Result()
|
||||
if err != nil {
|
||||
l4g.RedisLog.Errorf("Scan Rr:*, err: %v", err)
|
||||
break
|
||||
}
|
||||
|
||||
for _, key := range keys {
|
||||
subFields := strings.Split(key, ":")
|
||||
if len(subFields) == 4 {
|
||||
rr, err1 := RdbGetRrByKey(key)
|
||||
if rr != nil && err1 == nil && CheckIfRrExpired(rr) {
|
||||
err1 = rdb.Del(ctx, key).Err()
|
||||
if err1 != nil {
|
||||
l4g.RedisLog.Errorf("Del Rr[%s], err: %v", key, err1)
|
||||
} else {
|
||||
l4g.RedisLog.Warnf("Del Rr[%s] succ", key)
|
||||
|
||||
l4g.RedisLog.Warnf("SRem RrSet:%s:%s %s", subFields[1], subFields[2], subFields[3])
|
||||
_ = rdb.SRem(ctx, "RrSet:"+subFields[1]+":"+subFields[2], subFields[3])
|
||||
l4g.RedisLog.Warnf("Del RrId:%s", subFields[3])
|
||||
_ = rdb.Del(ctx, "RrId:"+subFields[3]).Err()
|
||||
//return srem.Err()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if cursor == 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func RdbGetAcctPlanByKey(key string) (*AcctData, error) {
|
||||
res := rdb.HGetAll(ctx, key)
|
||||
err := res.Err()
|
||||
if err != nil {
|
||||
l4g.RedisLog.Errorf("HGetAll %s, err: %v", key, err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var acct AcctData
|
||||
if err = res.Scan(&acct); err != nil {
|
||||
l4g.RedisLog.Errorf("HGetAll Scan %s, err: %v", key, err)
|
||||
return nil, err
|
||||
} else {
|
||||
//l4g.RedisLog.Debugf("Get %s, [%v]", key, acct)
|
||||
}
|
||||
|
||||
return &acct, err
|
||||
}
|
||||
|
||||
func CheckIfAcctExpired(acct *MsgDef.AcctData) bool {
|
||||
if acct == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
nowStr := time.Now().Format("2006-01-02 15:04:05")
|
||||
if strings.Compare(nowStr, acct.ExpTime[:len(nowStr)]) > 0 {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func RdbClrExpirePlanRecord() error {
|
||||
l4g.RedisLog.Warnf("cron clear expire plan!")
|
||||
var cursor uint64= 0
|
||||
var err error
|
||||
for {
|
||||
var keys []string
|
||||
keys, cursor, err = rdb.Scan(ctx, cursor, "Acct:*", 30).Result()
|
||||
if err != nil {
|
||||
l4g.RedisLog.Errorf("Scan Acct:*, err: %v", err)
|
||||
break
|
||||
}
|
||||
|
||||
for _, key := range keys {
|
||||
subFields := strings.Split(key, ":")
|
||||
if len(subFields) == 3 {
|
||||
acct, err1 := RdbGetAcctPlanByKey(key)
|
||||
if acct != nil && err1 == nil && CheckIfAcctExpired(acct) {
|
||||
err1 = rdb.Del(ctx, key).Err()
|
||||
if err1 != nil {
|
||||
l4g.RedisLog.Errorf("Del Acct Plan[%s], err: %v", key, err1)
|
||||
} else {
|
||||
l4g.RedisLog.Warnf("Del Acct Plan[%s] succ", key)
|
||||
|
||||
l4g.RedisLog.Warnf("SRem Acct:%s %s", subFields[1], subFields[2])
|
||||
_ = rdb.SRem(ctx, "Acct:"+subFields[1], subFields[2])
|
||||
//return srem.Err()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if cursor == 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func ClrExpRes() {
|
||||
_ = RdbClrExpireRrRecord()
|
||||
_ = RdbClrExpirePlanRecord()
|
||||
}
|
||||
Reference in New Issue
Block a user