Skip to content

Commit 5c32c1e

Browse files
authored
Add traffic stats handler to apps and proxies (#11590)
Fixes: buildbuddy-io/buildbuddy-internal#6134
1 parent d51a63b commit 5c32c1e

File tree

7 files changed

+33
-7
lines changed

7 files changed

+33
-7
lines changed

enterprise/server/cmd/cache_proxy/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ go_library(
3030
"//enterprise/server/routing/routing_content_addressable_storage_client",
3131
"//enterprise/server/routing/routing_service",
3232
"//enterprise/server/util/proxy_util",
33+
"//enterprise/server/util/trafficstats",
3334
"//proto:cache_service_go_proto",
3435
"//proto:oci_fetcher_go_proto",
3536
"//proto:remote_asset_go_proto",
@@ -57,6 +58,7 @@ go_library(
5758
"@org_golang_google_genproto_googleapis_bytestream//:bytestream",
5859
"@org_golang_google_grpc//:grpc",
5960
"@org_golang_google_grpc//channelz/service",
61+
"@org_golang_google_grpc//stats",
6062
],
6163
)
6264

enterprise/server/cmd/cache_proxy/cache_proxy.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"github.com/buildbuddy-io/buildbuddy/enterprise/server/routing/routing_content_addressable_storage_client"
3030
"github.com/buildbuddy-io/buildbuddy/enterprise/server/routing/routing_service"
3131
"github.com/buildbuddy-io/buildbuddy/enterprise/server/util/proxy_util"
32+
"github.com/buildbuddy-io/buildbuddy/enterprise/server/util/trafficstats"
3233
"github.com/buildbuddy-io/buildbuddy/server/cache_server"
3334
"github.com/buildbuddy-io/buildbuddy/server/config"
3435
"github.com/buildbuddy-io/buildbuddy/server/real_environment"
@@ -57,6 +58,7 @@ import (
5758
http_interceptors "github.com/buildbuddy-io/buildbuddy/server/http/interceptors"
5859
bspb "google.golang.org/genproto/googleapis/bytestream"
5960
channelzservice "google.golang.org/grpc/channelz/service"
61+
"google.golang.org/grpc/stats"
6062
)
6163

6264
var (
@@ -202,6 +204,10 @@ func main() {
202204
}
203205

204206
func startGRPCServers(env *real_environment.RealEnv) error {
207+
trafficStatsHandler, err := trafficstats.NewServerHandler()
208+
if err != nil {
209+
return status.WrapError(err, "failed to create traffic stats handler")
210+
}
205211
// Add the API-Key, JWT, client-identity, etc... propagating interceptor.
206212
grpcServerConfig := grpc_server.GRPCServerConfig{
207213
ExtraChainedUnaryInterceptors: []grpc.UnaryServerInterceptor{
@@ -210,6 +216,7 @@ func startGRPCServers(env *real_environment.RealEnv) error {
210216
ExtraChainedStreamInterceptors: []grpc.StreamServerInterceptor{
211217
interceptors.PropagateMetadataStreamInterceptor(proxy_util.HeadersToPropagate...),
212218
},
219+
ExtraStatsHandlers: []stats.Handler{trafficStatsHandler},
213220
}
214221

215222
// Start and register internal servers first because the external proxy

enterprise/server/cmd/server/BUILD

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ go_library(
7474
"//enterprise/server/usage_service",
7575
"//enterprise/server/util/dsingleflight",
7676
"//enterprise/server/util/redisutil",
77+
"//enterprise/server/util/trafficstats",
7778
"//enterprise/server/webhooks/bitbucket",
7879
"//enterprise/server/webhooks/github",
7980
"//enterprise/server/workflow/service",
@@ -86,10 +87,12 @@ go_library(
8687
"//server/remote_cache/capabilities_server",
8788
"//server/telemetry",
8889
"//server/util/clickhouse",
90+
"//server/util/grpc_server",
8991
"//server/util/healthcheck",
9092
"//server/util/log",
9193
"//server/util/tracing",
9294
"//server/version",
95+
"@org_golang_google_grpc//stats",
9396
],
9497
)
9598

enterprise/server/cmd/server/main.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ import (
5959
"github.com/buildbuddy-io/buildbuddy/enterprise/server/usage_service"
6060
"github.com/buildbuddy-io/buildbuddy/enterprise/server/util/dsingleflight"
6161
"github.com/buildbuddy-io/buildbuddy/enterprise/server/util/redisutil"
62+
"github.com/buildbuddy-io/buildbuddy/enterprise/server/util/trafficstats"
6263
"github.com/buildbuddy-io/buildbuddy/enterprise/server/webhooks/bitbucket"
6364
"github.com/buildbuddy-io/buildbuddy/enterprise/server/webhooks/github"
6465
"github.com/buildbuddy-io/buildbuddy/enterprise/server/workspace"
@@ -69,12 +70,16 @@ import (
6970
"github.com/buildbuddy-io/buildbuddy/server/real_environment"
7071
"github.com/buildbuddy-io/buildbuddy/server/remote_cache/capabilities_server"
7172
"github.com/buildbuddy-io/buildbuddy/server/telemetry"
73+
"github.com/buildbuddy-io/buildbuddy/server/util/grpc_server"
74+
7275
"github.com/buildbuddy-io/buildbuddy/server/util/clickhouse"
7376
"github.com/buildbuddy-io/buildbuddy/server/util/healthcheck"
7477
"github.com/buildbuddy-io/buildbuddy/server/util/log"
7578
"github.com/buildbuddy-io/buildbuddy/server/util/tracing"
7679
"github.com/buildbuddy-io/buildbuddy/server/version"
7780

81+
"google.golang.org/grpc/stats"
82+
7883
enterprise_app_bundle "github.com/buildbuddy-io/buildbuddy/enterprise/app"
7984
remote_execution_redis_client "github.com/buildbuddy-io/buildbuddy/enterprise/server/remote_execution/redis_client"
8085
telserver "github.com/buildbuddy-io/buildbuddy/enterprise/server/telemetry"
@@ -342,5 +347,11 @@ func main() {
342347
log.Fatalf("%v", err)
343348
}
344349

345-
libmain.StartAndRunServices(realEnv) // Returns after graceful shutdown
350+
trafficStatsHandler, err := trafficstats.NewServerHandler()
351+
if err != nil {
352+
log.Fatalf("Error creating traffic stats handler: %v", err)
353+
}
354+
libmain.StartAndRunServices(realEnv, grpc_server.GRPCServerConfig{
355+
ExtraStatsHandlers: []stats.Handler{trafficStatsHandler},
356+
}) // Returns after graceful shutdown
346357
}

server/cmd/buildbuddy/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ go_library(
7171
"//server/libmain",
7272
"//server/remote_cache/capabilities_server",
7373
"//server/telemetry",
74+
"//server/util/grpc_server",
7475
"//server/util/healthcheck",
7576
"//server/util/log",
7677
"//server/version",

server/cmd/buildbuddy/main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package main
33
import (
44
"flag"
55

6+
"github.com/buildbuddy-io/buildbuddy/server/util/grpc_server"
7+
68
"github.com/buildbuddy-io/buildbuddy/server/config"
79
"github.com/buildbuddy-io/buildbuddy/server/janitor"
810
"github.com/buildbuddy-io/buildbuddy/server/libmain"
@@ -54,5 +56,5 @@ func main() {
5456
if err := capabilities_server.Register(env); err != nil {
5557
log.Fatalf("%v", err)
5658
}
57-
libmain.StartAndRunServices(env) // Does not return
59+
libmain.StartAndRunServices(env, grpc_server.GRPCServerConfig{}) // Does not return
5860
}

server/libmain/libmain.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,8 @@ func registerInternalServices(env *real_environment.RealEnv, grpcServer *grpc.Se
247247
channelzservice.RegisterChannelzServiceToServer(grpcServer)
248248
}
249249

250-
func startGRPCServers(env *real_environment.RealEnv) error {
251-
b, err := grpc_server.New(env, grpc_server.GRPCPort(), false /*=ssl*/, grpc_server.GRPCServerConfig{})
250+
func startGRPCServers(env *real_environment.RealEnv, config grpc_server.GRPCServerConfig) error {
251+
b, err := grpc_server.New(env, grpc_server.GRPCPort(), false /*=ssl*/, config)
252252
if err != nil {
253253
return err
254254
}
@@ -260,7 +260,7 @@ func startGRPCServers(env *real_environment.RealEnv) error {
260260
grpc_server.EnableGRPCOverHTTP(env, b.GetServer())
261261

262262
if env.GetSSLService().IsEnabled() {
263-
sb, err := grpc_server.New(env, grpc_server.GRPCSPort(), true /*=ssl*/, grpc_server.GRPCServerConfig{})
263+
sb, err := grpc_server.New(env, grpc_server.GRPCSPort(), true /*=ssl*/, config)
264264
if err != nil {
265265
return err
266266
}
@@ -399,7 +399,7 @@ func RegisterLocalServersAndClients(env *real_environment.RealEnv) {
399399
}
400400
}
401401

402-
func StartAndRunServices(env *real_environment.RealEnv) {
402+
func StartAndRunServices(env *real_environment.RealEnv, grpcConfig grpc_server.GRPCServerConfig) {
403403
if *maxThreads > 0 {
404404
debug.SetMaxThreads(*maxThreads)
405405
}
@@ -427,7 +427,7 @@ func StartAndRunServices(env *real_environment.RealEnv) {
427427
log.Fatalf("%v", err)
428428
}
429429

430-
if err := startGRPCServers(env); err != nil {
430+
if err := startGRPCServers(env, grpcConfig); err != nil {
431431
log.Fatalf("%v", err)
432432
}
433433

0 commit comments

Comments
 (0)