Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: track the analytics toggle event #1217

Merged
merged 4 commits into from
Sep 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
16 changes: 16 additions & 0 deletions cli/cli/commands/analytics/analytics.go
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
}