QS: logs pipelines preview http handler (#3701)

* feat: add logsparsingpipeline controller api for pipeline previews

* feat: add http handler and route for generating pipeline previews

* feat: use a response model for pipeline previews response
This commit is contained in:
Raj Kamal Singh 2023-10-10 14:09:55 +05:30 committed by GitHub
parent dcea79cef3
commit a84a70df14
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 0 deletions

View File

@ -2320,6 +2320,7 @@ func (aH *APIHandler) RegisterLogsRoutes(router *mux.Router, am *AuthMiddleware)
subRouter.HandleFunc("/aggregate", am.ViewAccess(aH.logAggregate)).Methods(http.MethodGet)
// log pipelines
subRouter.HandleFunc("/pipelines/preview", am.ViewAccess(aH.PreviewLogsPipelinesHandler)).Methods(http.MethodPost)
subRouter.HandleFunc("/pipelines/{version}", am.ViewAccess(aH.ListLogsPipelinesHandler)).Methods(http.MethodGet)
subRouter.HandleFunc("/pipelines", am.EditAccess(aH.CreateLogsPipeline)).Methods(http.MethodPost)
}
@ -2455,6 +2456,26 @@ func parseAgentConfigVersion(r *http.Request) (int, *model.ApiError) {
return int(version64), nil
}
func (ah *APIHandler) PreviewLogsPipelinesHandler(w http.ResponseWriter, r *http.Request) {
req := logparsingpipeline.PipelinesPreviewRequest{}
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
RespondError(w, model.BadRequest(err), nil)
return
}
resultLogs, apiErr := ah.LogsParsingPipelineController.PreviewLogsPipelines(
r.Context(), &req,
)
if apiErr != nil {
RespondError(w, apiErr, nil)
return
}
ah.Respond(w, resultLogs)
}
func (ah *APIHandler) ListLogsPipelinesHandler(w http.ResponseWriter, r *http.Request) {
version, err := parseAgentConfigVersion(r)

View File

@ -140,3 +140,29 @@ func (ic *LogParsingPipelineController) GetPipelinesByVersion(
Pipelines: pipelines,
}, nil
}
type PipelinesPreviewRequest struct {
Pipelines []Pipeline `json:"pipelines"`
Logs []model.SignozLog `json:"logs"`
}
type PipelinesPreviewResponse struct {
OutputLogs []model.SignozLog `json:"logs"`
}
func (ic *LogParsingPipelineController) PreviewLogsPipelines(
ctx context.Context,
request *PipelinesPreviewRequest,
) (*PipelinesPreviewResponse, *model.ApiError) {
result, err := SimulatePipelinesProcessing(
ctx, request.Pipelines, request.Logs,
)
if err != nil {
return nil, err
}
return &PipelinesPreviewResponse{
OutputLogs: result,
}, nil
}