From 1374444f366617a4d1faf780b88e303d6f86660a Mon Sep 17 00:00:00 2001 From: Ankit Nayan Date: Tue, 11 Oct 2022 00:43:54 +0530 Subject: [PATCH] chore: analytics --- .../app/clickhouseReader/reader.go | 34 +++++++++++++++++++ pkg/query-service/config/prometheus.yml | 2 +- pkg/query-service/interfaces/interface.go | 2 +- pkg/query-service/model/response.go | 11 ++++++ pkg/query-service/telemetry/telemetry.go | 13 +++++++ 5 files changed, 60 insertions(+), 2 deletions(-) diff --git a/pkg/query-service/app/clickhouseReader/reader.go b/pkg/query-service/app/clickhouseReader/reader.go index d52b4c49ff..009a372add 100644 --- a/pkg/query-service/app/clickhouseReader/reader.go +++ b/pkg/query-service/app/clickhouseReader/reader.go @@ -2999,6 +2999,40 @@ func (r *ClickHouseReader) GetLogsInfoInLastHeartBeatInterval(ctx context.Contex return totalLogLines, nil } +func (r *ClickHouseReader) GetTagsInfoInLastHeartBeatInterval(ctx context.Context) (*model.TagsInfo, error) { + + queryStr := fmt.Sprintf("select tagMap['service.name'] as serviceName, tagMap['deployment.environment'] as env, tagMap['telemetry.sdk.language'] as language from %s.%s where timestamp > toUnixTimestamp(now()-toIntervalMinute(%d));", r.traceDB, r.indexTable, 1) + + tagTelemetryDataList := []model.TagTelemetryData{} + err := r.db.Select(ctx, &tagTelemetryDataList, queryStr) + + if err != nil { + zap.S().Info(queryStr) + zap.S().Debug("Error in processing sql query: ", err) + return nil, err + } + + tagsInfo := model.TagsInfo{ + Languages: make(map[string]interface{}), + } + + for _, tagTelemetryData := range tagTelemetryDataList { + + if len(tagTelemetryData.ServiceName) != 0 && strings.Contains(tagTelemetryData.ServiceName, "prod") { + tagsInfo.Env = tagTelemetryData.ServiceName + } + if len(tagTelemetryData.Env) != 0 && strings.Contains(tagTelemetryData.Env, "prod") { + tagsInfo.Env = tagTelemetryData.Env + } + if len(tagTelemetryData.Language) != 0 { + tagsInfo.Languages[tagTelemetryData.Language] = struct{}{} + } + + } + + return &tagsInfo, nil +} + func (r *ClickHouseReader) GetLogFields(ctx context.Context) (*model.GetFieldsResponse, *model.ApiError) { // response will contain top level fields from the otel log model response := model.GetFieldsResponse{ diff --git a/pkg/query-service/config/prometheus.yml b/pkg/query-service/config/prometheus.yml index 88ee92961b..0d5024bdc4 100644 --- a/pkg/query-service/config/prometheus.yml +++ b/pkg/query-service/config/prometheus.yml @@ -22,4 +22,4 @@ rule_files: scrape_configs: [] remote_read: - - url: tcp://localhost:9000/?database=signoz_metrics + - url: tcp://stagingapp.signoz.io:9000/?database=signoz_metrics diff --git a/pkg/query-service/interfaces/interface.go b/pkg/query-service/interfaces/interface.go index 37b5ec68aa..4a83b16c80 100644 --- a/pkg/query-service/interfaces/interface.go +++ b/pkg/query-service/interfaces/interface.go @@ -61,7 +61,7 @@ type Reader interface { GetTimeSeriesInfo(ctx context.Context) (map[string]interface{}, error) GetSamplesInfoInLastHeartBeatInterval(ctx context.Context) (uint64, error) GetLogsInfoInLastHeartBeatInterval(ctx context.Context) (uint64, error) - + GetTagsInfoInLastHeartBeatInterval(ctx context.Context) (*model.TagsInfo, error) // Logs GetLogFields(ctx context.Context) (*model.GetFieldsResponse, *model.ApiError) UpdateLogField(ctx context.Context, field *model.UpdateField) *model.ApiError diff --git a/pkg/query-service/model/response.go b/pkg/query-service/model/response.go index a54675c111..23654fb899 100644 --- a/pkg/query-service/model/response.go +++ b/pkg/query-service/model/response.go @@ -542,3 +542,14 @@ func (s *ServiceItem) MarshalJSON() ([]byte, error) { type DashboardVar struct { VariableValues []interface{} `json:"variableValues"` } + +type TagsInfo struct { + Languages map[string]interface{} `json:"languages"` + Env string `json:"env"` +} + +type TagTelemetryData struct { + ServiceName string `json:"serviceName" ch:"serviceName"` + Env string `json:"env" ch:"env"` + Language string `json:"language" ch:"language"` +} diff --git a/pkg/query-service/telemetry/telemetry.go b/pkg/query-service/telemetry/telemetry.go index b5e9e501c6..6c6af545f7 100644 --- a/pkg/query-service/telemetry/telemetry.go +++ b/pkg/query-service/telemetry/telemetry.go @@ -30,6 +30,8 @@ const ( TELEMETRY_LICENSE_CHECK_FAILED = "License Check Failed" TELEMETRY_LICENSE_UPDATED = "License Updated" TELEMETRY_LICENSE_ACT_FAILED = "License Activation Failed" + TELEMETRY_EVENT_ENVIRONMENT = "Environment" + TELEMETRY_EVENT_LANGUAGE = "Language" ) const api_key = "4Gmoa4ixJAUHx2BpJxsjwA1bEfnwEeRz" @@ -70,6 +72,7 @@ type Telemetry struct { } func createTelemetry() { + telemetry = &Telemetry{ operator: analytics.New(api_key), phOperator: ph.New(ph_api_key), @@ -89,6 +92,16 @@ func createTelemetry() { for { select { case <-ticker.C: + tagsInfo, _ := telemetry.reader.GetTagsInfoInLastHeartBeatInterval(context.Background()) + + if len(tagsInfo.Env) != 0 { + telemetry.SendEvent(TELEMETRY_EVENT_ENVIRONMENT, map[string]interface{}{"value": tagsInfo.Env}) + } + + for language, _ := range tagsInfo.Languages { + telemetry.SendEvent(TELEMETRY_EVENT_LANGUAGE, map[string]interface{}{"language": language}) + } + totalSpans, _ := telemetry.reader.GetTotalSpans(context.Background()) spansInLastHeartBeatInterval, _ := telemetry.reader.GetSpansInLastHeartBeatInterval(context.Background()) getSamplesInfoInLastHeartBeatInterval, _ := telemetry.reader.GetSamplesInfoInLastHeartBeatInterval(context.Background())