Skip to content

Commit

Permalink
feat: track the analytics toggle event (#1217)
Browse files Browse the repository at this point in the history
## Description:
This event is tracked regardless of the state of the metrics election
tracker, if we go from enabled -> disabled or disabled -> enabled we
track the metric regardless

## Is this change user facing?
NO
  • Loading branch information
h4ck3rk3y committed Sep 1, 2023
1 parent 83c269c commit 10c461f
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 15 deletions.
16 changes: 16 additions & 0 deletions cli/cli/commands/analytics/analytics.go
Expand Up @@ -7,6 +7,7 @@ import (
"github.com/kurtosis-tech/kurtosis/cli/cli/command_framework/lowlevel/args"
"github.com/kurtosis-tech/kurtosis/cli/cli/command_framework/lowlevel/flags"
"github.com/kurtosis-tech/kurtosis/cli/cli/command_str_consts"
"github.com/kurtosis-tech/kurtosis/cli/cli/helpers/metrics_client_factory"
"github.com/kurtosis-tech/kurtosis/cli/cli/helpers/metrics_user_id_store"
"github.com/kurtosis-tech/kurtosis/cli/cli/kurtosis_config"
"github.com/kurtosis-tech/kurtosis/cli/cli/kurtosis_config/resolved_config"
Expand Down Expand Up @@ -55,6 +56,17 @@ func run(ctx context.Context, flags *flags.ParsedFlags, args *args.ParsedArgs) e
return stacktrace.Propagate(err, "Expected a value for non-greedy arg '%v' but none was found; this is a bug in Kurtosis!", enableDisableStatus)
}

// this client will send events regardless of the current metrics election
segmentMetricsClient, segmentMetricsClientCloser, err := metrics_client_factory.GetSegmentClient()
if err != nil {
return stacktrace.Propagate(err, "An error occurred while creating metrics client")
}
defer func() {
if err = segmentMetricsClientCloser(); err != nil {
logrus.Debugf("an error occurred while closing the metrics client:\n%v", err.Error())
}
}()

// We get validation for free by virtue of the KurtosisCommand framework
var didUserAcceptSendingMetrics bool
justPrintMetricsId := false
Expand Down Expand Up @@ -108,6 +120,10 @@ func run(ctx context.Context, flags *flags.ParsedFlags, args *args.ParsedArgs) e
return stacktrace.Propagate(err, "An error occurred setting analytics configuration")
}

if err = segmentMetricsClient.TrackKurtosisAnalyticsToggle(didUserAcceptSendingMetrics); err != nil {
logrus.Debugf("an error occurred while trackikng the kurtosis analytics toggle event:%v\n", err.Error())
}

logrus.Infof("Analytics tracking is now %vd", didUserAcceptSendingMetricsStr)

return nil
Expand Down
2 changes: 1 addition & 1 deletion cli/cli/go.mod
Expand Up @@ -49,7 +49,7 @@ require (
github.com/kurtosis-tech/kurtosis-portal/api/golang v0.0.0-20230818182330-1a86869414d2
github.com/kurtosis-tech/kurtosis/cloud/api/golang v0.0.0
github.com/kurtosis-tech/kurtosis/name_generator v0.0.0-20230727152609-768e95d2dbeb
github.com/kurtosis-tech/metrics-library/golang v0.0.0-20230727131823-40788a849ce5
github.com/kurtosis-tech/metrics-library/golang v0.0.0-20230901112211-5e1bcbcc81c3
github.com/kurtosis-tech/minimal-grpc-server/golang v0.0.0-20230710164206-90b674acb269
github.com/kurtosis-tech/vscode-kurtosis/starlark-lsp v0.0.0-20230406131103-c466e04f1b89
github.com/mholt/archiver v3.1.1+incompatible
Expand Down
2 changes: 2 additions & 0 deletions cli/cli/go.sum
Expand Up @@ -363,6 +363,8 @@ github.com/kurtosis-tech/kurtosis/name_generator v0.0.0-20230727152609-768e95d2d
github.com/kurtosis-tech/kurtosis/name_generator v0.0.0-20230727152609-768e95d2dbeb/go.mod h1:BReV/l+0pvK7K9wf8MN41ViQBSQH30j+YJ7V4glf19A=
github.com/kurtosis-tech/metrics-library/golang v0.0.0-20230727131823-40788a849ce5 h1:OVnlFVT5ooscDchTKMK6o46/s25XlBDEliSZqp63FfY=
github.com/kurtosis-tech/metrics-library/golang v0.0.0-20230727131823-40788a849ce5/go.mod h1:tteWV+M47xMHxqCIPQmdmgPW80rhN8YfzrgRRWbQhOw=
github.com/kurtosis-tech/metrics-library/golang v0.0.0-20230901112211-5e1bcbcc81c3 h1:yLIA0iPMSLMSYklgTsfzeRRP46/ef8YmymQZ8fmr1d8=
github.com/kurtosis-tech/metrics-library/golang v0.0.0-20230901112211-5e1bcbcc81c3/go.mod h1:tteWV+M47xMHxqCIPQmdmgPW80rhN8YfzrgRRWbQhOw=
github.com/kurtosis-tech/minimal-grpc-server/golang v0.0.0-20230710164206-90b674acb269 h1:yOo1I1iAyp0oYcGJ8AEAvt95QmpKNL1NYm1ZDqJW/LU=
github.com/kurtosis-tech/minimal-grpc-server/golang v0.0.0-20230710164206-90b674acb269/go.mod h1:hCgrTsWf5Z8i+DOIvOw5xBMnNjrBruv89s1hjtbAPcw=
github.com/kurtosis-tech/stacktrace v0.0.0-20211028211901-1c67a77b5409 h1:YQTATifMUwZEtZYb0LVA7DK2pj8s71iY8rzweuUQ5+g=
Expand Down
65 changes: 51 additions & 14 deletions cli/cli/helpers/metrics_client_factory/metrics_client_factory.go
Expand Up @@ -20,25 +20,17 @@ const (
)

func GetMetricsClient() (metrics_client.MetricsClient, func() error, error) {

clusterSettingStore := kurtosis_cluster_setting.GetKurtosisClusterSettingStore()
isClusterSet, err := clusterSettingStore.HasClusterSetting()
metricsUserId, clusterType, err := getMetricsUserIdAndClusterType()
if err != nil {
return nil, nil, stacktrace.Propagate(err, "Failed to check if cluster setting has been set.")
}
clusterType := resolved_config.DefaultDockerClusterName
if isClusterSet {
clusterType, err = clusterSettingStore.GetClusterSetting()
if err != nil {
return nil, nil, stacktrace.Propagate(err, "Cluster is set but config couldn't be fetched")
}
return nil, nil, stacktrace.Propagate(err, "an error occurred while getting metrics user id and cluster type")
}

kurtosisConfigStore := kurtosis_config.GetKurtosisConfigStore()
hasConfig, err := kurtosisConfigStore.HasConfig()
if err != nil {
return nil, nil, stacktrace.NewError("An error occurred while determining whether configuration already exists")
}

var sendUserMetrics bool
if hasConfig {
kurtosisConfig, err := kurtosisConfigStore.GetConfig()
Expand All @@ -50,12 +42,34 @@ func GetMetricsClient() (metrics_client.MetricsClient, func() error, error) {
sendUserMetrics = defaults.SendMetricsByDefault
}

metricsUserIdStore := metrics_user_id_store.GetMetricsUserIDStore()
metricsUserId, err := metricsUserIdStore.GetUserID()
logger := logrus.StandardLogger()
metricsClient, metricsClientCloseFunc, err := metrics_client.CreateMetricsClient(
source.KurtosisCLISource,
kurtosis_version.KurtosisVersion,
metricsUserId,
clusterType,
sendUserMetrics,
shouldFlushMetricsClientQueueOnEachEvent,
do_nothing_metrics_client_callback.NewDoNothingMetricsClientCallback(),
logrus_logger_converter.ConvertLogrusLoggerToAnalyticsLogger(logger),
)

if err != nil {
return nil, nil, stacktrace.Propagate(err, "An error occurred while getting the users metrics id")
return nil, nil, stacktrace.Propagate(err, "An error occurred while creating the metrics client")
}

return metricsClient, metricsClientCloseFunc, nil
}

// GetSegmentClient use this method only if you are sure that you want to send metrics otherwise use GetMetricsClient
func GetSegmentClient() (metrics_client.MetricsClient, func() error, error) {
metricsUserId, clusterType, err := getMetricsUserIdAndClusterType()
if err != nil {
return nil, nil, stacktrace.Propagate(err, "an error occurred while getting metrics user id and cluster type")
}
// this is force set to true in order to get the segment client
sendUserMetrics := true

logger := logrus.StandardLogger()
metricsClient, metricsClientCloseFunc, err := metrics_client.CreateMetricsClient(
source.KurtosisCLISource,
Expand All @@ -74,3 +88,26 @@ func GetMetricsClient() (metrics_client.MetricsClient, func() error, error) {

return metricsClient, metricsClientCloseFunc, nil
}

func getMetricsUserIdAndClusterType() (string, string, error) {
clusterSettingStore := kurtosis_cluster_setting.GetKurtosisClusterSettingStore()
isClusterSet, err := clusterSettingStore.HasClusterSetting()
if err != nil {
return "", "", stacktrace.Propagate(err, "Failed to check if cluster setting has been set.")
}
clusterType := resolved_config.DefaultDockerClusterName
if isClusterSet {
clusterType, err = clusterSettingStore.GetClusterSetting()
if err != nil {
return "", "", stacktrace.Propagate(err, "Cluster is set but config couldn't be fetched")
}
}

metricsUserIdStore := metrics_user_id_store.GetMetricsUserIDStore()
metricsUserId, err := metricsUserIdStore.GetUserID()
if err != nil {
return "", "", stacktrace.Propagate(err, "An error occurred while getting the users metrics id")
}

return metricsUserId, clusterType, nil
}

0 comments on commit 10c461f

Please sign in to comment.