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

Remote reporting of package build times and success #156

Draft
wants to merge 13 commits into
base: main
Choose a base branch
from
Prev Previous commit
Next Next commit
Add segment support
  • Loading branch information
csweichel committed Jul 1, 2023
commit 3e6f8c7c1f224606f31d77a24b27cbe039d1b2e6
4 changes: 4 additions & 0 deletions tracker/backend/ingestor/go.mod
Original file line number Diff line number Diff line change
@@ -12,6 +12,7 @@ require (
github.com/bufbuild/connect-go v1.9.0
github.com/bufbuild/connect-grpcreflect-go v1.1.0
github.com/gitpod-io/leeway v0.0.0-00010101000000-000000000000
github.com/segmentio/analytics-go/v3 v3.2.1
github.com/sirupsen/logrus v1.9.3
)

@@ -29,10 +30,12 @@ require (
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.12 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.19.2 // indirect
github.com/aws/smithy-go v1.13.5 // indirect
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
github.com/goccy/go-json v0.9.11 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/flatbuffers v2.0.8+incompatible // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/influxdata/line-protocol/v2 v2.2.1 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/klauspost/asmfmt v1.3.2 // indirect
@@ -41,6 +44,7 @@ require (
github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // indirect
github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect
github.com/pierrec/lz4/v4 v4.1.15 // indirect
github.com/segmentio/backo-go v1.0.0 // indirect
github.com/zeebo/xxh3 v1.0.2 // indirect
golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect
golang.org/x/mod v0.10.0 // indirect
6 changes: 6 additions & 0 deletions tracker/backend/ingestor/go.sum
Original file line number Diff line number Diff line change
@@ -99,6 +99,8 @@ github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/bufbuild/connect-go v1.9.0 h1:JIgAeNuFpo+SUPfU19Yt5TcWlznsN5Bv10/gI/6Pjoc=
github.com/bufbuild/connect-go v1.9.0/go.mod h1:CAIePUgkDR5pAFaylSMtNK45ANQjp9JvpluG20rhpV8=
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
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/segmentio/analytics-go/v3 v3.2.1 h1:G+f90zxtc1p9G+WigVyTR0xNfOghOGs/PYAlljLOyeg=
github.com/segmentio/analytics-go/v3 v3.2.1/go.mod h1:p8owAF8X+5o27jmvUognuXxdtqvSGtD0ZrfY2kcS9bE=
github.com/segmentio/backo-go v1.0.0 h1:kbOAtGJY2DqOR0jfRkYEorx/b18RgtepGtY3+Cpe6qA=
github.com/segmentio/backo-go v1.0.0/go.mod h1:kJ9mm9YmoWSkk+oQ+5Cj8DEoRCX2JT6As4kEtIIOp1M=
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shirou/gopsutil/v3 v3.22.2/go.mod h1:WapW1AOOPlHyXr+yOyw3uYx36enocrtSoSBy0L5vUHY=
github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
26 changes: 26 additions & 0 deletions tracker/backend/ingestor/handler/sample.go
Original file line number Diff line number Diff line change
@@ -10,6 +10,7 @@ import (
"github.com/aws/aws-sdk-go-v2/service/cloudwatch"
"github.com/aws/aws-sdk-go-v2/service/cloudwatch/types"
v1 "github.com/gitpod-io/leeway/pkg/remotereporter/api/gen/v1"
segment "github.com/segmentio/analytics-go/v3"
"github.com/sirupsen/logrus"
)

@@ -73,3 +74,28 @@ func WriteToInfluxDB(client *influx.Client, database string) SampleStorageFunc {
)
}
}

func WriteToSegment(client segment.Client) SampleStorageFunc {
return func(ctx context.Context, sample *v1.PackageBuildFinishedRequest) error {
eventName := "package_build_"
if sample.Error == "" {
eventName += "succeeded"
} else {
eventName += "failed"
}

client.Enqueue(segment.Track{
AnonymousId: sample.SessionId,
Event: eventName,
Timestamp: time.Now(),
Properties: segment.Properties{
"name": sample.Package.Name,
"durationMS": sample.DurationMs,
"repo": sample.Package.Git.Origin,
"dirtyWorkingCopy": sample.Package.Git.DirtyWorkingCopy,
"commit": sample.Package.Git.Commit,
},
})
return nil
}
}
14 changes: 9 additions & 5 deletions tracker/backend/ingestor/main.go
Original file line number Diff line number Diff line change
@@ -14,16 +14,17 @@ import (
"github.com/aws/aws-sdk-go-v2/service/cloudwatch"
"github.com/awslabs/aws-lambda-go-api-proxy/httpadapter"
grpcreflect "github.com/bufbuild/connect-grpcreflect-go"
segment "github.com/segmentio/analytics-go/v3"
"github.com/sirupsen/logrus"

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

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

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

var store handler.SampleStorageFunc
switch *sampleSink {
switch *sink {
case "console":
store = handler.PrintSample
case "cloudwatch":
@@ -57,8 +58,11 @@ func main() {
log.Fatalf("cannot create InfluxDB client: %v", err)
}
store = handler.WriteToInfluxDB(client, os.Getenv("INFLUXDB_DATABASE"))
case "segment":
client := segment.New(os.Getenv("SEGMENT_KEY"))
store = handler.WriteToSegment(client)
default:
logrus.Fatalf("unsupported --sample-sink: %s", *sampleSink)
logrus.Fatalf("unsupported --sample-sink: %s", *sink)
}
mux.Handle(v1connect.NewReporterServiceHandler(handler.NewBuildReportHandler(store)))