Commit a7d0b388 authored by 张宇迪's avatar 张宇迪

update

parent d9b96fc6
...@@ -9,6 +9,7 @@ require ( ...@@ -9,6 +9,7 @@ require (
github.com/agrison/go-tablib v0.0.0-20160310143025-4930582c22ee // indirect github.com/agrison/go-tablib v0.0.0-20160310143025-4930582c22ee // indirect
github.com/agrison/mxj v0.0.0-20160310142625-1269f8afb3b4 // indirect github.com/agrison/mxj v0.0.0-20160310142625-1269f8afb3b4 // indirect
github.com/bndr/gotabulate v1.1.2 // indirect github.com/bndr/gotabulate v1.1.2 // indirect
github.com/clbanning/mxj v1.8.4 // indirect
github.com/fatih/structs v1.1.0 // indirect github.com/fatih/structs v1.1.0 // indirect
github.com/gin-gonic/contrib v0.0.0-20190923054218-35076c1b2bea github.com/gin-gonic/contrib v0.0.0-20190923054218-35076c1b2bea
github.com/gin-gonic/gin v1.4.0 github.com/gin-gonic/gin v1.4.0
......
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw= cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s=
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Chronokeeper/anyxml v0.0.0-20160530174208-54457d8e98c6 h1:Etfj2lhXyrYemgmWzEtEQQb1kezeEXc8jVjkQUyJnWI= github.com/Chronokeeper/anyxml v0.0.0-20160530174208-54457d8e98c6 h1:Etfj2lhXyrYemgmWzEtEQQb1kezeEXc8jVjkQUyJnWI=
...@@ -21,6 +22,8 @@ github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb ...@@ -21,6 +22,8 @@ github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/bndr/gotabulate v1.1.2 h1:yC9izuZEphojb9r+KYL4W9IJKO/ceIO8HDwxMA24U4c= github.com/bndr/gotabulate v1.1.2 h1:yC9izuZEphojb9r+KYL4W9IJKO/ceIO8HDwxMA24U4c=
github.com/bndr/gotabulate v1.1.2/go.mod h1:0+8yUgaPTtLRTjf49E8oju7ojpU11YmXyvq1LbPAb3U= github.com/bndr/gotabulate v1.1.2/go.mod h1:0+8yUgaPTtLRTjf49E8oju7ojpU11YmXyvq1LbPAb3U=
github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I=
github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
...@@ -104,6 +107,7 @@ github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd ...@@ -104,6 +107,7 @@ github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd
github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
...@@ -141,6 +145,7 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ ...@@ -141,6 +145,7 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
...@@ -198,6 +203,7 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/p ...@@ -198,6 +203,7 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/p
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2 h1:z99zHgr7hKfrUcX/KsoJk5FJfjTceCKIp96+biqP4To=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
...@@ -217,6 +223,7 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks ...@@ -217,6 +223,7 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/flosch/pongo2.v3 v3.0.0-20141028000813-5e81b817a0c4 h1:eyQQg/uGuZ3ndaBhqteakHpVW+dSOPalilfC9RpM2TA= gopkg.in/flosch/pongo2.v3 v3.0.0-20141028000813-5e81b817a0c4 h1:eyQQg/uGuZ3ndaBhqteakHpVW+dSOPalilfC9RpM2TA=
gopkg.in/flosch/pongo2.v3 v3.0.0-20141028000813-5e81b817a0c4/go.mod h1:bJkYqV5pg6+Z7MsSu/hSb1zsPT955hBW2QHLE1jm4wA= gopkg.in/flosch/pongo2.v3 v3.0.0-20141028000813-5e81b817a0c4/go.mod h1:bJkYqV5pg6+Z7MsSu/hSb1zsPT955hBW2QHLE1jm4wA=
......
package handler
import (
"github.com/gin-gonic/gin"
"gitlab.wodcloud.com/apaas/apaas-meshproxy/src/tools"
"time"
)
func Health(c *gin.Context) {
c.JSON(200, gin.H{
"host": c.Request.Host,
"header": c.Request.Header,
"serverTime": time.Now(),
"ip": tools.RemoteIp(c.Request),
})
}
...@@ -6,6 +6,7 @@ import ( ...@@ -6,6 +6,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/vulcand/oxy/forward" "github.com/vulcand/oxy/forward"
"github.com/vulcand/oxy/testutils" "github.com/vulcand/oxy/testutils"
"gitlab.wodcloud.com/apaas/apaas-meshproxy/src/model"
"gitlab.wodcloud.com/apaas/apaas-meshproxy/src/service" "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/service"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
...@@ -16,19 +17,24 @@ import ( ...@@ -16,19 +17,24 @@ import (
var Resp *http.Response var Resp *http.Response
func Proxy(c *gin.Context) { func Proxy(c *gin.Context) {
appId := c.Param("appId") applyId := c.Query("applyId")
if applyId == "" {
res := model.WebRes{}
res.Data = "applyId不能为空"
c.JSON(200, res)
return
}
//获取服务相关信息 //获取服务相关信息
proxyData, err := service.GetRealPath(appId) proxyData, err := service.GetRealPath(applyId)
if err != nil { if err != nil {
c.Error(err) c.Error(err)
return return
} }
f, _ := forward.New(forward.PassHostHeader(true), forward.ResponseModifier(func(resp *http.Response) error { f, _ := forward.New(forward.PassHostHeader(true), forward.ResponseModifier(func(resp *http.Response) error {
Resp = resp Resp = resp
//判断是否可以调用 //判断是否超过调用次数是否可以调用
callflag, sensitiveflag, err := service.QueryCallsCount(appId, proxyData) callflag, sensitiveflag, err := service.QueryCallsCount(proxyData)
if err != nil { if err != nil {
Return(err.Error()) Return(err.Error())
return nil return nil
...@@ -37,11 +43,8 @@ func Proxy(c *gin.Context) { ...@@ -37,11 +43,8 @@ func Proxy(c *gin.Context) {
Return(`调用达到当日限定次数`) Return(`调用达到当日限定次数`)
return nil return nil
} }
respbody, _ := ioutil.ReadAll(resp.Body) respbody, _ := ioutil.ReadAll(resp.Body)
var res interface{} var res interface{}
res = respbody res = respbody
//是否需要过滤字段 //是否需要过滤字段
if proxyData.ResFields != "" { if proxyData.ResFields != "" {
...@@ -52,7 +55,9 @@ func Proxy(c *gin.Context) { ...@@ -52,7 +55,9 @@ func Proxy(c *gin.Context) {
res = service.SensitiveFilter(proxyData, res) res = service.SensitiveFilter(proxyData, res)
} }
//调用痕迹进入队列 //调用痕迹进入队列
service.RecordCall(proxyData, resp.StatusCode, res) //service.RecordCall(proxyData, resp.StatusCode, respbody)
//服务调用计次
service.CallCounts(proxyData)
Return(res) Return(res)
return nil return nil
})) }))
......
...@@ -18,10 +18,10 @@ import ( ...@@ -18,10 +18,10 @@ import (
var ( var (
argPort = pflag.Int("port", 8011, "") argPort = pflag.Int("port", 8011, "")
argPrefix = pflag.String("prefix", "/bgmesh/fiddler", "") argPrefix = pflag.String("prefix", "/bgmesh/fiddler", "")
redisUrl = pflag.String("redisUrl", "redis://localhost:63793", "") redisUrl = pflag.String("redisUrl", "redis://localhost:63799", "")
redisTag = pflag.String("redisTag", "apaas-mesh-proxy", "") redisTag = pflag.String("redisTag", "apaas-mesh-proxy", "")
confPath = pflag.String("confPath", "/app/config/proxy.json", "") confPath = pflag.String("confPath", "/app/config/proxy.json", "")
dbURL = pflag.String("dbURL", "host=localhost port=5432 user=postgres password=passwd123 dbname=apaas sslmode=disable", "") dbURL = pflag.String("dbURL", "host=localhost port=54323 user=postgres password=passwd123 dbname=apaas sslmode=disable", "")
dbDriverName = pflag.String("dbDriverName", "postgres", "") dbDriverName = pflag.String("dbDriverName", "postgres", "")
) )
......
...@@ -10,3 +10,9 @@ type ProxyData struct { ...@@ -10,3 +10,9 @@ type ProxyData struct {
Service_id int `json:"service_id" xorm:"service_id"` Service_id int `json:"service_id" xorm:"service_id"`
User_id string `json:"user_id" xorm:"user_id"` User_id string `json:"user_id" xorm:"user_id"`
} }
type WebRes struct {
Success int `json:"success"`
ErrMsg string `json:"errMsg,omitempty"`
Data interface{} `json:"data,omitempty"`
}
...@@ -33,5 +33,6 @@ func Load(middleware ...gin.HandlerFunc) http.Handler { ...@@ -33,5 +33,6 @@ func Load(middleware ...gin.HandlerFunc) http.Handler {
{ {
root.Any("/:appId/proxy", handler.Proxy) root.Any("/:appId/proxy", handler.Proxy)
} }
e.GET("/health", handler.Health)
return e return e
} }
...@@ -26,27 +26,24 @@ func CheckSensitiveField() bool { ...@@ -26,27 +26,24 @@ func CheckSensitiveField() bool {
} }
//获取当日调用次数 返回是否到达当日访问量,是否到达敏感字段访问量 //获取当日调用次数 返回是否到达当日访问量,是否到达敏感字段访问量
func QueryCallsCount(applyId string, filter model.ProxyData) (call bool, sensitiveCall bool, err error) { func QueryCallsCount(filter model.ProxyData) (call bool, sensitiveCall bool, err error) {
//连接redis //连接redis
redis, err := client.GetRedisClient() redis, err := client.GetRedisClient()
if err != nil { if err != nil {
return return
} }
countStr, err := redis.Get(applyId) date := time.Now().Format(config.LocalDateFormat)
key := fmt.Sprintf("%s-%s", date, filter.Apply_id)
countStr, err := redis.Get(key)
if err != nil && err.Error() != `redis: nil` { if err != nil && err.Error() != `redis: nil` {
return return
} }
//// 更新调用次数
//err = UpdateCallsCount(applyId)
//if err != nil {
// return false, err
//}
var count int var count int
call = true call = true
sensitiveCall = true sensitiveCall = true
if countStr == "" { if countStr == "" {
expire := GetExpire() expire := GetExpire()
err = redis.Set(applyId, 1, expire) err = redis.Set(key, 1, expire)
count = 1 count = 1
} else { } else {
count, err = strconv.Atoi(countStr) count, err = strconv.Atoi(countStr)
...@@ -62,7 +59,7 @@ func QueryCallsCount(applyId string, filter model.ProxyData) (call bool, sensiti ...@@ -62,7 +59,7 @@ func QueryCallsCount(applyId string, filter model.ProxyData) (call bool, sensiti
sensitiveCall = false sensitiveCall = false
} }
expire := GetExpire() expire := GetExpire()
err = redis.Set(applyId, count+1, expire) err = redis.Set(key, count+1, expire)
} }
return return
} }
...@@ -81,7 +78,7 @@ func GetExpire() time.Duration { ...@@ -81,7 +78,7 @@ func GetExpire() time.Duration {
} }
//记录调用痕迹 //记录调用痕迹
func RecordCall(proxyData model.ProxyData, status int, res interface{}) { func RecordCall(proxyData model.ProxyData, status int, res []byte) {
acc := dao.Service_request_record{} acc := dao.Service_request_record{}
redis, err := client.GetRedisClient() redis, err := client.GetRedisClient()
if err != nil { if err != nil {
...@@ -89,7 +86,10 @@ func RecordCall(proxyData model.ProxyData, status int, res interface{}) { ...@@ -89,7 +86,10 @@ func RecordCall(proxyData model.ProxyData, status int, res interface{}) {
return return
} }
if status != 200 { if status != 200 {
acc.Error = string(res.([]byte)) acc.Error = string(res[:])
//mjson,_ :=json.Marshal(res)
//mString :=string(mjson)
//acc.Error = mString
} }
acc.Request_time = tools.JsonTime(time.Now()) acc.Request_time = tools.JsonTime(time.Now())
acc.Apply_id = proxyData.Apply_id acc.Apply_id = proxyData.Apply_id
...@@ -97,11 +97,8 @@ func RecordCall(proxyData model.ProxyData, status int, res interface{}) { ...@@ -97,11 +97,8 @@ func RecordCall(proxyData model.ProxyData, status int, res interface{}) {
acc.Service_id = proxyData.Service_id acc.Service_id = proxyData.Service_id
acc.Date_day = time.Now().Day() acc.Date_day = time.Now().Day()
fmt.Println(time.Now().Month().String()) fmt.Println(time.Now().Month().String())
//acc.Date_month,err = strconv.Atoi(time.Now().Month().String()) acc.Date_month = int(time.Now().Month())
//if err!=nil{
// fmt.Println(err.Error())
// return
//}
acc.Date_year = time.Now().Year() acc.Date_year = time.Now().Year()
acc.Status = status acc.Status = status
b, _ := json.Marshal(acc) b, _ := json.Marshal(acc)
...@@ -114,6 +111,47 @@ func RecordCall(proxyData model.ProxyData, status int, res interface{}) { ...@@ -114,6 +111,47 @@ func RecordCall(proxyData model.ProxyData, status int, res interface{}) {
return return
} }
//服务调用计次
func CallCounts(proxyData model.ProxyData) (err error) {
redis, err := client.GetRedisClient()
if err != nil {
fmt.Println(err.Error())
return
}
date := time.Now().Format(config.LocalDateFormat)
aMonBefore := time.Now().AddDate(0, -1, 0).Format(config.LocalDateFormat)
str, err := redis.Get(string(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)
if err != nil {
return
}
if _, ok := dateMap[date]; ok {
dateMap[date] = dateMap[date] + 1
} else {
dateMap[date] = 1
}
for k, _ := range dateMap {
if tools.CompareDate(k, aMonBefore) {
delete(dateMap, k)
}
}
} else {
dateMap[date] = 1
}
err = redis.Set(string(proxyData.Service_id), dateMap, -1)
return
}
//过滤返回字段 //过滤返回字段
func FiledFilter(proxyData model.ProxyData, respbody []byte) interface{} { func FiledFilter(proxyData model.ProxyData, respbody []byte) interface{} {
model := make(map[string]interface{}) model := make(map[string]interface{})
...@@ -280,7 +318,7 @@ func FilterSensituveField(model interface{}, returnData interface{}) (body inter ...@@ -280,7 +318,7 @@ func FilterSensituveField(model interface{}, returnData interface{}) (body inter
} }
// 获取真实地址和返回结构、调用限定次数 // 获取真实地址和返回结构、调用限定次数
func GetRealPath(appId string) (res model.ProxyData, err error) { func GetRealPath(applyId string) (res model.ProxyData, err error) {
db, err := client.GetConnect() db, err := client.GetConnect()
if err != nil { if err != nil {
return return
...@@ -289,12 +327,12 @@ func GetRealPath(appId string) (res model.ProxyData, err error) { ...@@ -289,12 +327,12 @@ func GetRealPath(appId string) (res model.ProxyData, err error) {
Select(`service_apply.res_fields as res_fields,service.req_url as req_url,service_request_spcs.count as count,service_safe_config.sensituve_word as sensituve_word Select(`service_apply.res_fields as res_fields,service.req_url as req_url,service_request_spcs.count as count,service_safe_config.sensituve_word as sensituve_word
,service_request_spcs.sensitive_count as sensitive_count,service_apply.service_id as service_id,service_apply.id as apply_id,service_apply.user_id as user_id`). ,service_request_spcs.sensitive_count as sensitive_count,service_apply.service_id as service_id,service_apply.id as apply_id,service_apply.user_id as user_id`).
Table(`service`). Table(`service`).
Join(`left`, `service_apply`, `service_apply.service_id = service.id`). Join(`inner`, `service_apply`, `service_apply.service_id = service.id`).
Join(`left`, `service_request_spcs`, `service_request_spcs.id = service_apply.request_spcs_id`). Join(`left`, `service_request_spcs`, `service_request_spcs.id = service_apply.request_spcs_id`).
Join(`left`, `service_safe_config`, `service_apply.service_id = service_safe_config.service_id`). Join(`left`, `service_safe_config`, `service_apply.service_id = service_safe_config.service_id`).
Where(`service_apply.id=?`, appId).Get(&res) Where(`service_apply.id=?`, applyId).Get(&res)
if !has { if !has {
err = errors.New(`未找到申请服务!`) err = errors.New(`未找到发布的服务!`)
} }
return return
} }
...@@ -22,3 +22,13 @@ type JsonDate time.Time ...@@ -22,3 +22,13 @@ type JsonDate time.Time
func (j JsonDate) MarshalJSON() ([]byte, error) { func (j JsonDate) MarshalJSON() ([]byte, error) {
return []byte(`"` + time.Time(j).Format(config.LocalDateFormat) + `"`), nil return []byte(`"` + time.Time(j).Format(config.LocalDateFormat) + `"`), nil
} }
//date1 小于于 date2 返回
func CompareDate(date1, date2 string) bool {
t1time, _ := time.ParseInLocation("2006-01-02 15:04:05", date1, time.Local)
t2time, _ := time.ParseInLocation("2006-01-02 15:04:05", date2, time.Local)
if t1time.Before(t2time) {
return true
}
return false
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment