forked from MixinNetwork/ocean.one
/
context.go
26 lines (23 loc) · 804 Bytes
/
context.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package middlewares
import (
"net/http"
"cloud.google.com/go/spanner"
"github.com/MixinNetwork/ocean.one/example/durable"
"github.com/MixinNetwork/ocean.one/example/session"
"github.com/newrelic/go-agent"
"github.com/unrolled/render"
)
func Context(handler http.Handler, spannerClient *spanner.Client, limiter *durable.Limiter, render *render.Render) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var nT newrelic.Transaction = nil
if v, ok := w.(newrelic.Transaction); ok {
nT = v
}
db := durable.WrapDatabase(spannerClient, nT)
ctx := session.WithRequest(r.Context(), r)
ctx = session.WithDatabase(ctx, db)
ctx = session.WithLimiter(ctx, limiter)
ctx = session.WithRender(ctx, render)
handler.ServeHTTP(w, r.WithContext(ctx))
})
}