diff --git a/.travis.yml b/.travis.yml index 3fb3d40..7a6ebf0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,9 @@ sudo: required go: - "1.12" + - "1.13" - "master" script: - - env GO111MODULE=on make test \ No newline at end of file + - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.21.0 + - make lint && make test \ No newline at end of file diff --git a/Makefile b/Makefile index b9cc0c8..166697b 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,5 @@ +export GO111MODULE = on + .PHONY: default test test-cover dev # for test @@ -6,3 +8,6 @@ test: test-cover: go test -race -coverprofile=test.out ./... && go tool cover --html=test.out + +lint: + golangci-lint run diff --git a/README.md b/README.md index 6ab2d85..a9d7d78 100644 --- a/README.md +++ b/README.md @@ -11,32 +11,34 @@ Router concurrent limiter for elton, it support custom max concurrency for each package main import ( + "bytes" "time" "github.com/vicanso/elton" - responder "github.com/vicanso/elton-responder" routerLimiter "github.com/vicanso/elton-router-concurrent-limiter" ) func main() { - d := elton.New() + e := elton.New() - d.Use(routerLimiter.New(routerLimiter.Config{ + e.Use(routerLimiter.New(routerLimiter.Config{ Limiter: routerLimiter.NewLocalLimiter(map[string]uint32{ "GET /users/me": 2, }), })) - d.Use(responder.NewDefault()) - d.GET("/users/me", func(c *elton.Context) (err error) { + e.GET("/users/me", func(c *elton.Context) (err error) { time.Sleep(time.Second) - c.Body = map[string]string{ + c.BodyBuffer = bytes.NewBufferString(`{ "account": "tree", - "name": "tree.xie", - } + "name": "tree.xie" + }`) return nil }) - d.ListenAndServe(":7001") + err := e.ListenAndServe(":3000") + if err != nil { + panic(err) + } } ``` \ No newline at end of file diff --git a/example/main.go b/example/main.go new file mode 100644 index 0000000..9e103cb --- /dev/null +++ b/example/main.go @@ -0,0 +1,33 @@ +package main + +import ( + "bytes" + "time" + + "github.com/vicanso/elton" + + routerLimiter "github.com/vicanso/elton-router-concurrent-limiter" +) + +func main() { + e := elton.New() + + e.Use(routerLimiter.New(routerLimiter.Config{ + Limiter: routerLimiter.NewLocalLimiter(map[string]uint32{ + "GET /users/me": 2, + }), + })) + + e.GET("/users/me", func(c *elton.Context) (err error) { + time.Sleep(time.Second) + c.BodyBuffer = bytes.NewBufferString(`{ + "account": "tree", + "name": "tree.xie" + }`) + return nil + }) + err := e.ListenAndServe(":3000") + if err != nil { + panic(err) + } +} diff --git a/go.mod b/go.mod index 0eedbf1..4170e8c 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/vicanso/elton-router-concurrent-limiter go 1.12 require ( - github.com/stretchr/testify v1.3.0 - github.com/vicanso/elton v0.2.0 + github.com/stretchr/testify v1.4.0 + github.com/vicanso/elton v0.2.2 github.com/vicanso/hes v0.2.1 ) diff --git a/go.sum b/go.sum index c2e96a9..5cd9e0b 100644 --- a/go.sum +++ b/go.sum @@ -1,15 +1,21 @@ github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/vicanso/elton v0.2.0 h1:QlXgmq6m+9wZN7FeLD25/EhBkl8blzppviVY5U5PTm0= -github.com/vicanso/elton v0.2.0/go.mod h1:ynAUOSkZQ+pFaUsxlG5hYnJFjPpMwz8YyEBPzNh0pSg= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/vicanso/elton v0.2.2 h1:MZ5nfJFKBWDWnFPO8wRyPat8kZz3KoNBY0scemo7RFQ= +github.com/vicanso/elton v0.2.2/go.mod h1:QFZ+Un4LLBANtl0mExkqLD4uqw3JLA2ZCWUHaCsHOUg= github.com/vicanso/hes v0.2.1 h1:jRFEADmiQ30koVY/sKwlkhyXM5B3QbVVizLqrjNJgPw= github.com/vicanso/hes v0.2.1/go.mod h1:QcxOFmFfBQMhASTaLgnFayXYCgevdSeBVprt+o+3eKo= +github.com/vicanso/intranet-ip v0.0.1 h1:cYS+mExFsKqewWSuHtFwAqw/CO66GsheB/P1BPmSTx0= +github.com/vicanso/intranet-ip v0.0.1/go.mod h1:bqQ6VUhxdz0ipSb1kzd6aoZStlp+pB7CTlVmVhgLAxA= github.com/vicanso/keygrip v0.1.0 h1:/zYzoVIbREAvaxSM7bo3/oSXuuYztaP71dPBfhRoNkM= github.com/vicanso/keygrip v0.1.0/go.mod h1:cI05iOjY00NJ7oH2Z9Zdm9eJPUkpoex3XnEubK78nho= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=