diff --git a/pkg/query-service/app/http_handler.go b/pkg/query-service/app/http_handler.go index ff5144250ea3..0e0c9e036946 100644 --- a/pkg/query-service/app/http_handler.go +++ b/pkg/query-service/app/http_handler.go @@ -4527,6 +4527,56 @@ func (aH *APIHandler) sendQueryResultEvents(r *http.Request, result []*v3.Result } properties := queryInfoResult.ToMap() + referrer := r.Header.Get("Referer") + + if referrer == "" { + return + } + + properties["referrer"] = referrer + + logsExplorerMatched, _ := regexp.MatchString(`/logs/logs-explorer(?:\?.*)?$`, referrer) + traceExplorerMatched, _ := regexp.MatchString(`/traces-explorer(?:\?.*)?$`, referrer) + metricsExplorerMatched, _ := regexp.MatchString(`/metrics-explorer/explorer(?:\?.*)?$`, referrer) + dashboardMatched, _ := regexp.MatchString(`/dashboard/[a-zA-Z0-9\-]+/(new|edit)(?:\?.*)?$`, referrer) + alertMatched, _ := regexp.MatchString(`/alerts/(new|edit)(?:\?.*)?$`, referrer) + + switch { + case dashboardMatched: + properties["module_name"] = "dashboard" + case alertMatched: + properties["module_name"] = "rule" + case metricsExplorerMatched: + properties["module_name"] = "metrics-explorer" + case logsExplorerMatched: + properties["module_name"] = "logs-explorer" + case traceExplorerMatched: + properties["module_name"] = "traces-explorer" + default: + return + } + + if dashboardMatched { + if dashboardIDRegex, err := regexp.Compile(`/dashboard/([a-f0-9\-]+)/`); err == nil { + if matches := dashboardIDRegex.FindStringSubmatch(referrer); len(matches) > 1 { + properties["dashboard_id"] = matches[1] + } + } + + if widgetIDRegex, err := regexp.Compile(`widgetId=([a-f0-9\-]+)`); err == nil { + if matches := widgetIDRegex.FindStringSubmatch(referrer); len(matches) > 1 { + properties["widget_id"] = matches[1] + } + } + } + + if alertMatched { + if alertIDRegex, err := regexp.Compile(`ruleId=(\d+)`); err == nil { + if matches := alertIDRegex.FindStringSubmatch(referrer); len(matches) > 1 { + properties["rule_id"] = matches[1] + } + } + } // Check if result is empty or has no data if len(result) == 0 { @@ -4551,47 +4601,6 @@ func (aH *APIHandler) sendQueryResultEvents(r *http.Request, result []*v3.Result } } - referrer := r.Header.Get("Referer") - - if referrer == "" { - aH.Signoz.Analytics.TrackUser(r.Context(), claims.OrgID, claims.UserID, "Telemetry Query Returned Results", properties) - return - } - - properties["referrer"] = referrer - - if matched, _ := regexp.MatchString(`/dashboard/[a-zA-Z0-9\-]+/(new|edit)(?:\?.*)?$`, referrer); matched { - - if dashboardIDRegex, err := regexp.Compile(`/dashboard/([a-f0-9\-]+)/`); err == nil { - if matches := dashboardIDRegex.FindStringSubmatch(referrer); len(matches) > 1 { - properties["dashboard_id"] = matches[1] - } - } - - if widgetIDRegex, err := regexp.Compile(`widgetId=([a-f0-9\-]+)`); err == nil { - if matches := widgetIDRegex.FindStringSubmatch(referrer); len(matches) > 1 { - properties["widget_id"] = matches[1] - } - } - - properties["module_name"] = "dashboard" - aH.Signoz.Analytics.TrackUser(r.Context(), claims.OrgID, claims.UserID, "Telemetry Query Returned Results", properties) - return - } - - if matched, _ := regexp.MatchString(`/alerts/(new|edit)(?:\?.*)?$`, referrer); matched { - - if alertIDRegex, err := regexp.Compile(`ruleId=(\d+)`); err == nil { - if matches := alertIDRegex.FindStringSubmatch(referrer); len(matches) > 1 { - properties["alert_id"] = matches[1] - } - } - - properties["module_name"] = "rule" - aH.Signoz.Analytics.TrackUser(r.Context(), claims.OrgID, claims.UserID, "Telemetry Query Returned Results", properties) - return - } - aH.Signoz.Analytics.TrackUser(r.Context(), claims.OrgID, claims.UserID, "Telemetry Query Returned Results", properties) }