InitFrontend initializes frontend (either V1 -- without scheduler, or V2 -- with scheduler) or no frontend at all if downstream Prometheus URL is used instead. Returned RoundTripper can be wrapped in more round-tripper middlewares, and then eventually registered into HTTP server using the Handler f
(cfg CombinedFrontendConfig, limits v1.Limits, grpcListenPort int, log log.Logger, reg prometheus.Registerer, retry *transport.Retry)
| 38 | // into HTTP server using the Handler from this package. Returned RoundTripper is always non-nil |
| 39 | // (if there are no errors), and it uses the returned frontend (if any). |
| 40 | func InitFrontend(cfg CombinedFrontendConfig, limits v1.Limits, grpcListenPort int, log log.Logger, reg prometheus.Registerer, retry *transport.Retry) (http.RoundTripper, *v1.Frontend, *v2.Frontend, error) { |
| 41 | switch { |
| 42 | case cfg.DownstreamURL != "": |
| 43 | // If the user has specified a downstream Prometheus, then we should use that. |
| 44 | rt, err := NewDownstreamRoundTripper(cfg.DownstreamURL, http.DefaultTransport) |
| 45 | return rt, nil, nil, err |
| 46 | |
| 47 | case cfg.FrontendV2.SchedulerAddress != "": |
| 48 | // If query-scheduler address is configured, use Frontend. |
| 49 | if cfg.FrontendV2.Addr == "" { |
| 50 | addr, err := util.GetFirstAddressOf(cfg.FrontendV2.InfNames) |
| 51 | if err != nil { |
| 52 | return nil, nil, nil, errors.Wrap(err, "failed to get frontend address") |
| 53 | } |
| 54 | |
| 55 | cfg.FrontendV2.Addr = addr |
| 56 | } |
| 57 | |
| 58 | if cfg.FrontendV2.Port == 0 { |
| 59 | cfg.FrontendV2.Port = grpcListenPort |
| 60 | } |
| 61 | |
| 62 | fr, err := v2.NewFrontend(cfg.FrontendV2, limits, log, reg, retry) |
| 63 | return transport.AdaptGrpcRoundTripperToHTTPRoundTripper(fr), nil, fr, err |
| 64 | |
| 65 | default: |
| 66 | // No scheduler = use original frontend. |
| 67 | fr, err := v1.New(cfg.FrontendV1, limits, log, reg, retry) |
| 68 | if err != nil { |
| 69 | return nil, nil, nil, err |
| 70 | } |
| 71 | return transport.AdaptGrpcRoundTripperToHTTPRoundTripper(fr), fr, nil, nil |
| 72 | } |
| 73 | } |