chore/analytics (#1939)

* fix: not capturing empty filters

* feat: removing signoz_ metrics using grep

* fix: initialise companyDomain

* feat: added ttl status
This commit is contained in:
Ankit Nayan 2022-12-29 01:14:57 +05:30 committed by GitHub
parent 46e131698e
commit e03b0aa45f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 62 additions and 11 deletions

View File

@ -3291,7 +3291,9 @@ func (r *ClickHouseReader) GetLogs(ctx context.Context, params *model.LogsFilter
data := map[string]interface{}{ data := map[string]interface{}{
"lenFilters": lenFilters, "lenFilters": lenFilters,
} }
telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_LOGS_FILTERS, data) if lenFilters != 0 {
telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_LOGS_FILTERS, data)
}
query := fmt.Sprintf("%s from %s.%s", constants.LogsSQLSelect, r.logsDB, r.logsTable) query := fmt.Sprintf("%s from %s.%s", constants.LogsSQLSelect, r.logsDB, r.logsTable)
@ -3329,7 +3331,9 @@ func (r *ClickHouseReader) TailLogs(ctx context.Context, client *model.LogsTailC
data := map[string]interface{}{ data := map[string]interface{}{
"lenFilters": lenFilters, "lenFilters": lenFilters,
} }
telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_LOGS_FILTERS, data) if lenFilters != 0 {
telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_LOGS_FILTERS, data)
}
if err != nil { if err != nil {
client.Error <- err client.Error <- err
@ -3417,7 +3421,9 @@ func (r *ClickHouseReader) AggregateLogs(ctx context.Context, params *model.Logs
data := map[string]interface{}{ data := map[string]interface{}{
"lenFilters": lenFilters, "lenFilters": lenFilters,
} }
telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_LOGS_FILTERS, data) if lenFilters != 0 {
telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_LOGS_FILTERS, data)
}
query := "" query := ""
if params.GroupBy != "" { if params.GroupBy != "" {

View File

@ -256,10 +256,14 @@ func extractDashboardMetaData(path string, r *http.Request) (map[string]interfac
compositeMetricQuery, compositeMetricQueryExists := requestBody["compositeMetricQuery"] compositeMetricQuery, compositeMetricQueryExists := requestBody["compositeMetricQuery"]
compositeMetricQueryMap := compositeMetricQuery.(map[string]interface{}) compositeMetricQueryMap := compositeMetricQuery.(map[string]interface{})
signozMetricFound := false
if compositeMetricQueryExists { if compositeMetricQueryExists {
signozMetricFound = telemetry.GetInstance().CheckSigNozMetrics(compositeMetricQueryMap)
queryType, queryTypeExists := compositeMetricQueryMap["queryType"] queryType, queryTypeExists := compositeMetricQueryMap["queryType"]
if queryTypeExists { if queryTypeExists {
data["queryType"] = queryType data["queryType"] = queryType
} }
panelType, panelTypeExists := compositeMetricQueryMap["panelType"] panelType, panelTypeExists := compositeMetricQueryMap["panelType"]
if panelTypeExists { if panelTypeExists {
@ -272,15 +276,18 @@ func extractDashboardMetaData(path string, r *http.Request) (map[string]interfac
data["datasource"] = datasource data["datasource"] = datasource
} }
telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_DASHBOARDS_METADATA, data, false) if !signozMetricFound {
telemetry.GetInstance().AddActiveMetricsUser()
telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_DASHBOARDS_METADATA, data, false)
}
return data, true return data, true
} }
func getActiveMetricsOrLogs(path string, r *http.Request) { func getActiveLogs(path string, r *http.Request) {
if path == "/api/v1/dashboards/{uuid}" { // if path == "/api/v1/dashboards/{uuid}" {
telemetry.GetInstance().AddActiveMetricsUser() // telemetry.GetInstance().AddActiveMetricsUser()
} // }
if path == "/api/v1/logs" { if path == "/api/v1/logs" {
hasFilters := len(r.URL.Query().Get("q")) hasFilters := len(r.URL.Query().Get("q"))
if hasFilters > 0 { if hasFilters > 0 {
@ -297,7 +304,7 @@ func (s *Server) analyticsMiddleware(next http.Handler) http.Handler {
path, _ := route.GetPathTemplate() path, _ := route.GetPathTemplate()
dashboardMetadata, metadataExists := extractDashboardMetaData(path, r) dashboardMetadata, metadataExists := extractDashboardMetaData(path, r)
getActiveMetricsOrLogs(path, r) getActiveLogs(path, r)
lrw := NewLoggingResponseWriter(w) lrw := NewLoggingResponseWriter(w)
next.ServeHTTP(lrw, r) next.ServeHTTP(lrw, r)

View File

@ -125,6 +125,13 @@ func (mds *ModelDaoSqlite) initializeOrgPreferences(ctx context.Context) error {
// set telemetry fields from userPreferences // set telemetry fields from userPreferences
telemetry.GetInstance().SetDistinctId(org.Id) telemetry.GetInstance().SetDistinctId(org.Id)
users, _ := mds.GetUsers(ctx)
countUsers := len(users)
telemetry.GetInstance().SetCountUsers(int8(countUsers))
if countUsers > 0 {
telemetry.GetInstance().SetCompanyDomain(users[countUsers-1].Email)
}
return nil return nil
} }

View File

@ -2,6 +2,7 @@ package telemetry
import ( import (
"context" "context"
"encoding/json"
"io/ioutil" "io/ioutil"
"math/rand" "math/rand"
"net/http" "net/http"
@ -69,6 +70,23 @@ func (a *Telemetry) IsSampled() bool {
} }
func (telemetry *Telemetry) CheckSigNozMetrics(compositeMetricQueryMap map[string]interface{}) bool {
builderQueries, builderQueriesExists := compositeMetricQueryMap["builderQueries"]
if builderQueriesExists {
builderQueriesStr, _ := json.Marshal(builderQueries)
return strings.Contains(string(builderQueriesStr), "signoz_")
}
promQueries, promQueriesExists := compositeMetricQueryMap["promQueries"]
if promQueriesExists {
promQueriesStr, _ := json.Marshal(promQueries)
return strings.Contains(string(promQueriesStr), "signoz_")
}
return false
}
func (telemetry *Telemetry) AddActiveTracesUser() { func (telemetry *Telemetry) AddActiveTracesUser() {
telemetry.activeUser["traces"] = 1 telemetry.activeUser["traces"] = 1
} }
@ -92,6 +110,7 @@ type Telemetry struct {
maxRandInt int maxRandInt int
rateLimits map[string]int8 rateLimits map[string]int8
activeUser map[string]int8 activeUser map[string]int8
countUsers int8
} }
func createTelemetry() { func createTelemetry() {
@ -152,11 +171,19 @@ func createTelemetry() {
getLogsInfoInLastHeartBeatInterval, _ := telemetry.reader.GetLogsInfoInLastHeartBeatInterval(context.Background()) getLogsInfoInLastHeartBeatInterval, _ := telemetry.reader.GetLogsInfoInLastHeartBeatInterval(context.Background())
traceTTL, _ := telemetry.reader.GetTTL(context.Background(), &model.GetTTLParams{Type: constants.TraceTTL})
metricsTTL, _ := telemetry.reader.GetTTL(context.Background(), &model.GetTTLParams{Type: constants.MetricsTTL})
logsTTL, _ := telemetry.reader.GetTTL(context.Background(), &model.GetTTLParams{Type: constants.LogsTTL})
data := map[string]interface{}{ data := map[string]interface{}{
"totalSpans": totalSpans, "totalSpans": totalSpans,
"spansInLastHeartBeatInterval": spansInLastHeartBeatInterval, "spansInLastHeartBeatInterval": spansInLastHeartBeatInterval,
"getSamplesInfoInLastHeartBeatInterval": getSamplesInfoInLastHeartBeatInterval, "getSamplesInfoInLastHeartBeatInterval": getSamplesInfoInLastHeartBeatInterval,
"getLogsInfoInLastHeartBeatInterval": getLogsInfoInLastHeartBeatInterval, "getLogsInfoInLastHeartBeatInterval": getLogsInfoInLastHeartBeatInterval,
"countUsers": telemetry.countUsers,
"metricsTTLStatus": metricsTTL.Status,
"tracesTTLStatus": traceTTL.Status,
"logsTTLStatus": logsTTL.Status,
} }
for key, value := range tsInfo { for key, value := range tsInfo {
data[key] = value data[key] = value
@ -197,7 +224,7 @@ func (a *Telemetry) IdentifyUser(user *model.User) {
if !a.isTelemetryEnabled() || a.isTelemetryAnonymous() { if !a.isTelemetryEnabled() || a.isTelemetryAnonymous() {
return return
} }
a.setCompanyDomain(user.Email) a.SetCompanyDomain(user.Email)
a.operator.Enqueue(analytics.Identify{ a.operator.Enqueue(analytics.Identify{
UserId: a.ipAddress, UserId: a.ipAddress,
@ -213,7 +240,11 @@ func (a *Telemetry) IdentifyUser(user *model.User) {
} }
func (a *Telemetry) setCompanyDomain(email string) { func (a *Telemetry) SetCountUsers(countUsers int8) {
a.countUsers = countUsers
}
func (a *Telemetry) SetCompanyDomain(email string) {
email_split := strings.Split(email, "@") email_split := strings.Split(email, "@")
if len(email_split) != 2 { if len(email_split) != 2 {