169 lines
3.6 KiB
Go
169 lines
3.6 KiB
Go
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()
|
|
} |