Skip to content

Commit 2a683e2

Browse files
authored
Merge pull request #98 from slok/pr/97
2 parents a0ca2d2 + 03603c2 commit 2a683e2

File tree

9 files changed

+127
-25
lines changed

9 files changed

+127
-25
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
- uses: actions/checkout@v2.4.0
2020
- uses: actions/setup-go@v2.1.4
2121
with:
22-
go-version: 1.16
22+
go-version: 1.17
2323
- run: make test
2424

2525
integration-test:
@@ -30,5 +30,5 @@ jobs:
3030
- uses: actions/checkout@v2.4.0
3131
- uses: actions/setup-go@v2.1.4
3232
with:
33-
go-version: 1.16
33+
go-version: 1.17
3434
- run: make integration-test

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## [Unreleased]
44

5+
### Added
6+
7+
- Support Iris library.
8+
59
## [0.10.0] - 2021-11-16
610

711
### Added

examples/iris/main.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package main
2+
3+
import (
4+
"log"
5+
"net/http"
6+
"os"
7+
"os/signal"
8+
"syscall"
9+
10+
"github.com/kataras/iris/v12"
11+
"github.com/prometheus/client_golang/prometheus/promhttp"
12+
metrics "github.com/slok/go-http-metrics/metrics/prometheus"
13+
"github.com/slok/go-http-metrics/middleware"
14+
irismiddleware "github.com/slok/go-http-metrics/middleware/iris"
15+
)
16+
17+
const (
18+
srvAddr = ":8080"
19+
metricsAddr = ":8081"
20+
)
21+
22+
func main() {
23+
// Create our middleware.
24+
mdlw := middleware.New(middleware.Config{
25+
Recorder: metrics.NewRecorder(metrics.Config{}),
26+
})
27+
28+
// Create Iris engine and global middleware.
29+
app := iris.New()
30+
app.Use(irismiddleware.Handler("", mdlw))
31+
32+
// Add our handler.
33+
app.Get("/", func(ctx iris.Context) {
34+
ctx.StatusCode(iris.StatusAccepted)
35+
_, _ = ctx.WriteString("Hello world!")
36+
})
37+
38+
app.Get("/json", func(ctx iris.Context) {
39+
ctx.JSON(map[string]string{"hello": "world"}) // nolint: errcheck
40+
})
41+
42+
app.Get("/wrong", func(ctx iris.Context) {
43+
ctx.StatusCode(iris.StatusTooManyRequests)
44+
_, _ = ctx.WriteString("oops")
45+
46+
})
47+
48+
err := app.Build()
49+
if err != nil {
50+
panic(err)
51+
}
52+
53+
// Serve our handler.
54+
go func() {
55+
log.Printf("server listening at %s", srvAddr)
56+
if err := http.ListenAndServe(srvAddr, app); err != nil {
57+
log.Panicf("error while serving: %s", err)
58+
}
59+
}()
60+
61+
// Serve our metrics.
62+
go func() {
63+
log.Printf("metrics listening at %s", metricsAddr)
64+
if err := http.ListenAndServe(metricsAddr, promhttp.Handler()); err != nil {
65+
log.Panicf("error while serving metrics: %s", err)
66+
}
67+
}()
68+
69+
// Wait until some signal is captured.
70+
sigC := make(chan os.Signal, 1)
71+
signal.Notify(sigC, syscall.SIGTERM, syscall.SIGINT)
72+
<-sigC
73+
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ require (
88
github.com/go-chi/chi v4.1.2+incompatible
99
github.com/gorilla/mux v1.8.0
1010
github.com/julienschmidt/httprouter v1.3.0
11-
github.com/kataras/iris/v12 v12.2.0-alpha5
1211
github.com/justinas/alice v1.2.0
12+
github.com/kataras/iris/v12 v12.2.0-alpha5
1313
github.com/labstack/echo/v4 v4.6.1
1414
github.com/prometheus/client_golang v1.11.0
1515
github.com/stretchr/testify v1.7.0

go.sum

Lines changed: 18 additions & 15 deletions
Large diffs are not rendered by default.

middleware/iris/example_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func Example_irisMiddleware() {
2525

2626
// Add our handler and middleware
2727
h := func(ctx iris.Context) {
28-
ctx.WriteString("Hello world")
28+
ctx.WriteString("Hello world") // nolint: errcheck
2929
}
3030
app.Get("/", irismiddleware.Handler("", mdlw), h)
3131

middleware/iris/iris.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/slok/go-http-metrics/middleware"
1010
)
1111

12-
// Handler returns a Gin measuring middleware.
12+
// Handler returns a Iris measuring middleware.
1313
func Handler(handlerID string, m middleware.Middleware) iris.Handler {
1414
return func(ctx iris.Context) {
1515
r := &reporter{ctx: ctx}

middleware/iris/iris_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func TestMiddleware(t *testing.T) {
5151
handler: func() iris.Handler {
5252
return func(ctx iris.Context) {
5353
ctx.StatusCode(iris.StatusAccepted)
54-
ctx.WriteString("test1")
54+
_, _ = ctx.WriteString("test1")
5555
}
5656
},
5757
expRespCode: 202,
@@ -82,7 +82,7 @@ func TestMiddleware(t *testing.T) {
8282
handler: func() iris.Handler {
8383
return func(ctx iris.Context) {
8484
ctx.StatusCode(iris.StatusAccepted)
85-
ctx.JSON(map[string]string{"test": "one"})
85+
ctx.JSON(map[string]string{"test": "one"}) // nolint: errcheck
8686
}
8787
},
8888
expRespCode: 202,
@@ -109,9 +109,8 @@ func TestMiddleware(t *testing.T) {
109109

110110
// Make the request.
111111
resp := httptest.NewRecorder()
112-
if err := app.Build(); err != nil {
113-
t.Fatal(err)
114-
}
112+
err := app.Build()
113+
require.NoError(err)
115114
app.ServeHTTP(resp, req)
116115

117116
// Check.

test/integration/integration_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/gorilla/mux"
1616
"github.com/julienschmidt/httprouter"
1717
"github.com/justinas/alice"
18+
"github.com/kataras/iris/v12"
1819
"github.com/labstack/echo/v4"
1920
"github.com/prometheus/client_golang/prometheus"
2021
"github.com/prometheus/client_golang/prometheus/promhttp"
@@ -33,6 +34,7 @@ import (
3334
gojimiddleware "github.com/slok/go-http-metrics/middleware/goji"
3435
gorestfulmiddleware "github.com/slok/go-http-metrics/middleware/gorestful"
3536
httproutermiddleware "github.com/slok/go-http-metrics/middleware/httprouter"
37+
irismiddleware "github.com/slok/go-http-metrics/middleware/iris"
3638
negronimiddleware "github.com/slok/go-http-metrics/middleware/negroni"
3739
stdmiddleware "github.com/slok/go-http-metrics/middleware/std"
3840
)
@@ -82,6 +84,7 @@ func TestMiddlewarePrometheus(t *testing.T) {
8284
"Alice": {server: prepareHandlerAlice},
8385
"Gorilla": {server: prepareHandlerGorilla},
8486
"Fasthttp": {server: prepareHandlerFastHTTP},
87+
"Iris": {server: prepareHandlerIris},
8588
}
8689

8790
for name, test := range tests {
@@ -382,3 +385,23 @@ func prepareHandlerFastHTTP(m middleware.Middleware, hc []handlerConfig) server
382385

383386
return netListenerServer{ln: ln}
384387
}
388+
389+
func prepareHandlerIris(m middleware.Middleware, hc []handlerConfig) server {
390+
// Setup server and middleware.
391+
app := iris.New()
392+
app.Use(irismiddleware.Handler("", m))
393+
394+
// Set handlers.
395+
for _, h := range hc {
396+
h := h
397+
app.Handle(h.Method, h.Path, iris.Handler(func(ctx iris.Context) {
398+
time.Sleep(h.SleepDuration)
399+
ctx.StatusCode(h.Code)
400+
ctx.WriteString(h.ReturnData) // nolint: errcheck
401+
}))
402+
}
403+
404+
app.Build() // nolint: errcheck
405+
406+
return testServer{server: httptest.NewServer(app)}
407+
}

0 commit comments

Comments
 (0)