return selected
}
-func (rtr *router) sendResponse(w http.ResponseWriter, req *http.Request, resp interface{}, opts responseOptions) {
+func (rtr *router) sendResponse(w http.ResponseWriter, req *http.Request, resp interface{}, opts responseOptions, reqId string) {
var tmp map[string]interface{}
if resp, ok := resp.(http.Handler); ok {
return
}
+ w.Header().Set("X-Request-Id", reqId)
err := rtr.transcode(resp, &tmp)
if err != nil {
rtr.sendError(w, err)
}
}
ctx := auth.NewContext(req.Context(), creds)
- ctx = arvados.ContextWithRequestID(ctx, req.Header.Get("X-Request-Id"))
+ var reqId string
+ if reqId = req.Header.Get("X-Request-Id"); reqId == "" {
+ reqIDGen := httpserver.IDGenerator{Prefix: "req-"}
+ reqId = reqIDGen.Next()
+ }
+ ctx = arvados.ContextWithRequestID(ctx, reqId)
logger.WithFields(logrus.Fields{
"apiEndpoint": endpoint,
"apiOptsType": fmt.Sprintf("%T", opts),
rtr.sendError(w, err)
return
}
- rtr.sendResponse(w, req, resp, respOpts)
+ rtr.sendResponse(w, req, resp, respOpts, reqId)
})
}