diff --git a/pkg/query-service/app/http_handler.go b/pkg/query-service/app/http_handler.go index e9f6e84423..116be7b220 100644 --- a/pkg/query-service/app/http_handler.go +++ b/pkg/query-service/app/http_handler.go @@ -184,6 +184,7 @@ func (aH *APIHandler) RegisterRoutes(router *mux.Router) { router.HandleFunc("/api/v1/dashboards/{uuid}", aH.deleteDashboard).Methods(http.MethodDelete) router.HandleFunc("/api/v1/user", aH.user).Methods(http.MethodPost) + router.HandleFunc("/api/v1/feedback", aH.submitFeedback).Methods(http.MethodPost) // router.HandleFunc("/api/v1/get_percentiles", aH.getApplicationPercentiles).Methods(http.MethodGet) router.HandleFunc("/api/v1/services", aH.getServices).Methods(http.MethodGet) router.HandleFunc("/api/v1/services/list", aH.getServicesList).Methods(http.MethodGet) @@ -626,6 +627,36 @@ func (aH *APIHandler) queryMetrics(w http.ResponseWriter, r *http.Request) { } +func (aH *APIHandler) submitFeedback(w http.ResponseWriter, r *http.Request) { + + var postData map[string]interface{} + err := json.NewDecoder(r.Body).Decode(&postData) + if err != nil { + aH.respondError(w, &model.ApiError{Typ: model.ErrorBadData, Err: err}, "Error reading request body") + return + } + + message, ok := postData["message"] + if !ok { + aH.respondError(w, &model.ApiError{Typ: model.ErrorBadData, Err: fmt.Errorf("message not present in request body")}, "Error reading message from request body") + return + } + messageStr := fmt.Sprintf("%s", message) + if len(messageStr) == 0 { + aH.respondError(w, &model.ApiError{Typ: model.ErrorBadData, Err: fmt.Errorf("empty message in request body")}, "empty message in request body") + return + } + + email := postData["email"] + + (*aH.pc).Enqueue(posthog.Capture{ + DistinctId: distinctId, + Event: "InProduct Feeback Submitted", + Properties: posthog.NewProperties().Set("email", email).Set("message", message), + }) + +} + func (aH *APIHandler) user(w http.ResponseWriter, r *http.Request) { user, err := parseUser(r)