@@ -8,25 +8,29 @@ import (
88
99 "github.com/nuclio/errors"
1010 "github.com/nuclio/logger"
11+ "github.com/v3io/scaler-types"
1112)
1213
1314type Handler struct {
1415 logger logger.Logger
1516 HandleFunc func (http.ResponseWriter , * http.Request )
1617 resourceStarter * ResourceStarter
18+ resourceScaler scaler_types.ResourceScaler
1719 targetNameHeader string
1820 targetPathHeader string
1921 targetPort int
2022}
2123
2224func NewHandler (parentLogger logger.Logger ,
2325 resourceStarter * ResourceStarter ,
26+ resourceScaler scaler_types.ResourceScaler ,
2427 targetNameHeader string ,
2528 targetPathHeader string ,
2629 targetPort int ) (Handler , error ) {
2730 h := Handler {
2831 logger : parentLogger .GetChild ("handler" ),
2932 resourceStarter : resourceStarter ,
33+ resourceScaler : resourceScaler ,
3034 targetNameHeader : targetNameHeader ,
3135 targetPathHeader : targetPathHeader ,
3236 targetPort : targetPort ,
@@ -47,7 +51,7 @@ func (h *Handler) handleRequest(res http.ResponseWriter, req *http.Request) {
4751 forwardedHost := req .Header .Get ("X-Forwarded-Host" )
4852 forwardedPort := req .Header .Get ("X-Forwarded-Port" )
4953 originalURI := req .Header .Get ("X-Original-Uri" )
50- resourceName = req .Header .Get ("X-Service -Name" )
54+ resourceName = req .Header .Get ("X-Resource -Name" )
5155
5256 if forwardedHost != "" && forwardedPort != "" && resourceName != "" {
5357 targetURL , err = url .Parse (fmt .Sprintf ("http://%s:%s/%s" , forwardedHost , forwardedPort , originalURI ))
@@ -63,7 +67,14 @@ func (h *Handler) handleRequest(res http.ResponseWriter, req *http.Request) {
6367 res .WriteHeader (http .StatusBadRequest )
6468 return
6569 }
66- targetURL , err = url .Parse (fmt .Sprintf ("http://%s:%d/%s" , resourceName , h .targetPort , path ))
70+ serviceName , err := h .resourceScaler .ResolveServiceName (scaler_types.Resource {Name : resourceName })
71+ if err != nil {
72+ h .logger .WarnWith ("Failed resolving service name" ,
73+ "err" , errors .GetErrorStackString (err , 10 ))
74+ res .WriteHeader (http .StatusInternalServerError )
75+ return
76+ }
77+ targetURL , err = url .Parse (fmt .Sprintf ("http://%s:%d/%s" , serviceName , h .targetPort , path ))
6778 if err != nil {
6879 res .WriteHeader (h .URLBadParse (resourceName , err ))
6980 return
@@ -81,6 +92,7 @@ func (h *Handler) handleRequest(res http.ResponseWriter, req *http.Request) {
8192 return
8293 }
8394
95+ h .logger .DebugWith ("Creating reverse proxy" , "targetURL" , targetURL )
8496 proxy := httputil .NewSingleHostReverseProxy (targetURL )
8597 proxy .ServeHTTP (res , req )
8698}
0 commit comments