|
|
@@ -144,7 +144,7 @@ func (s *QueryService) GetCloudCostViewTotalsHandler() func(w http.ResponseWrite
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func (s *QueryService) GetCloudCostViewTableHandler() func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
|
|
+func (s *QueryService) GetCloudCostViewTableHandler(tokenHook func(ViewTableRows) string) func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
|
|
// Return valid handler func
|
|
|
return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
|
|
tracer := otel.Tracer(tracerName)
|
|
|
@@ -178,20 +178,28 @@ func (s *QueryService) GetCloudCostViewTableHandler() func(w http.ResponseWriter
|
|
|
w.Header().Set("Content-Type", "application/json")
|
|
|
}
|
|
|
|
|
|
- resp, err := s.ViewQuerier.QueryViewTable(ctx, *request)
|
|
|
+ rows, err := s.ViewQuerier.QueryViewTable(ctx, *request)
|
|
|
if err != nil {
|
|
|
http.Error(w, fmt.Sprintf("Internal server error: %s", err), http.StatusInternalServerError)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+ resp := protocol.NewResponse().WithData(rows)
|
|
|
+
|
|
|
+ if tokenHook != nil {
|
|
|
+ resp = resp.WithMeta(map[string]any{
|
|
|
+ "token": tokenHook(rows),
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
_, spanResp := tracer.Start(ctx, "write response")
|
|
|
defer spanResp.End()
|
|
|
if format == csvFormat {
|
|
|
window := opencost.NewClosedWindow(request.Start, request.End)
|
|
|
- writeCloudCostViewTableRowsAsCSV(w, resp, window.String())
|
|
|
+ writeCloudCostViewTableRowsAsCSV(w, rows, window.String())
|
|
|
return
|
|
|
}
|
|
|
w.Header().Set("Content-Type", "application/json")
|
|
|
- protocol.WriteData(w, resp)
|
|
|
+ protocol.WriteResponse(w, resp)
|
|
|
}
|
|
|
}
|