Skip to content

Commit 58016cd

Browse files
Simon Emmsroboquat
Simon Emms
authored andcommitted
[installation-telemetry]: get installationAdmin data from server
1 parent 18259dc commit 58016cd

File tree

4 files changed

+134
-9
lines changed

4 files changed

+134
-9
lines changed

components/installation-telemetry/cmd/send.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99
"os"
1010

1111
"github.com/gitpod-io/gitpod/common-go/log"
12+
"github.com/gitpod-io/gitpod/installation-telemetry/pkg/common"
13+
"github.com/gitpod-io/gitpod/installation-telemetry/pkg/server"
1214
"github.com/spf13/cobra"
1315
"gopkg.in/segmentio/analytics-go.v3"
1416
)
@@ -19,9 +21,17 @@ var sendCmd = &cobra.Command{
1921
Use: "send",
2022
Short: "Sends telemetry data",
2123
RunE: func(cmd *cobra.Command, args []string) (err error) {
22-
// @todo(sje): replace with a database call to get status
23-
canSendData := false
24-
if !canSendData {
24+
config, err := common.NewConfig()
25+
if err != nil {
26+
return err
27+
}
28+
29+
data, err := server.GetInstallationAdminData(*config)
30+
if err != nil {
31+
return err
32+
}
33+
34+
if !data.Settings.SendTelemetry {
2535
log.Info("installation-telemetry is not permitted to send - exiting")
2636
return nil
2737
}
@@ -30,11 +40,6 @@ var sendCmd = &cobra.Command{
3040
return fmt.Errorf("segmentIOToken build variable not set")
3141
}
3242

33-
domainHash := os.Getenv("GITPOD_DOMAIN_HASH")
34-
if domainHash == "" {
35-
return fmt.Errorf("GITPOD_DOMAIN_HASH envvar not set")
36-
}
37-
3843
versionId := os.Getenv("GITPOD_INSTALLATION_VERSION")
3944
if versionId == "" {
4045
return fmt.Errorf("GITPOD_INSTALLATION_VERSION envvar not set")
@@ -46,7 +51,7 @@ var sendCmd = &cobra.Command{
4651
}()
4752

4853
telemetry := analytics.Track{
49-
UserId: domainHash,
54+
UserId: data.ID,
5055
Event: "Installation telemetry",
5156
Properties: analytics.NewProperties().
5257
Set("version", versionId),

components/installation-telemetry/go.mod

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,53 @@ require (
1919
)
2020

2121
replace github.com/gitpod-io/gitpod/common-go => ../common-go // leeway
22+
23+
replace k8s.io/api => k8s.io/api v0.22.2 // leeway indirect from components/common-go:lib
24+
25+
replace k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.22.2 // leeway indirect from components/common-go:lib
26+
27+
replace k8s.io/apimachinery => k8s.io/apimachinery v0.22.2 // leeway indirect from components/common-go:lib
28+
29+
replace k8s.io/apiserver => k8s.io/apiserver v0.22.2 // leeway indirect from components/common-go:lib
30+
31+
replace k8s.io/cli-runtime => k8s.io/cli-runtime v0.22.2 // leeway indirect from components/common-go:lib
32+
33+
replace k8s.io/client-go => k8s.io/client-go v0.22.2 // leeway indirect from components/common-go:lib
34+
35+
replace k8s.io/cloud-provider => k8s.io/cloud-provider v0.22.2 // leeway indirect from components/common-go:lib
36+
37+
replace k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.22.2 // leeway indirect from components/common-go:lib
38+
39+
replace k8s.io/code-generator => k8s.io/code-generator v0.22.2 // leeway indirect from components/common-go:lib
40+
41+
replace k8s.io/component-base => k8s.io/component-base v0.22.2 // leeway indirect from components/common-go:lib
42+
43+
replace k8s.io/cri-api => k8s.io/cri-api v0.22.2 // leeway indirect from components/common-go:lib
44+
45+
replace k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.22.2 // leeway indirect from components/common-go:lib
46+
47+
replace k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.22.2 // leeway indirect from components/common-go:lib
48+
49+
replace k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.22.2 // leeway indirect from components/common-go:lib
50+
51+
replace k8s.io/kube-proxy => k8s.io/kube-proxy v0.22.2 // leeway indirect from components/common-go:lib
52+
53+
replace k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.22.2 // leeway indirect from components/common-go:lib
54+
55+
replace k8s.io/kubelet => k8s.io/kubelet v0.22.2 // leeway indirect from components/common-go:lib
56+
57+
replace k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.22.2 // leeway indirect from components/common-go:lib
58+
59+
replace k8s.io/metrics => k8s.io/metrics v0.22.2 // leeway indirect from components/common-go:lib
60+
61+
replace k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.22.2 // leeway indirect from components/common-go:lib
62+
63+
replace k8s.io/component-helpers => k8s.io/component-helpers v0.22.2 // leeway indirect from components/common-go:lib
64+
65+
replace k8s.io/controller-manager => k8s.io/controller-manager v0.22.2 // leeway indirect from components/common-go:lib
66+
67+
replace k8s.io/kubectl => k8s.io/kubectl v0.22.2 // leeway indirect from components/common-go:lib
68+
69+
replace k8s.io/mount-utils => k8s.io/mount-utils v0.22.2 // leeway indirect from components/common-go:lib
70+
71+
replace k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.22.2 // leeway indirect from components/common-go:lib
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License-AGPL.txt in the project root for license information.
4+
5+
package common
6+
7+
import (
8+
"fmt"
9+
"os"
10+
)
11+
12+
type Config struct {
13+
Server string
14+
}
15+
16+
func NewConfig() (*Config, error) {
17+
config := Config{
18+
Server: os.Getenv("SERVER_URL"),
19+
}
20+
21+
if config.Server == "" {
22+
return nil, fmt.Errorf("SERVER_URL required")
23+
}
24+
25+
return &config, nil
26+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License-AGPL.txt in the project root for license information.
4+
5+
package server
6+
7+
import (
8+
"encoding/json"
9+
"fmt"
10+
"io/ioutil"
11+
"net/http"
12+
13+
"github.com/gitpod-io/gitpod/installation-telemetry/pkg/common"
14+
)
15+
16+
type InstallationAdminSettings struct {
17+
SendTelemetry bool `json:"sendTelemetry"`
18+
}
19+
20+
type InstallationAdminData struct {
21+
ID string `json:"id"`
22+
Settings InstallationAdminSettings `json:"settings"`
23+
}
24+
25+
func GetInstallationAdminData(config common.Config) (*InstallationAdminData, error) {
26+
resp, err := http.Get(fmt.Sprintf("%s/data", config.Server))
27+
if err != nil {
28+
return nil, err
29+
}
30+
31+
defer resp.Body.Close()
32+
33+
body, err := ioutil.ReadAll(resp.Body)
34+
if err != nil {
35+
return nil, err
36+
}
37+
38+
var data InstallationAdminData
39+
if err := json.Unmarshal(body, &data); err != nil {
40+
return nil, err
41+
}
42+
43+
return &data, nil
44+
}

0 commit comments

Comments
 (0)