From 99c0c97c1e93c213999cc315916b387ff5c5cd9f Mon Sep 17 00:00:00 2001 From: Ankit Nayan Date: Tue, 6 Sep 2022 19:55:01 +0530 Subject: [PATCH] chore: added sampling in analytics --- pkg/query-service/app/server.go | 7 ++++--- pkg/query-service/telemetry/telemetry.go | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/pkg/query-service/app/server.go b/pkg/query-service/app/server.go index dd00aea804..a34bb0b477 100644 --- a/pkg/query-service/app/server.go +++ b/pkg/query-service/app/server.go @@ -232,9 +232,10 @@ func (s *Server) analyticsMiddleware(next http.Handler) http.Handler { next.ServeHTTP(lrw, r) data := map[string]interface{}{"path": path, "statusCode": lrw.statusCode} - - if _, ok := telemetry.IgnoredPaths()[path]; !ok { - telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_PATH, data) + if telemetry.GetInstance().IsSampled() { + if _, ok := telemetry.IgnoredPaths()[path]; !ok { + telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_PATH, data) + } } }) diff --git a/pkg/query-service/telemetry/telemetry.go b/pkg/query-service/telemetry/telemetry.go index 0774b7bb91..1d2fa5429e 100644 --- a/pkg/query-service/telemetry/telemetry.go +++ b/pkg/query-service/telemetry/telemetry.go @@ -3,6 +3,7 @@ package telemetry import ( "context" "io/ioutil" + "math/rand" "net/http" "os" "strings" @@ -23,6 +24,7 @@ const ( TELEMETRY_EVENT_NUMBER_OF_SERVICES = "Number of Services" TELEMETRY_EVENT_HEART_BEAT = "Heart Beat" TELEMETRY_EVENT_ORG_SETTINGS = "Org Settings" + DEFAULT_SAMPLING = 0.1 ) const api_key = "4Gmoa4ixJAUHx2BpJxsjwA1bEfnwEeRz" @@ -35,6 +37,18 @@ const HEART_BEAT_DURATION = 6 * time.Hour var telemetry *Telemetry var once sync.Once +func (a *Telemetry) IsSampled() bool { + + number := a.minRandInt + rand.Intn(a.maxRandInt-a.minRandInt) + + if (number % a.maxRandInt) == 0 { + return true + } else { + return false + } + +} + type Telemetry struct { operator analytics.Client ipAddress string @@ -43,6 +57,8 @@ type Telemetry struct { distinctId string reader interfaces.Reader companyDomain string + minRandInt int + maxRandInt int } func createTelemetry() { @@ -50,6 +66,10 @@ func createTelemetry() { operator: analytics.New(api_key), ipAddress: getOutboundIP(), } + telemetry.minRandInt = 0 + telemetry.maxRandInt = int(1 / DEFAULT_SAMPLING) + + rand.Seed(time.Now().UnixNano()) data := map[string]interface{}{}