diff options
author | Florian Klink <flokli@flokli.de> | 2024-05-14T10·35+0200 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2024-05-15T21·31+0000 |
commit | 1392913e981ae4edbec6ef39a4d3de44749ad81c (patch) | |
tree | 899672eac93c185a11a125e2f8d1c41367edbf17 /tvix/nar-bridge/cmd | |
parent | ce1aa10b694662a3bb4061184312de7a422cfe42 (diff) |
chore(tvix/nar-bridge): move to nar-bridge-go r/8147
Make some space for the rust implementation. Change-Id: I924dc1657be10abe5a11951c3b9de50bae06db19 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11662 Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de> Reviewed-by: yuka <yuka@yuka.dev>
Diffstat (limited to 'tvix/nar-bridge/cmd')
-rw-r--r-- | tvix/nar-bridge/cmd/nar-bridge-http/main.go | 93 | ||||
-rw-r--r-- | tvix/nar-bridge/cmd/nar-bridge-http/otel.go | 87 |
2 files changed, 0 insertions, 180 deletions
diff --git a/tvix/nar-bridge/cmd/nar-bridge-http/main.go b/tvix/nar-bridge/cmd/nar-bridge-http/main.go deleted file mode 100644 index 171ea7f5bdd0..000000000000 --- a/tvix/nar-bridge/cmd/nar-bridge-http/main.go +++ /dev/null @@ -1,93 +0,0 @@ -package main - -import ( - "context" - "os" - "os/signal" - "runtime/debug" - "time" - - "github.com/alecthomas/kong" - - "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials/insecure" - - castorev1pb "code.tvl.fyi/tvix/castore-go" - narBridgeHttp "code.tvl.fyi/tvix/nar-bridge/pkg/http" - storev1pb "code.tvl.fyi/tvix/store-go" - log "github.com/sirupsen/logrus" -) - -// `help:"Expose a tvix-store gRPC Interface as HTTP NAR/NARinfo"` -var cli struct { - LogLevel string `enum:"trace,debug,info,warn,error,fatal,panic" help:"The log level to log with" default:"info"` - ListenAddr string `name:"listen-addr" help:"The address this service listens on" type:"string" default:"[::]:9000"` //nolint:lll - EnableAccessLog bool `name:"access-log" help:"Enable access logging" type:"bool" default:"true" negatable:""` //nolint:lll - StoreAddr string `name:"store-addr" help:"The address to the tvix-store RPC interface this will connect to" default:"localhost:8000"` //nolint:lll - EnableOtlp bool `name:"otlp" help:"Enable OpenTelemetry for logs, spans, and metrics" default:"true"` //nolint:lll -} - -func main() { - _ = kong.Parse(&cli) - - logLevel, err := log.ParseLevel(cli.LogLevel) - if err != nil { - log.Panic("invalid log level") - return - } - log.SetLevel(logLevel) - - ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) - defer stop() - - if cli.EnableOtlp { - buildInfo, ok := debug.ReadBuildInfo() - if !ok { - log.Fatal("failed to read build info") - } - - shutdown, err := setupOpenTelemetry(ctx, "nar-bridge", buildInfo.Main.Version) - if err != nil { - log.WithError(err).Fatal("failed to setup OpenTelemetry") - } - defer shutdown(context.Background()) - } - - // connect to tvix-store - log.Debugf("Dialing to %v", cli.StoreAddr) - conn, err := grpc.DialContext(ctx, cli.StoreAddr, - grpc.WithTransportCredentials(insecure.NewCredentials()), - grpc.WithStatsHandler(otelgrpc.NewClientHandler()), - ) - if err != nil { - log.Fatalf("did not connect: %v", err) - } - defer conn.Close() - - s := narBridgeHttp.New( - castorev1pb.NewDirectoryServiceClient(conn), - castorev1pb.NewBlobServiceClient(conn), - storev1pb.NewPathInfoServiceClient(conn), - cli.EnableAccessLog, - 30, - ) - - log.Printf("Starting nar-bridge-http at %v", cli.ListenAddr) - go s.ListenAndServe(cli.ListenAddr) - - // listen for the interrupt signal. - <-ctx.Done() - - // Restore default behaviour on the interrupt signal - stop() - log.Info("Received Signal, shutting down, press Ctl+C again to force.") - - timeoutCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - defer cancel() - - if err := s.Shutdown(timeoutCtx); err != nil { - log.WithError(err).Warn("failed to shutdown") - os.Exit(1) - } -} diff --git a/tvix/nar-bridge/cmd/nar-bridge-http/otel.go b/tvix/nar-bridge/cmd/nar-bridge-http/otel.go deleted file mode 100644 index c446c6ec1a14..000000000000 --- a/tvix/nar-bridge/cmd/nar-bridge-http/otel.go +++ /dev/null @@ -1,87 +0,0 @@ -package main - -import ( - "context" - "errors" - - "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc" - "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" - "go.opentelemetry.io/otel/propagation" - "go.opentelemetry.io/otel/sdk/metric" - "go.opentelemetry.io/otel/sdk/resource" - "go.opentelemetry.io/otel/sdk/trace" - semconv "go.opentelemetry.io/otel/semconv/v1.24.0" -) - -func setupOpenTelemetry(ctx context.Context, serviceName, serviceVersion string) (func(context.Context) error, error) { - var shutdownFuncs []func(context.Context) error - shutdown := func(ctx context.Context) error { - var err error - for _, fn := range shutdownFuncs { - err = errors.Join(err, fn(ctx)) - } - shutdownFuncs = nil - return err - } - - res, err := resource.Merge( - resource.Default(), - resource.NewWithAttributes( - semconv.SchemaURL, - semconv.ServiceName(serviceName), - semconv.ServiceVersion(serviceVersion), - ), - ) - if err != nil { - return nil, errors.Join(err, shutdown(ctx)) - } - - prop := propagation.NewCompositeTextMapPropagator( - propagation.TraceContext{}, - propagation.Baggage{}, - ) - otel.SetTextMapPropagator(prop) - - tracerProvider, err := newTraceProvider(ctx, res) - if err != nil { - return nil, errors.Join(err, shutdown(ctx)) - } - shutdownFuncs = append(shutdownFuncs, tracerProvider.Shutdown) - otel.SetTracerProvider(tracerProvider) - - meterProvider, err := newMeterProvider(ctx, res) - if err != nil { - return nil, errors.Join(err, shutdown(ctx)) - } - shutdownFuncs = append(shutdownFuncs, meterProvider.Shutdown) - otel.SetMeterProvider(meterProvider) - - return shutdown, nil -} - -func newTraceProvider(ctx context.Context, res *resource.Resource) (*trace.TracerProvider, error) { - traceExporter, err := otlptracegrpc.New(ctx) - if err != nil { - return nil, err - } - - traceProvider := trace.NewTracerProvider( - trace.WithBatcher(traceExporter), - trace.WithResource(res), - ) - return traceProvider, nil -} - -func newMeterProvider(ctx context.Context, res *resource.Resource) (*metric.MeterProvider, error) { - metricExporter, err := otlpmetricgrpc.New(ctx) - if err != nil { - return nil, err - } - - meterProvider := metric.NewMeterProvider( - metric.WithResource(res), - metric.WithReader(metric.NewPeriodicReader(metricExporter)), - ) - return meterProvider, nil -} |