diff --git a/go.mod b/go.mod index 35622f940..7483f0798 100644 --- a/go.mod +++ b/go.mod @@ -11,12 +11,13 @@ require ( github.com/aws/aws-sdk-go-v2/service/s3 v1.78.1 github.com/go-chi/chi/v5 v5.2.1 github.com/go-chi/cors v1.2.1 - github.com/jackc/pgx/v5 v5.7.2 + github.com/jackc/pgx/v5 v5.7.3 github.com/jhillyerd/enmime v1.3.0 github.com/prometheus/client_golang v1.21.1 github.com/vektah/gqlparser/v2 v2.5.23 go.gearno.de/crypto/uuid v0.1.0 - go.gearno.de/kit v0.0.0-20250323223516-30dae6317e43 + go.gearno.de/kit v0.0.0-20250324091140-5078a54c3c53 + go.opentelemetry.io/otel v1.35.0 go.opentelemetry.io/otel/trace v1.35.0 golang.org/x/crypto v0.36.0 ) @@ -65,7 +66,6 @@ require ( github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect go.gearno.de/x/panicf v0.1.1 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/otel v1.35.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0 // indirect go.opentelemetry.io/otel/metric v1.35.0 // indirect @@ -77,8 +77,8 @@ require ( golang.org/x/sys v0.31.0 // indirect golang.org/x/text v0.23.0 // indirect golang.org/x/tools v0.30.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 // indirect google.golang.org/grpc v1.71.0 // indirect google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 601d71b24..1ad7d8939 100644 --- a/go.sum +++ b/go.sum @@ -85,8 +85,8 @@ github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsI github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.7.2 h1:mLoDLV6sonKlvjIEsV56SkWNCnuNv531l94GaIzO+XI= -github.com/jackc/pgx/v5 v5.7.2/go.mod h1:ncY89UGWxg82EykZUwSpUKEfccBGGYq1xjrOpsbsfGQ= +github.com/jackc/pgx/v5 v5.7.3 h1:PO1wNKj/bTAwxSJnO1Z4Ai8j4magtqg2SLNjEDzcXQo= +github.com/jackc/pgx/v5 v5.7.3/go.mod h1:ncY89UGWxg82EykZUwSpUKEfccBGGYq1xjrOpsbsfGQ= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056 h1:iCHtR9CQyktQ5+f3dMVZfwD2KWJUgm7M0gdL9NGr8KA= @@ -148,8 +148,10 @@ github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGC github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= go.gearno.de/crypto/uuid v0.1.0 h1:94BYg7GYItJ6yYZ1GJayb3VYhI9/FjxuR1nFaduR4hE= go.gearno.de/crypto/uuid v0.1.0/go.mod h1:fnIIvKO9QnsyLO3ZJLJT3r8KZv/p0FOeT5eZKilYWXg= -go.gearno.de/kit v0.0.0-20250323223516-30dae6317e43 h1:qp4H4Ezs6ivVTBBok/T2oPNhFhLHwFeJnryOm5UKx9Q= -go.gearno.de/kit v0.0.0-20250323223516-30dae6317e43/go.mod h1:RsqqVkwq+p4rmtOfYLX8NmQ+kIDi0tgyzAr2GsuLUnE= +go.gearno.de/kit v0.0.0-20250323231529-4603d1d2edd2 h1:bwHx+31iPobD3iYXTPXIIzBpMlwR1t6me2swMcG7cX4= +go.gearno.de/kit v0.0.0-20250323231529-4603d1d2edd2/go.mod h1:cEDPOR+WVloqrYmGBoSpHlLqSmTCBjW1j02ntm0Yk9U= +go.gearno.de/kit v0.0.0-20250324091140-5078a54c3c53 h1:4dKq7+vYcc6/+dYlZ0GSsvPKL6u/CHy9Fl6IY+0nv18= +go.gearno.de/kit v0.0.0-20250324091140-5078a54c3c53/go.mod h1:cEDPOR+WVloqrYmGBoSpHlLqSmTCBjW1j02ntm0Yk9U= go.gearno.de/x/panicf v0.1.1 h1:E3Cr9NB8Ry2EsvEG/1eHr7kplP3tEjTf5d56dTX64VQ= go.gearno.de/x/panicf v0.1.1/go.mod h1:VnB8oF0UefMZcYeD4v+Wk4U5Z1uza7PHLlhT2CbNEbU= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= @@ -186,10 +188,10 @@ golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= -google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950= -google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb h1:TLPQVbx1GJ8VKZxz52VAxl1EBgKXXbTiU9Fc5fZeLn4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= +google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4 h1:IFnXJq3UPB3oBREOodn1v1aGQeZYQclEmvWRMN0PSsY= +google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:c8q6Z6OCqnfVIqUFJkCzKcrj8eCvUrz+K4KRzSTuANg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 h1:iK2jbkWL86DXjEx0qiHcRE9dE4/Ahua5k6V8OWFb//c= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= diff --git a/pkg/probod/probod.go b/pkg/probod/probod.go index 0b17bb2fb..b655dc79c 100644 --- a/pkg/probod/probod.go +++ b/pkg/probod/probod.go @@ -114,8 +114,12 @@ func (impl *Implm) Run( r prometheus.Registerer, tp trace.TracerProvider, ) error { + tracer := tp.Tracer("probod") + ctx, rootSpan := tracer.Start(parentCtx, "probod.Run") + defer rootSpan.End() + wg := sync.WaitGroup{} - ctx, cancel := context.WithCancelCause(parentCtx) + ctx, cancel := context.WithCancelCause(ctx) defer cancel(context.Canceled) pgClient, err := pg.NewClient( @@ -126,17 +130,20 @@ func (impl *Implm) Run( )..., ) if err != nil { + rootSpan.RecordError(err) return fmt.Errorf("cannot create pg client: %w", err) } pepper, err := impl.cfg.Auth.GetPepperBytes() if err != nil { + rootSpan.RecordError(err) return fmt.Errorf("cannot get pepper bytes: %w", err) } // Validate cookie secret _, err = impl.cfg.Auth.GetCookieSecretBytes() if err != nil { + rootSpan.RecordError(err) return fmt.Errorf("cannot get cookie secret bytes: %w", err) } @@ -246,6 +253,10 @@ func (impl *Implm) runApiServer( tp trace.TracerProvider, handler http.Handler, ) error { + tracer := tp.Tracer("github.com/getprobo/probo/pkg/probod") + ctx, span := tracer.Start(ctx, "probod.runApiServer") + defer span.End() + apiServer := httpserver.NewServer( impl.cfg.Api.Addr, handler, @@ -255,9 +266,11 @@ func (impl *Implm) runApiServer( ) l.Info("starting api server", log.String("addr", apiServer.Addr)) + span.AddEvent("API server starting") listener, err := net.Listen("tcp", apiServer.Addr) if err != nil { + span.RecordError(err) return fmt.Errorf("cannot listen on %q: %w", apiServer.Addr, err) } defer listener.Close() @@ -272,21 +285,28 @@ func (impl *Implm) runApiServer( }() l.Info("api server started") + span.AddEvent("API server started") select { case err := <-serverErrCh: + if err != nil { + span.RecordError(err) + } return err case <-ctx.Done(): } l.InfoCtx(ctx, "shutting down api server") + span.AddEvent("API server shutting down") shutdownCtx, cancel := context.WithTimeout(context.Background(), time.Second*10) defer cancel() if err := apiServer.Shutdown(shutdownCtx); err != nil { + span.RecordError(err) return fmt.Errorf("cannot shutdown api server: %w", err) } + span.AddEvent("API server shutdown complete") return ctx.Err() }