diff --git a/src/client/redis.go b/src/client/redis.go index 903dffc93d4d4d2c12fd0458f99c8d3d5b40a243..41cf041f1dca8f23ad21e625d67ba282fea47c22 100644 --- a/src/client/redis.go +++ b/src/client/redis.go @@ -92,3 +92,8 @@ func (r Redis) Del(key string) error { bmd := r.Conn.Del(strings.ToUpper(key)) return bmd.Err() } +func (r Redis) RPush(key string, value interface{}) (err error) { + key = fmt.Sprintf("%s-%s", strings.ToUpper(r.Prefix), strings.ToUpper(key)) + bmd := r.Conn.RPush(strings.ToUpper(key), value) + return bmd.Err() +} diff --git a/src/config/conf.go b/src/config/conf.go index 0b8f578beac1ca4cf32919389d3f000597d40e0c..73ef5dec358d091ac1b338123973bb9bd6ed0a09 100644 --- a/src/config/conf.go +++ b/src/config/conf.go @@ -12,6 +12,8 @@ var ( ) const CallRecord string = "callRecord" +const SvcTag string = "SVC" +const ApplyTag string = "APPLY" var ProxyConf = struct { MeshId string `json:"meshId"` diff --git a/src/handler/proxyhandler.go b/src/handler/proxyhandler.go index b4dc0f6d3920d463bb3498ba005e34e10fa843ee..81f24609702b0ad7a366776a8865255fb63ce080 100644 --- a/src/handler/proxyhandler.go +++ b/src/handler/proxyhandler.go @@ -54,10 +54,18 @@ func Proxy(c *gin.Context) { if sensitiveflag == false { res = service.SensitiveFilter(proxyData, res) } - //调用痕迹进入队列 - //service.RecordCall(proxyData, resp.StatusCode, respbody) //服务调用计次 - service.CallCounts(proxyData) + err = service.CallCounts(proxyData) + if err != nil { + Return(err.Error()) + return nil + } + ////申请调用计次 + err = service.ApplyCallCounts(proxyData) + if err != nil { + Return(err.Error()) + return nil + } Return(res) return nil })) diff --git a/src/service/field.go b/src/service/field.go index 3768c7ef4de525ae7eeb4a4b36a08e5f73048c73..a29330891e49ce245f1227a54d12e9a3ed06bba1 100644 --- a/src/service/field.go +++ b/src/service/field.go @@ -35,7 +35,7 @@ func QueryCallsCount(filter model.ProxyData) (call bool, sensitiveCall bool, err return } date := time.Now().Format(config.LocalDateFormat) - key := fmt.Sprintf("%s-%s", date, filter.Apply_id) + key := fmt.Sprintf("%d-%s", filter.Apply_id, date) countStr, err := redis.Get(key) if err != nil && err.Error() != `redis: nil` { return @@ -123,16 +123,14 @@ func CallCounts(proxyData model.ProxyData) (err error) { date := time.Now().Format(config.LocalDateFormat) aMonBefore := time.Now().AddDate(0, -1, 0).Format(config.LocalDateFormat) - str, err := redis.Get(string(proxyData.Service_id)) + str, err := redis.Get(fmt.Sprintf("%s-%d", config.SvcTag, proxyData.Service_id)) if err != nil && err.Error() != `redis: nil` { return } - if err != nil { - return - } + dateMap := make(map[string]int) if str != "" { - err = json.Unmarshal([]byte(str), dateMap) + err = json.Unmarshal([]byte(str), &dateMap) if err != nil { return } @@ -150,7 +148,24 @@ func CallCounts(proxyData model.ProxyData) (err error) { } else { dateMap[date] = 1 } - err = redis.Set(string(proxyData.Service_id), dateMap, -1) + content, err := json.Marshal(dateMap) + //fmt.Sprintf("SVCID-%d",proxyData.Service_id) + err = redis.Set(fmt.Sprintf("%s-%d", config.SvcTag, proxyData.Service_id), content, -1) + return +} + +/* +申请调用记录 +*/ +func ApplyCallCounts(proxyData model.ProxyData) (err error) { + redis, err := client.GetRedisClient() + if err != nil { + fmt.Println(err.Error()) + return + } + date := time.Now().Format(config.LocalDateTimeFormat) + err = redis.RPush(fmt.Sprintf("%s-%d", config.ApplyTag, proxyData.Apply_id), []byte(date)) + fmt.Println("rpush data to list failed:", err) return }