diff --git a/cli/cmd/cleanRunner.go b/cli/cmd/cleanRunner.go index 14c594668..d9858c0ac 100644 --- a/cli/cmd/cleanRunner.go +++ b/cli/cmd/cleanRunner.go @@ -1,7 +1,6 @@ package cmd import ( - "github.com/up9inc/mizu/cli/apiserver" "github.com/up9inc/mizu/cli/config" ) @@ -11,5 +10,5 @@ func performCleanCommand() { return } - finishMizuExecution(kubernetesProvider, apiserver.NewProvider(GetApiServerUrl(), apiserver.DefaultRetries, apiserver.DefaultTimeout), config.Config.IsNsRestrictedMode(), config.Config.MizuResourcesNamespace) + finishMizuExecution(kubernetesProvider, config.Config.IsNsRestrictedMode(), config.Config.MizuResourcesNamespace) } diff --git a/cli/cmd/common.go b/cli/cmd/common.go index ef7f99ce1..4b31257bb 100644 --- a/cli/cmd/common.go +++ b/cli/cmd/common.go @@ -11,7 +11,6 @@ import ( "github.com/up9inc/mizu/cli/mizu" "github.com/up9inc/mizu/cli/mizu/fsUtils" "github.com/up9inc/mizu/cli/resources" - "github.com/up9inc/mizu/cli/telemetry" "github.com/up9inc/mizu/cli/uiUtils" "github.com/up9inc/mizu/shared" "path" @@ -35,7 +34,7 @@ func startProxyReportErrorIfAny(kubernetesProvider *kubernetes.Provider, cancel return } - apiProvider = apiserver.NewProviderWithoutRetries(GetApiServerUrl(), time.Second) // short check for proxy + apiProvider = apiserver.NewProviderWithoutRetries(GetApiServerUrl(), time.Second) // short check for proxy if err := apiProvider.TestConnection(); err != nil { logger.Log.Debugf("Couldn't connect using proxy, stopping proxy and trying to create port-forward") if err := httpServer.Shutdown(context.Background()); err != nil { @@ -93,8 +92,7 @@ func handleKubernetesProviderError(err error) { } } -func finishMizuExecution(kubernetesProvider *kubernetes.Provider, apiProvider *apiserver.Provider, isNsRestrictedMode bool, mizuResourcesNamespace string) { - telemetry.ReportAPICalls(apiProvider) +func finishMizuExecution(kubernetesProvider *kubernetes.Provider, isNsRestrictedMode bool, mizuResourcesNamespace string) { removalCtx, cancel := context.WithTimeout(context.Background(), cleanupTimeout) defer cancel() dumpLogsIfNeeded(removalCtx, kubernetesProvider) diff --git a/cli/cmd/tap.go b/cli/cmd/tap.go index 127acda89..39104a3c3 100644 --- a/cli/cmd/tap.go +++ b/cli/cmd/tap.go @@ -12,7 +12,6 @@ import ( "github.com/up9inc/mizu/cli/config" "github.com/up9inc/mizu/cli/config/configStructs" "github.com/up9inc/mizu/cli/errormessage" - "github.com/up9inc/mizu/cli/telemetry" "github.com/up9inc/mizu/cli/uiUtils" "github.com/up9inc/mizu/shared" "github.com/up9inc/mizu/shared/logger" @@ -26,7 +25,6 @@ var tapCmd = &cobra.Command{ Long: `Record the ingoing traffic of a kubernetes pod. Supported protocols are HTTP and gRPC.`, RunE: func(cmd *cobra.Command, args []string) error { - go telemetry.ReportRun("tap", config.Config.Tap) RunMizuTap() return nil }, diff --git a/cli/cmd/tapRunner.go b/cli/cmd/tapRunner.go index b39c79ae9..3fe5de91a 100644 --- a/cli/cmd/tapRunner.go +++ b/cli/cmd/tapRunner.go @@ -10,6 +10,7 @@ import ( "time" "github.com/up9inc/mizu/cli/resources" + "github.com/up9inc/mizu/cli/telemetry" "github.com/up9inc/mizu/cli/utils" "github.com/getkin/kin-openapi/openapi3" @@ -137,7 +138,7 @@ func RunMizuTap() { return } - defer finishMizuExecution(kubernetesProvider, apiProvider, config.Config.IsNsRestrictedMode(), config.Config.MizuResourcesNamespace) + defer finishTapExecution(kubernetesProvider) go goUtils.HandleExcWrapper(watchApiServerEvents, ctx, kubernetesProvider, cancel) go goUtils.HandleExcWrapper(watchApiServerPod, ctx, kubernetesProvider, cancel) @@ -146,6 +147,12 @@ func RunMizuTap() { utils.WaitForFinish(ctx, cancel) } +func finishTapExecution(kubernetesProvider *kubernetes.Provider) { + telemetry.ReportTapTelemetry(apiProvider, config.Config.Tap, state.startTime) + + finishMizuExecution(kubernetesProvider, config.Config.IsNsRestrictedMode(), config.Config.MizuResourcesNamespace) +} + func getTapMizuAgentConfig() *shared.MizuAgentConfig { mizuAgentConfig := shared.MizuAgentConfig{ MaxDBSizeBytes: config.Config.Tap.MaxEntriesDBSizeBytes(), diff --git a/cli/telemetry/telemetry.go b/cli/telemetry/telemetry.go index f89a7d877..240422bd3 100644 --- a/cli/telemetry/telemetry.go +++ b/cli/telemetry/telemetry.go @@ -4,21 +4,21 @@ import ( "bytes" "encoding/json" "fmt" - "net/http" - "os" - "github.com/denisbrodbeck/machineid" "github.com/up9inc/mizu/cli/apiserver" "github.com/up9inc/mizu/cli/config" "github.com/up9inc/mizu/cli/mizu" "github.com/up9inc/mizu/shared/logger" + "net/http" + "os" + "time" ) const telemetryUrl = "https://us-east4-up9-prod.cloudfunctions.net/mizu-telemetry" func ReportRun(cmd string, args interface{}) { if !shouldRunTelemetry() { - logger.Log.Debugf("not reporting telemetry") + logger.Log.Debug("not reporting telemetry") return } @@ -28,7 +28,7 @@ func ReportRun(cmd string, args interface{}) { "args": string(argsBytes), } - if err := sendTelemetry("Execution", argsMap); err != nil { + if err := sendTelemetry(argsMap); err != nil { logger.Log.Debug(err) return } @@ -36,30 +36,31 @@ func ReportRun(cmd string, args interface{}) { logger.Log.Debugf("successfully reported telemetry for cmd %v", cmd) } -func ReportAPICalls(apiProvider *apiserver.Provider) { +func ReportTapTelemetry(apiProvider *apiserver.Provider, args interface{}, startTime time.Time) { if !shouldRunTelemetry() { - logger.Log.Debugf("not reporting telemetry") + logger.Log.Debug("not reporting telemetry") return } generalStats, err := apiProvider.GetGeneralStats() if err != nil { - logger.Log.Debugf("[ERROR] failed get general stats from api server %v", err) + logger.Log.Debugf("[ERROR] failed to get general stats from api server %v", err) return } - + argsBytes, _ := json.Marshal(args) argsMap := map[string]interface{}{ - "apiCallsCount": generalStats["EntriesCount"], - "firstAPICallTimestamp": generalStats["FirstEntryTimestamp"], - "lastAPICallTimestamp": generalStats["LastEntryTimestamp"], + "cmd": "tap", + "args": string(argsBytes), + "executionTimeInSeconds": int(time.Since(startTime).Seconds()), + "apiCallsCount": generalStats["EntriesCount"], } - if err := sendTelemetry("APICalls", argsMap); err != nil { + if err := sendTelemetry(argsMap); err != nil { logger.Log.Debug(err) return } - logger.Log.Debugf("successfully reported telemetry of api calls") + logger.Log.Debug("successfully reported telemetry of tap command") } func shouldRunTelemetry() bool { @@ -77,13 +78,12 @@ func shouldRunTelemetry() bool { return true } -func sendTelemetry(telemetryType string, argsMap map[string]interface{}) error { - argsMap["telemetryType"] = telemetryType +func sendTelemetry(argsMap map[string]interface{}) error { argsMap["component"] = "mizu_cli" argsMap["buildTimestamp"] = mizu.BuildTimestamp argsMap["branch"] = mizu.Branch argsMap["version"] = mizu.SemVer - argsMap["Platform"] = mizu.Platform + argsMap["platform"] = mizu.Platform if machineId, err := machineid.ProtectedID("mizu"); err == nil { argsMap["machineId"] = machineId