Skip to content

Commit 6a53a8c

Browse files
authored
Setup telemetry
1 parent e9a8dd1 commit 6a53a8c

File tree

17 files changed

+246
-51
lines changed

17 files changed

+246
-51
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ aws-clear-bucket:
9090
@./dev/aws.sh clear-bucket
9191

9292
tools:
93-
@go get -u -v golang.org/x/lint/golint
93+
@GO111MODULE=off go get -u -v golang.org/x/lint/golint
9494
@go get -u -v github.com/VojtechVitek/rerun/cmd/rerun
9595
@pip3 install black
9696

cortex-installer.sh

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ export CORTEX_IMAGE_TF_TRAIN_GPU="${CORTEX_IMAGE_TF_TRAIN_GPU:-cortexlabs/tf-tra
141141

142142
export AWS_ACCESS_KEY_ID="${AWS_ACCESS_KEY_ID:-""}"
143143
export AWS_SECRET_ACCESS_KEY="${AWS_SECRET_ACCESS_KEY:-""}"
144+
export CORTEX_ENABLE_TELEMETRY=${CORTEX_ENABLE_TELEMETRY:-""}
144145

145146
################
146147
### CHECK OS ###
@@ -166,6 +167,7 @@ function install_operator() {
166167

167168
echo "Installing the Cortex operator ..."
168169

170+
prompt_for_telemetry
169171
setup_namespace
170172
setup_configmap
171173
setup_secrets
@@ -306,6 +308,7 @@ function setup_configmap() {
306308
--from-literal='IMAGE_PYTHON_PACKAGER'=$CORTEX_IMAGE_PYTHON_PACKAGER \
307309
--from-literal='IMAGE_TF_TRAIN_GPU'=$CORTEX_IMAGE_TF_TRAIN_GPU \
308310
--from-literal='IMAGE_TF_SERVE_GPU'=$CORTEX_IMAGE_TF_SERVE_GPU \
311+
--from-literal='ENABLE_TELEMETRY'=$CORTEX_ENABLE_TELEMETRY \
309312
-o yaml --dry-run | kubectl apply -f - >/dev/null
310313
}
311314

@@ -1925,6 +1928,25 @@ function ask_sudo() {
19251928
fi
19261929
}
19271930

1931+
function prompt_for_telemetry() {
1932+
if [ "$CORTEX_ENABLE_TELEMETRY" != "true" ] && [ "$CORTEX_ENABLE_TELEMETRY" != "false" ]; then
1933+
while true
1934+
do
1935+
echo
1936+
read -p "Would you like to help improve Cortex by anonymously sending error reports and usage stats to the dev team [Y/n] " -n 1 -r
1937+
echo
1938+
if [[ $REPLY =~ ^[Yy]$ ]]; then
1939+
export CORTEX_ENABLE_TELEMETRY=true
1940+
break
1941+
elif [[ $REPLY =~ ^[Nn]$ ]]; then
1942+
export CORTEX_ENABLE_TELEMETRY=false
1943+
break
1944+
fi
1945+
echo "Unexpected value, please enter \"Y\" or \"n\""
1946+
done
1947+
fi
1948+
}
1949+
19281950
######################
19291951
### ARG PROCESSING ###
19301952
######################

docs/operator/config.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ export CORTEX_REGION="us-west-2"
2323
# The name of the Kubernetes namespace Cortex will use
2424
export CORTEX_NAMESPACE="cortex"
2525

26+
# Flag to enable collecting error reports and usage stats. If flag is not set to either "true" or "false", you will be prompted.
27+
export CORTEX_ENABLE_TELEMETRY=""
28+
2629
# Image paths
2730
export CORTEX_IMAGE_ARGO_CONTROLLER="cortexlabs/argo-controller:master"
2831
export CORTEX_IMAGE_ARGO_EXECUTOR="cortexlabs/argo-executor:master"

pkg/lib/errors/errors.go

Lines changed: 10 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,7 @@ func FirstError(errs ...error) error {
9797
return nil
9898
}
9999

100-
func Exit(items ...interface{}) {
101-
if len(items) == 0 {
102-
items = append(items, "empty exit")
103-
}
104-
100+
func MergeErrItems(items ...interface{}) error {
105101
var err error
106102
switch casted := items[0].(type) {
107103
case error:
@@ -127,6 +123,14 @@ func Exit(items ...interface{}) {
127123
}
128124
}
129125

126+
return err
127+
}
128+
129+
func Exit(items ...interface{}) {
130+
if len(items) == 0 {
131+
items = append(items, "empty exit")
132+
}
133+
err := MergeErrItems(items...)
130134
PrintError(err)
131135
os.Exit(1)
132136
}
@@ -135,32 +139,7 @@ func Panic(items ...interface{}) {
135139
if len(items) == 0 {
136140
items = append(items, "empty panic")
137141
}
138-
139-
var err error
140-
switch casted := items[0].(type) {
141-
case error:
142-
err = casted
143-
case string:
144-
err = New(casted)
145-
default:
146-
err = New(s.UserStrStripped(casted))
147-
}
148-
149-
for i, item := range items {
150-
if i == 0 {
151-
continue
152-
}
153-
154-
switch casted := item.(type) {
155-
case error:
156-
err = Wrap(err, casted.Error())
157-
case string:
158-
err = Wrap(err, casted)
159-
default:
160-
err = Wrap(err, s.UserStrStripped(casted))
161-
}
162-
}
163-
142+
err := MergeErrItems(items...)
164143
// PrintStacktrace(err)
165144
panic(err)
166145
}
@@ -185,15 +164,6 @@ func CastRecoverError(errInterface interface{}, strs ...string) error {
185164
return Wrap(err, strs...)
186165
}
187166

188-
func Recover(strs ...string) error {
189-
if errInterface := recover(); errInterface != nil {
190-
err := CastRecoverError(errInterface, strs...)
191-
PrintError(err)
192-
return err
193-
}
194-
return nil
195-
}
196-
197167
func RecoverAndExit(strs ...string) {
198168
if errInterface := recover(); errInterface != nil {
199169
err := CastRecoverError(errInterface, strs...)

pkg/operator/aws/session.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@ import (
2525

2626
s "github.com/cortexlabs/cortex/pkg/api/strings"
2727
"github.com/cortexlabs/cortex/pkg/lib/errors"
28+
"github.com/cortexlabs/cortex/pkg/lib/hash"
2829
cc "github.com/cortexlabs/cortex/pkg/operator/cortexconfig"
2930
)
3031

3132
var awsAccountID string
3233
var s3Client *s3.S3
3334
var stsClient *sts.STS
3435
var cloudWatchLogsClient *cloudwatchlogs.CloudWatchLogs
36+
var HashedAccountID string
3537

3638
func init() {
3739
sess := session.Must(session.NewSession(&aws.Config{
@@ -48,4 +50,5 @@ func init() {
4850
errors.Exit(err, s.ErrUnableToAuthAws)
4951
}
5052
awsAccountID = *response.Account
53+
HashedAccountID = hash.String(awsAccountID)
5154
}

pkg/operator/context/aggregators.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/cortexlabs/cortex/pkg/lib/pointer"
3232
"github.com/cortexlabs/cortex/pkg/lib/sets/strset"
3333
"github.com/cortexlabs/cortex/pkg/operator/aws"
34+
"github.com/cortexlabs/cortex/pkg/operator/telemetry"
3435
)
3536

3637
var builtinAggregators = make(map[string]*context.Aggregator)
@@ -41,17 +42,21 @@ func init() {
4142

4243
config, err := userconfig.NewPartialPath(configPath)
4344
if err != nil {
45+
telemetry.ReportErrorBlocking(err)
4446
errors.Exit(err)
4547
}
4648

4749
for _, aggregatorConfig := range config.Aggregators {
4850
implPath := filepath.Join(OperatorAggregatorsDir, aggregatorConfig.Path)
4951
impl, err := ioutil.ReadFile(implPath)
5052
if err != nil {
51-
errors.Exit(err, userconfig.Identify(aggregatorConfig), s.ErrReadFile(implPath))
53+
err := errors.Wrap(err, userconfig.Identify(aggregatorConfig), s.ErrReadFile(implPath))
54+
telemetry.ReportErrorBlocking(err)
55+
errors.Exit(err)
5256
}
5357
aggregator, err := newAggregator(*aggregatorConfig, impl, pointer.String("cortex"), nil)
5458
if err != nil {
59+
telemetry.ReportErrorBlocking(err)
5560
errors.Exit(err)
5661
}
5762
builtinAggregators["cortex."+aggregatorConfig.Name] = aggregator

pkg/operator/context/transformers.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/cortexlabs/cortex/pkg/lib/pointer"
3232
"github.com/cortexlabs/cortex/pkg/lib/sets/strset"
3333
"github.com/cortexlabs/cortex/pkg/operator/aws"
34+
"github.com/cortexlabs/cortex/pkg/operator/telemetry"
3435
)
3536

3637
var builtinTransformers = make(map[string]*context.Transformer)
@@ -41,17 +42,21 @@ func init() {
4142

4243
config, err := userconfig.NewPartialPath(configPath)
4344
if err != nil {
45+
telemetry.ReportErrorBlocking(err)
4446
errors.Exit(err)
4547
}
4648

4749
for _, transConfig := range config.Transformers {
4850
implPath := filepath.Join(OperatorTransformersDir, transConfig.Path)
4951
impl, err := ioutil.ReadFile(implPath)
5052
if err != nil {
51-
errors.Exit(err, userconfig.Identify(transConfig), s.ErrReadFile(implPath))
53+
err = errors.Wrap(err, userconfig.Identify(transConfig), s.ErrReadFile(implPath))
54+
telemetry.ReportErrorBlocking(err)
55+
errors.Exit(err)
5256
}
5357
transformer, err := newTransformer(*transConfig, impl, pointer.String("cortex"), nil)
5458
if err != nil {
59+
telemetry.ReportErrorBlocking(err)
5560
errors.Exit(err)
5661
}
5762
builtinTransformers["cortex."+transConfig.Name] = transformer

pkg/operator/cortexconfig/cortex_config.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ var (
3636
PythonPackagerImage string
3737
TFTrainImageGPU string
3838
TFServeImageGPU string
39+
EnableTelemetry bool
3940
)
4041

4142
func init() {
@@ -51,6 +52,7 @@ func init() {
5152
PythonPackagerImage = getStr("IMAGE_PYTHON_PACKAGER")
5253
TFTrainImageGPU = getStr("IMAGE_TF_TRAIN_GPU")
5354
TFServeImageGPU = getStr("IMAGE_TF_SERVE_GPU")
55+
EnableTelemetry = getBool("ENABLE_TELEMETRY")
5456
}
5557

5658
//
@@ -68,3 +70,9 @@ func getStr(configName string) string {
6870
v := &cr.StringValidation{Required: true}
6971
return cr.MustStringFromEnvOrFile(envVarName, filePath, v)
7072
}
73+
74+
func getBool(configName string) bool {
75+
envVarName, filePath := getPaths(configName)
76+
v := &cr.BoolValidation{Default: false}
77+
return cr.MustBoolFromEnvOrFile(envVarName, filePath, v)
78+
}

pkg/operator/endpoints/delete.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,13 @@ import (
2222
"github.com/cortexlabs/cortex/pkg/api/schema"
2323
s "github.com/cortexlabs/cortex/pkg/api/strings"
2424
"github.com/cortexlabs/cortex/pkg/lib/errors"
25+
"github.com/cortexlabs/cortex/pkg/operator/telemetry"
2526
"github.com/cortexlabs/cortex/pkg/operator/workloads"
2627
)
2728

2829
func Delete(w http.ResponseWriter, r *http.Request) {
30+
telemetry.ReportEvent("endpoint.delete")
31+
2932
appName, err := getRequiredQParam("appName", r)
3033
if RespondIfError(w, err) {
3134
return

pkg/operator/endpoints/deploy.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,13 @@ import (
2929
"github.com/cortexlabs/cortex/pkg/operator/argo"
3030
"github.com/cortexlabs/cortex/pkg/operator/aws"
3131
ocontext "github.com/cortexlabs/cortex/pkg/operator/context"
32+
"github.com/cortexlabs/cortex/pkg/operator/telemetry"
3233
"github.com/cortexlabs/cortex/pkg/operator/workloads"
3334
)
3435

3536
func Deploy(w http.ResponseWriter, r *http.Request) {
37+
telemetry.ReportEvent("endpoint.deploy")
38+
3639
ignoreCache := getOptionalBoolQParam("ignoreCache", false, r)
3740
force := getOptionalBoolQParam("force", false, r)
3841

0 commit comments

Comments
 (0)