/
metrics_client_factory.go
113 lines (98 loc) · 4.2 KB
/
metrics_client_factory.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package metrics_client_factory
import (
"github.com/kurtosis-tech/kurtosis/cli/cli/defaults"
"github.com/kurtosis-tech/kurtosis/cli/cli/helpers/do_nothing_metrics_client_callback"
"github.com/kurtosis-tech/kurtosis/cli/cli/helpers/logrus_logger_converter"
"github.com/kurtosis-tech/kurtosis/cli/cli/helpers/metrics_user_id_store"
"github.com/kurtosis-tech/kurtosis/cli/cli/kurtosis_cluster_setting"
"github.com/kurtosis-tech/kurtosis/cli/cli/kurtosis_config"
"github.com/kurtosis-tech/kurtosis/cli/cli/kurtosis_config/resolved_config"
"github.com/kurtosis-tech/kurtosis/kurtosis_version"
metrics_client "github.com/kurtosis-tech/metrics-library/golang/lib/client"
"github.com/kurtosis-tech/metrics-library/golang/lib/source"
"github.com/kurtosis-tech/stacktrace"
"github.com/sirupsen/logrus"
)
const (
shouldFlushMetricsClientQueueOnEachEvent = false
)
func GetMetricsClient() (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")
}
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()
if err != nil {
return nil, nil, stacktrace.NewError("An error occurred while fetching stored configuration")
}
sendUserMetrics = kurtosisConfig.GetShouldSendMetrics()
} else {
sendUserMetrics = defaults.SendMetricsByDefault
}
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 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,
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 creating the metrics client")
}
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
}