Files
iotlcm/admin-svr/server/internal/logic/trafficcutoff/dedupe.go
T

49 lines
1.2 KiB
Go

package trafficcutoff
import (
"context"
"fmt"
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/library/cache"
"strings"
"time"
)
func acquireCutoffDedupe(ctx context.Context, card cutoffCard, runTime time.Time) (bool, string, error) {
key := cutoffDedupeKey(card)
if key == "" {
return false, "", nil
}
value := fmt.Sprintf(
"threshold=%.3f;used=%.3f;total=%.3f;remain=%.3f;time=%s",
card.TrafficCutoffThreshold,
card.UsedFlowMb,
cutoffTotalFlowMb(card),
cutoffRemainFlowMb(card),
runTime.Format("2006-01-02 15:04:05"),
)
ok, err := cache.Instance().SetIfNotExist(ctx, key, value, cutoffDedupeTTL)
return ok, key, err
}
func releaseCutoffDedupe(ctx context.Context, key string) {
key = strings.TrimSpace(key)
if key == "" {
return
}
_, _ = cache.Instance().Remove(ctx, key)
}
func releaseCutoffDedupeBatch(ctx context.Context, items []lockedCutoffCard) {
for _, item := range items {
releaseCutoffDedupe(ctx, item.DedupeKey)
}
}
func cutoffDedupeKey(card cutoffCard) string {
tenantId := strings.TrimSpace(card.TenantId)
if tenantId == "" || card.Id <= 0 {
return ""
}
return fmt.Sprintf("%s:card:%s:%d", cutoffDedupeKeyPrefix, tenantId, card.Id)
}