[TRA-4190] ExecutionTime telemetry (#685)

This commit is contained in:
Gustavo Massaneiro 2022-01-25 06:13:49 -03:00 committed by GitHub
parent 80418f1802
commit e30b52f528
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 28 additions and 26 deletions

View File

@ -1,7 +1,6 @@
package cmd package cmd
import ( import (
"github.com/up9inc/mizu/cli/apiserver"
"github.com/up9inc/mizu/cli/config" "github.com/up9inc/mizu/cli/config"
) )
@ -11,5 +10,5 @@ func performCleanCommand() {
return return
} }
finishMizuExecution(kubernetesProvider, apiserver.NewProvider(GetApiServerUrl(), apiserver.DefaultRetries, apiserver.DefaultTimeout), config.Config.IsNsRestrictedMode(), config.Config.MizuResourcesNamespace) finishMizuExecution(kubernetesProvider, config.Config.IsNsRestrictedMode(), config.Config.MizuResourcesNamespace)
} }

View File

@ -11,7 +11,6 @@ import (
"github.com/up9inc/mizu/cli/mizu" "github.com/up9inc/mizu/cli/mizu"
"github.com/up9inc/mizu/cli/mizu/fsUtils" "github.com/up9inc/mizu/cli/mizu/fsUtils"
"github.com/up9inc/mizu/cli/resources" "github.com/up9inc/mizu/cli/resources"
"github.com/up9inc/mizu/cli/telemetry"
"github.com/up9inc/mizu/cli/uiUtils" "github.com/up9inc/mizu/cli/uiUtils"
"github.com/up9inc/mizu/shared" "github.com/up9inc/mizu/shared"
"path" "path"
@ -35,7 +34,7 @@ func startProxyReportErrorIfAny(kubernetesProvider *kubernetes.Provider, cancel
return 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 { if err := apiProvider.TestConnection(); err != nil {
logger.Log.Debugf("Couldn't connect using proxy, stopping proxy and trying to create port-forward") logger.Log.Debugf("Couldn't connect using proxy, stopping proxy and trying to create port-forward")
if err := httpServer.Shutdown(context.Background()); err != nil { 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) { func finishMizuExecution(kubernetesProvider *kubernetes.Provider, isNsRestrictedMode bool, mizuResourcesNamespace string) {
telemetry.ReportAPICalls(apiProvider)
removalCtx, cancel := context.WithTimeout(context.Background(), cleanupTimeout) removalCtx, cancel := context.WithTimeout(context.Background(), cleanupTimeout)
defer cancel() defer cancel()
dumpLogsIfNeeded(removalCtx, kubernetesProvider) dumpLogsIfNeeded(removalCtx, kubernetesProvider)

View File

@ -12,7 +12,6 @@ import (
"github.com/up9inc/mizu/cli/config" "github.com/up9inc/mizu/cli/config"
"github.com/up9inc/mizu/cli/config/configStructs" "github.com/up9inc/mizu/cli/config/configStructs"
"github.com/up9inc/mizu/cli/errormessage" "github.com/up9inc/mizu/cli/errormessage"
"github.com/up9inc/mizu/cli/telemetry"
"github.com/up9inc/mizu/cli/uiUtils" "github.com/up9inc/mizu/cli/uiUtils"
"github.com/up9inc/mizu/shared" "github.com/up9inc/mizu/shared"
"github.com/up9inc/mizu/shared/logger" "github.com/up9inc/mizu/shared/logger"
@ -26,7 +25,6 @@ var tapCmd = &cobra.Command{
Long: `Record the ingoing traffic of a kubernetes pod. Long: `Record the ingoing traffic of a kubernetes pod.
Supported protocols are HTTP and gRPC.`, Supported protocols are HTTP and gRPC.`,
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
go telemetry.ReportRun("tap", config.Config.Tap)
RunMizuTap() RunMizuTap()
return nil return nil
}, },

View File

@ -10,6 +10,7 @@ import (
"time" "time"
"github.com/up9inc/mizu/cli/resources" "github.com/up9inc/mizu/cli/resources"
"github.com/up9inc/mizu/cli/telemetry"
"github.com/up9inc/mizu/cli/utils" "github.com/up9inc/mizu/cli/utils"
"github.com/getkin/kin-openapi/openapi3" "github.com/getkin/kin-openapi/openapi3"
@ -137,7 +138,7 @@ func RunMizuTap() {
return return
} }
defer finishMizuExecution(kubernetesProvider, apiProvider, config.Config.IsNsRestrictedMode(), config.Config.MizuResourcesNamespace) defer finishTapExecution(kubernetesProvider)
go goUtils.HandleExcWrapper(watchApiServerEvents, ctx, kubernetesProvider, cancel) go goUtils.HandleExcWrapper(watchApiServerEvents, ctx, kubernetesProvider, cancel)
go goUtils.HandleExcWrapper(watchApiServerPod, ctx, kubernetesProvider, cancel) go goUtils.HandleExcWrapper(watchApiServerPod, ctx, kubernetesProvider, cancel)
@ -146,6 +147,12 @@ func RunMizuTap() {
utils.WaitForFinish(ctx, cancel) 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 { func getTapMizuAgentConfig() *shared.MizuAgentConfig {
mizuAgentConfig := shared.MizuAgentConfig{ mizuAgentConfig := shared.MizuAgentConfig{
MaxDBSizeBytes: config.Config.Tap.MaxEntriesDBSizeBytes(), MaxDBSizeBytes: config.Config.Tap.MaxEntriesDBSizeBytes(),

View File

@ -4,21 +4,21 @@ import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"net/http"
"os"
"github.com/denisbrodbeck/machineid" "github.com/denisbrodbeck/machineid"
"github.com/up9inc/mizu/cli/apiserver" "github.com/up9inc/mizu/cli/apiserver"
"github.com/up9inc/mizu/cli/config" "github.com/up9inc/mizu/cli/config"
"github.com/up9inc/mizu/cli/mizu" "github.com/up9inc/mizu/cli/mizu"
"github.com/up9inc/mizu/shared/logger" "github.com/up9inc/mizu/shared/logger"
"net/http"
"os"
"time"
) )
const telemetryUrl = "https://us-east4-up9-prod.cloudfunctions.net/mizu-telemetry" const telemetryUrl = "https://us-east4-up9-prod.cloudfunctions.net/mizu-telemetry"
func ReportRun(cmd string, args interface{}) { func ReportRun(cmd string, args interface{}) {
if !shouldRunTelemetry() { if !shouldRunTelemetry() {
logger.Log.Debugf("not reporting telemetry") logger.Log.Debug("not reporting telemetry")
return return
} }
@ -28,7 +28,7 @@ func ReportRun(cmd string, args interface{}) {
"args": string(argsBytes), "args": string(argsBytes),
} }
if err := sendTelemetry("Execution", argsMap); err != nil { if err := sendTelemetry(argsMap); err != nil {
logger.Log.Debug(err) logger.Log.Debug(err)
return return
} }
@ -36,30 +36,31 @@ func ReportRun(cmd string, args interface{}) {
logger.Log.Debugf("successfully reported telemetry for cmd %v", cmd) 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() { if !shouldRunTelemetry() {
logger.Log.Debugf("not reporting telemetry") logger.Log.Debug("not reporting telemetry")
return return
} }
generalStats, err := apiProvider.GetGeneralStats() generalStats, err := apiProvider.GetGeneralStats()
if err != nil { 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 return
} }
argsBytes, _ := json.Marshal(args)
argsMap := map[string]interface{}{ argsMap := map[string]interface{}{
"apiCallsCount": generalStats["EntriesCount"], "cmd": "tap",
"firstAPICallTimestamp": generalStats["FirstEntryTimestamp"], "args": string(argsBytes),
"lastAPICallTimestamp": generalStats["LastEntryTimestamp"], "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) logger.Log.Debug(err)
return return
} }
logger.Log.Debugf("successfully reported telemetry of api calls") logger.Log.Debug("successfully reported telemetry of tap command")
} }
func shouldRunTelemetry() bool { func shouldRunTelemetry() bool {
@ -77,13 +78,12 @@ func shouldRunTelemetry() bool {
return true return true
} }
func sendTelemetry(telemetryType string, argsMap map[string]interface{}) error { func sendTelemetry(argsMap map[string]interface{}) error {
argsMap["telemetryType"] = telemetryType
argsMap["component"] = "mizu_cli" argsMap["component"] = "mizu_cli"
argsMap["buildTimestamp"] = mizu.BuildTimestamp argsMap["buildTimestamp"] = mizu.BuildTimestamp
argsMap["branch"] = mizu.Branch argsMap["branch"] = mizu.Branch
argsMap["version"] = mizu.SemVer argsMap["version"] = mizu.SemVer
argsMap["Platform"] = mizu.Platform argsMap["platform"] = mizu.Platform
if machineId, err := machineid.ProtectedID("mizu"); err == nil { if machineId, err := machineid.ProtectedID("mizu"); err == nil {
argsMap["machineId"] = machineId argsMap["machineId"] = machineId