Skip to content

Commit 3e6f8c7

Browse files
committed
Add segment support
1 parent ecab1d8 commit 3e6f8c7

File tree

4 files changed

+45
-5
lines changed

4 files changed

+45
-5
lines changed

Diff for: tracker/backend/ingestor/go.mod

+4
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ require (
1212
github.com/bufbuild/connect-go v1.9.0
1313
github.com/bufbuild/connect-grpcreflect-go v1.1.0
1414
github.com/gitpod-io/leeway v0.0.0-00010101000000-000000000000
15+
github.com/segmentio/analytics-go/v3 v3.2.1
1516
github.com/sirupsen/logrus v1.9.3
1617
)
1718

@@ -29,10 +30,12 @@ require (
2930
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.12 // indirect
3031
github.com/aws/aws-sdk-go-v2/service/sts v1.19.2 // indirect
3132
github.com/aws/smithy-go v1.13.5 // indirect
33+
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
3234
github.com/goccy/go-json v0.9.11 // indirect
3335
github.com/golang/protobuf v1.5.3 // indirect
3436
github.com/golang/snappy v0.0.4 // indirect
3537
github.com/google/flatbuffers v2.0.8+incompatible // indirect
38+
github.com/google/uuid v1.3.0 // indirect
3639
github.com/influxdata/line-protocol/v2 v2.2.1 // indirect
3740
github.com/jmespath/go-jmespath v0.4.0 // indirect
3841
github.com/klauspost/asmfmt v1.3.2 // indirect
@@ -41,6 +44,7 @@ require (
4144
github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // indirect
4245
github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect
4346
github.com/pierrec/lz4/v4 v4.1.15 // indirect
47+
github.com/segmentio/backo-go v1.0.0 // indirect
4448
github.com/zeebo/xxh3 v1.0.2 // indirect
4549
golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect
4650
golang.org/x/mod v0.10.0 // indirect

Diff for: tracker/backend/ingestor/go.sum

+6
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go
9999
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
100100
github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
101101
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
102+
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
103+
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
102104
github.com/bufbuild/connect-go v1.9.0 h1:JIgAeNuFpo+SUPfU19Yt5TcWlznsN5Bv10/gI/6Pjoc=
103105
github.com/bufbuild/connect-go v1.9.0/go.mod h1:CAIePUgkDR5pAFaylSMtNK45ANQjp9JvpluG20rhpV8=
104106
github.com/bufbuild/connect-grpcreflect-go v1.1.0 h1:T0FKu1y9zZW4cjHuF+Q7jIN6ek8HTpCxOP8ZsORZICg=
@@ -418,6 +420,10 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
418420
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
419421
github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g=
420422
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
423+
github.com/segmentio/analytics-go/v3 v3.2.1 h1:G+f90zxtc1p9G+WigVyTR0xNfOghOGs/PYAlljLOyeg=
424+
github.com/segmentio/analytics-go/v3 v3.2.1/go.mod h1:p8owAF8X+5o27jmvUognuXxdtqvSGtD0ZrfY2kcS9bE=
425+
github.com/segmentio/backo-go v1.0.0 h1:kbOAtGJY2DqOR0jfRkYEorx/b18RgtepGtY3+Cpe6qA=
426+
github.com/segmentio/backo-go v1.0.0/go.mod h1:kJ9mm9YmoWSkk+oQ+5Cj8DEoRCX2JT6As4kEtIIOp1M=
421427
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
422428
github.com/shirou/gopsutil/v3 v3.22.2/go.mod h1:WapW1AOOPlHyXr+yOyw3uYx36enocrtSoSBy0L5vUHY=
423429
github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=

Diff for: tracker/backend/ingestor/handler/sample.go

+26
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/aws/aws-sdk-go-v2/service/cloudwatch"
1111
"github.com/aws/aws-sdk-go-v2/service/cloudwatch/types"
1212
v1 "github.com/gitpod-io/leeway/pkg/remotereporter/api/gen/v1"
13+
segment "github.com/segmentio/analytics-go/v3"
1314
"github.com/sirupsen/logrus"
1415
)
1516

@@ -73,3 +74,28 @@ func WriteToInfluxDB(client *influx.Client, database string) SampleStorageFunc {
7374
)
7475
}
7576
}
77+
78+
func WriteToSegment(client segment.Client) SampleStorageFunc {
79+
return func(ctx context.Context, sample *v1.PackageBuildFinishedRequest) error {
80+
eventName := "package_build_"
81+
if sample.Error == "" {
82+
eventName += "succeeded"
83+
} else {
84+
eventName += "failed"
85+
}
86+
87+
client.Enqueue(segment.Track{
88+
AnonymousId: sample.SessionId,
89+
Event: eventName,
90+
Timestamp: time.Now(),
91+
Properties: segment.Properties{
92+
"name": sample.Package.Name,
93+
"durationMS": sample.DurationMs,
94+
"repo": sample.Package.Git.Origin,
95+
"dirtyWorkingCopy": sample.Package.Git.DirtyWorkingCopy,
96+
"commit": sample.Package.Git.Commit,
97+
},
98+
})
99+
return nil
100+
}
101+
}

Diff for: tracker/backend/ingestor/main.go

+9-5
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,17 @@ import (
1414
"github.com/aws/aws-sdk-go-v2/service/cloudwatch"
1515
"github.com/awslabs/aws-lambda-go-api-proxy/httpadapter"
1616
grpcreflect "github.com/bufbuild/connect-grpcreflect-go"
17+
segment "github.com/segmentio/analytics-go/v3"
1718
"github.com/sirupsen/logrus"
1819

1920
"github.com/gitpod-io/leeway/pkg/remotereporter/api/gen/v1/v1connect"
2021
"github.com/gitpod-io/leeway/tracker/backend/ingestor/handler"
2122
)
2223

2324
var (
24-
listen = flag.String("listen", ":8080", "address to listen on when not running as lambda")
25-
verbose = flag.Bool("verbose", false, "enable verbose logging")
26-
sampleSink = flag.String("sample-sink", "console", "where to write samples to. Valid values are: console, cloudwatch")
25+
listen = flag.String("listen", ":8080", "address to listen on when not running as lambda")
26+
verbose = flag.Bool("verbose", false, "enable verbose logging")
27+
sink = flag.String("sink", "console", "where to write samples to. Valid values are: console, cloudwatch, influxdb, segment")
2728
)
2829

2930
func main() {
@@ -41,7 +42,7 @@ func main() {
4142
mux := http.NewServeMux()
4243

4344
var store handler.SampleStorageFunc
44-
switch *sampleSink {
45+
switch *sink {
4546
case "console":
4647
store = handler.PrintSample
4748
case "cloudwatch":
@@ -57,8 +58,11 @@ func main() {
5758
log.Fatalf("cannot create InfluxDB client: %v", err)
5859
}
5960
store = handler.WriteToInfluxDB(client, os.Getenv("INFLUXDB_DATABASE"))
61+
case "segment":
62+
client := segment.New(os.Getenv("SEGMENT_KEY"))
63+
store = handler.WriteToSegment(client)
6064
default:
61-
logrus.Fatalf("unsupported --sample-sink: %s", *sampleSink)
65+
logrus.Fatalf("unsupported --sample-sink: %s", *sink)
6266
}
6367
mux.Handle(v1connect.NewReporterServiceHandler(handler.NewBuildReportHandler(store)))
6468

0 commit comments

Comments
 (0)