/
backend_factory.go
35 lines (32 loc) · 1.29 KB
/
backend_factory.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
27
28
29
30
31
32
33
34
35
package main
import (
"context"
"net/http"
cb "github.com/devopsfaith/krakend-circuitbreaker/gobreaker/proxy"
"github.com/devopsfaith/krakend-martian"
metrics "github.com/devopsfaith/krakend-metrics/gin"
"github.com/devopsfaith/krakend-oauth2-clientcredentials"
juju "github.com/devopsfaith/krakend-ratelimit/juju/proxy"
"github.com/devopsfaith/krakend/config"
"github.com/devopsfaith/krakend/logging"
"github.com/devopsfaith/krakend/proxy"
)
// NewBackendFactory creates a BackendFactory by stacking all the available middlewares:
// - oauth2 client credentials
// - martian
// - rate-limit
// - circuit breaker
// - metrics collector
func NewBackendFactory(logger logging.Logger, metricCollector *metrics.Metrics) proxy.BackendFactory {
requestExecutorFactory := func(cfg *config.Backend) proxy.HTTPRequestExecutor {
clientFactory := oauth2client.NewHTTPClient(cfg)
return func(ctx context.Context, req *http.Request) (*http.Response, error) {
return clientFactory(ctx).Do(req.WithContext(ctx))
}
}
backendFactory := martian.NewConfiguredBackendFactory(logger, requestExecutorFactory)
backendFactory = juju.BackendFactory(backendFactory)
backendFactory = cb.BackendFactory(backendFactory)
backendFactory = metricCollector.BackendFactory("backend", backendFactory)
return backendFactory
}