Skip to content

Commit 3ca3a59

Browse files
authored
pkg/web: remove dependency injection (grafana#49123)
* pkg/web: store http.Handler internally * pkg/web: remove injection Removes any injection code from pkg/web. It already was no longer functional, as we already only injected into `http.Handler`, meaning we only inject ctx.Req and ctx.Resp. Any other types (*Context, *ReqContext) were already accessed using the http.Request.Context.Value() method. * *: remove type mappings Removes any call to the previously removed TypeMapper, as those were non-functional already. * pkg/web: remove Context.Invoke was no longer used outside of pkg/web and also no longer functional
1 parent 1fcb2f4 commit 3ca3a59

File tree

14 files changed

+26
-265
lines changed

14 files changed

+26
-265
lines changed

pkg/api/common_test.go

-3
Original file line numberDiff line numberDiff line change
@@ -411,10 +411,7 @@ func setupHTTPServerWithCfgDb(t *testing.T, useFakeAccessControl, enableAccessCo
411411
m.Use(func(c *web.Context) {
412412
initCtx.Context = c
413413
initCtx.Logger = log.New("api-test")
414-
c.Map(initCtx)
415-
416414
c.Req = c.Req.WithContext(ctxkey.Set(c.Req.Context(), initCtx))
417-
c.Map(c.Req)
418415
})
419416

420417
m.Use(accesscontrol.LoadPermissionsMiddleware(hs.AccessControl))

pkg/infra/usagestats/service/api_test.go

-3
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,6 @@ func contextProvider(tc *testContext) web.Handler {
103103
SkipCache: true,
104104
Logger: log.New("test"),
105105
}
106-
c.Map(reqCtx)
107-
108106
c.Req = c.Req.WithContext(ctxkey.Set(c.Req.Context(), reqCtx))
109-
c.Map(c.Req)
110107
}
111108
}

pkg/middleware/request_metrics.go

-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ func RequestMetrics(features featuremgmt.FeatureToggles) web.Handler {
5656
now := time.Now()
5757
httpRequestsInFlight.Inc()
5858
defer httpRequestsInFlight.Dec()
59-
c.Map(c.Req)
6059
c.Next()
6160

6261
handler := "unknown"

pkg/middleware/request_tracing.go

-2
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ func RequestTracing(tracer tracing.Tracer) web.Handler {
5555
ctx, span := tracer.Start(req.Context(), fmt.Sprintf("HTTP %s %s", req.Method, req.URL.Path), trace.WithLinks(trace.LinkFromContext(wireContext)))
5656

5757
c.Req = req.WithContext(ctx)
58-
c.Map(c.Req)
59-
6058
c.Next()
6159

6260
// Only call span.Finish when a route operation name have been set,

pkg/services/accesscontrol/middleware_test.go

-3
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,6 @@ func contextProvider() web.Handler {
9090
IsSignedIn: true,
9191
SkipCache: true,
9292
}
93-
c.Map(reqCtx)
94-
9593
c.Req = c.Req.WithContext(ctxkey.Set(c.Req.Context(), reqCtx))
96-
c.Map(c.Req)
9794
}
9895
}

pkg/services/accesscontrol/resourcepermissions/api_test.go

-3
Original file line numberDiff line numberDiff line change
@@ -500,10 +500,7 @@ func contextProvider(tc *testContext) web.Handler {
500500
SkipCache: true,
501501
Logger: log.New("test"),
502502
}
503-
c.Map(reqCtx)
504-
505503
c.Req = c.Req.WithContext(ctxkey.Set(c.Req.Context(), reqCtx))
506-
c.Map(c.Req)
507504
}
508505
}
509506

pkg/services/contexthandler/contexthandler.go

+1-4
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,8 @@ func (h *ContextHandler) Middleware(mContext *web.Context) {
9595
Logger: log.New("context"),
9696
}
9797

98-
// Inject ReqContext into a request context and replace the request instance in the macaron context
98+
// Inject ReqContext into http.Request.Context
9999
mContext.Req = mContext.Req.WithContext(ctxkey.Set(mContext.Req.Context(), reqContext))
100-
mContext.Map(mContext.Req)
101100

102101
traceID := tracing.TraceIDFromContext(mContext.Req.Context(), false)
103102
if traceID != "" {
@@ -153,8 +152,6 @@ func (h *ContextHandler) Middleware(mContext *web.Context) {
153152
{Num: reqContext.UserId}},
154153
)
155154

156-
mContext.Map(reqContext)
157-
158155
// update last seen every 5min
159156
if reqContext.ShouldUpdateLastSeenAt() {
160157
reqContext.Logger.Debug("Updating last user_seen_at", "user_id", reqContext.UserId)

pkg/services/ngalert/metrics/ngalert.go

+2-9
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"github.com/prometheus/client_golang/prometheus/promauto"
1313

1414
"github.com/grafana/grafana/pkg/api/response"
15-
"github.com/grafana/grafana/pkg/api/routing"
1615
"github.com/grafana/grafana/pkg/models"
1716
legacyMetrics "github.com/grafana/grafana/pkg/services/alerting/metrics"
1817
apimodels "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
@@ -279,20 +278,14 @@ func (m *OrgRegistries) RemoveOrgRegistry(org int64) {
279278
func Instrument(
280279
method,
281280
path string,
282-
action interface{},
281+
action func(*models.ReqContext) response.Response,
283282
metrics *API,
284283
) web.Handler {
285284
normalizedPath := MakeLabelValue(path)
286285

287286
return func(c *models.ReqContext) {
288287
start := time.Now()
289-
var res response.Response
290-
val, err := c.Invoke(action)
291-
if err == nil && val != nil && len(val) > 0 {
292-
res = val[0].Interface().(response.Response)
293-
} else {
294-
res = routing.ServerError(err)
295-
}
288+
res := action(c)
296289

297290
// TODO: We could look up the datasource type via our datasource service
298291
var backend string

pkg/services/serviceaccounts/api/api_test.go

-3
Original file line numberDiff line numberDiff line change
@@ -238,10 +238,7 @@ func setupTestServer(t *testing.T, svc *tests.ServiceAccountMock,
238238
SignedInUser: signedUser,
239239
Logger: log.New("serviceaccounts-test"),
240240
}
241-
c.Map(ctx)
242-
243241
c.Req = c.Req.WithContext(ctxkey.Set(c.Req.Context(), ctx))
244-
c.Map(c.Req)
245242
})
246243
a.RouterRegister.Register(m.Router)
247244
return m, a

pkg/web/context.go

+5-17
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,16 @@ import (
2020
"net"
2121
"net/http"
2222
"net/url"
23-
"reflect"
2423
"strconv"
2524
"strings"
2625

2726
"github.com/grafana/grafana/pkg/infra/log"
2827
)
2928

30-
// ContextInvoker is an inject.FastInvoker wrapper of func(ctx *Context).
31-
type ContextInvoker func(ctx *Context)
32-
33-
// Invoke implements inject.FastInvoker which simplifies calls of `func(ctx *Context)` function.
34-
func (invoke ContextInvoker) Invoke(params []interface{}) ([]reflect.Value, error) {
35-
invoke(params[0].(*Context))
36-
return nil, nil
37-
}
38-
3929
// Context represents the runtime context of current request of Macaron instance.
4030
// It is the integration of most frequently used middlewares and helper methods.
4131
type Context struct {
42-
Injector
43-
handlers []Handler
32+
handlers []http.Handler
4433
index int
4534

4635
*Router
@@ -50,12 +39,12 @@ type Context struct {
5039
logger log.Logger
5140
}
5241

53-
func (ctx *Context) handler() Handler {
42+
func (ctx *Context) handler() http.Handler {
5443
if ctx.index < len(ctx.handlers) {
5544
return ctx.handlers[ctx.index]
5645
}
5746
if ctx.index == len(ctx.handlers) {
58-
return func() {}
47+
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})
5948
}
6049
panic("invalid index for context handler")
6150
}
@@ -68,9 +57,8 @@ func (ctx *Context) Next() {
6857

6958
func (ctx *Context) run() {
7059
for ctx.index <= len(ctx.handlers) {
71-
if _, err := ctx.Invoke(ctx.handler()); err != nil {
72-
panic(err)
73-
}
60+
ctx.handler().ServeHTTP(ctx.Resp, ctx.Req)
61+
7462
ctx.index++
7563
if ctx.Resp.Written() {
7664
return

pkg/web/inject.go

-192
This file was deleted.

0 commit comments

Comments
 (0)