diff --git a/.golangci.yml b/.golangci.yml index 11334fc9f..94f46ba0f 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -34,6 +34,8 @@ linters-settings: no-unaliased: true no-extra-aliases: false alias: + - pkg: go.temporal.io/sdk/contrib/(\w+) + alias: temporalsdk_contrib_$1 - pkg: go.temporal.io/sdk/(\w+) alias: temporalsdk_$1 - pkg: go.temporal.io/api/(\w+) diff --git a/cmd/enduro-a3m-worker/main.go b/cmd/enduro-a3m-worker/main.go index f2f283b56..403c85dcc 100644 --- a/cmd/enduro-a3m-worker/main.go +++ b/cmd/enduro-a3m-worker/main.go @@ -17,6 +17,8 @@ import ( "go.artefactual.dev/tools/log" temporalsdk_activity "go.temporal.io/sdk/activity" temporalsdk_client "go.temporal.io/sdk/client" + temporalsdk_contrib_opentelemetry "go.temporal.io/sdk/contrib/opentelemetry" + temporalsdk_interceptor "go.temporal.io/sdk/interceptor" temporalsdk_worker "go.temporal.io/sdk/worker" goahttp "goa.design/goa/v3/http" @@ -28,6 +30,7 @@ import ( "github.com/artefactual-sdps/enduro/internal/db" "github.com/artefactual-sdps/enduro/internal/event" "github.com/artefactual-sdps/enduro/internal/package_" + "github.com/artefactual-sdps/enduro/internal/telemetry" "github.com/artefactual-sdps/enduro/internal/temporal" "github.com/artefactual-sdps/enduro/internal/version" "github.com/artefactual-sdps/enduro/internal/watcher" @@ -76,17 +79,35 @@ func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - enduroDatabase, err := db.Connect(cfg.Database.Driver, cfg.Database.DSN) + // Set up the tracer provider. + tp, shutdown, err := telemetry.TracerProvider(ctx, logger, cfg.Telemetry, appName, version.Long) + if err != nil { + logger.Error(err, "Error creating tracer provider.") + os.Exit(1) + } + defer func() { _ = shutdown(ctx) }() + + enduroDatabase, err := db.Connect(ctx, tp, cfg.Database.Driver, cfg.Database.DSN) if err != nil { logger.Error(err, "Enduro database configuration failed.") os.Exit(1) } - _ = enduroDatabase.Ping() + // Set up the Temporal client. + tracingInterceptor, err := temporalsdk_contrib_opentelemetry.NewTracingInterceptor( + temporalsdk_contrib_opentelemetry.TracerOptions{ + Tracer: tp.Tracer("temporal-sdk-go"), + }, + ) + if err != nil { + logger.Error(err, "Unable to create OpenTelemetry interceptor.") + os.Exit(1) + } temporalClient, err := temporalsdk_client.Dial(temporalsdk_client.Options{ - Namespace: cfg.Temporal.Namespace, - HostPort: cfg.Temporal.Address, - Logger: temporal.Logger(logger.WithName("temporal-client")), + Namespace: cfg.Temporal.Namespace, + HostPort: cfg.Temporal.Address, + Logger: temporal.Logger(logger.WithName("temporal-client")), + Interceptors: []temporalsdk_interceptor.ClientInterceptor{tracingInterceptor}, }) if err != nil { logger.Error(err, "Error creating Temporal client.") diff --git a/cmd/enduro-am-worker/main.go b/cmd/enduro-am-worker/main.go index c9fbd8cd2..312805ed0 100644 --- a/cmd/enduro-am-worker/main.go +++ b/cmd/enduro-am-worker/main.go @@ -19,6 +19,8 @@ import ( "go.artefactual.dev/tools/log" temporalsdk_activity "go.temporal.io/sdk/activity" temporalsdk_client "go.temporal.io/sdk/client" + temporalsdk_contrib_opentelemetry "go.temporal.io/sdk/contrib/opentelemetry" + temporalsdk_interceptor "go.temporal.io/sdk/interceptor" temporalsdk_worker "go.temporal.io/sdk/worker" "github.com/artefactual-sdps/enduro/internal/am" @@ -28,6 +30,7 @@ import ( "github.com/artefactual-sdps/enduro/internal/event" "github.com/artefactual-sdps/enduro/internal/package_" "github.com/artefactual-sdps/enduro/internal/sftp" + "github.com/artefactual-sdps/enduro/internal/telemetry" "github.com/artefactual-sdps/enduro/internal/temporal" "github.com/artefactual-sdps/enduro/internal/version" "github.com/artefactual-sdps/enduro/internal/watcher" @@ -76,17 +79,36 @@ func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - enduroDatabase, err := db.Connect(cfg.Database.Driver, cfg.Database.DSN) + // Set up the tracer provider. + tp, shutdown, err := telemetry.TracerProvider(ctx, logger, cfg.Telemetry, appName, version.Long) + if err != nil { + logger.Error(err, "Error creating tracer provider.") + os.Exit(1) + } + defer func() { _ = shutdown(ctx) }() + + enduroDatabase, err := db.Connect(ctx, tp, cfg.Database.Driver, cfg.Database.DSN) if err != nil { logger.Error(err, "Enduro database configuration failed.") os.Exit(1) } _ = enduroDatabase.Ping() + // Set up the Temporal client. + tracingInterceptor, err := temporalsdk_contrib_opentelemetry.NewTracingInterceptor( + temporalsdk_contrib_opentelemetry.TracerOptions{ + Tracer: tp.Tracer("temporal-sdk-go"), + }, + ) + if err != nil { + logger.Error(err, "Unable to create OpenTelemetry interceptor.") + os.Exit(1) + } temporalClient, err := temporalsdk_client.Dial(temporalsdk_client.Options{ - Namespace: cfg.Temporal.Namespace, - HostPort: cfg.Temporal.Address, - Logger: temporal.Logger(logger.WithName("temporal-client")), + Namespace: cfg.Temporal.Namespace, + HostPort: cfg.Temporal.Address, + Logger: temporal.Logger(logger.WithName("temporal-client")), + Interceptors: []temporalsdk_interceptor.ClientInterceptor{tracingInterceptor}, }) if err != nil { logger.Error(err, "Error creating Temporal client.") diff --git a/go.mod b/go.mod index 5014f26ad..50a0f452d 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( buf.build/gen/go/artefactual/a3m/protocolbuffers/go v1.31.0-20230508184533-2e9432075630.2 chainguard.dev/go-oidctest v0.2.0 entgo.io/ent v0.12.5 + github.com/XSAM/otelsql v0.29.0 github.com/alicebob/miniredis/v2 v2.31.0 github.com/aws/aws-sdk-go-v2 v1.24.0 github.com/aws/aws-sdk-go-v2/config v1.26.2 @@ -41,7 +42,7 @@ require ( github.com/spf13/afero v1.11.0 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.18.2 - github.com/stretchr/testify v1.8.4 + github.com/stretchr/testify v1.9.0 go.artefactual.dev/amclient v0.3.0 go.artefactual.dev/tools v0.8.0 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 @@ -51,9 +52,10 @@ require ( go.opentelemetry.io/otel/trace v1.24.0 go.temporal.io/api v1.24.0 go.temporal.io/sdk v1.25.1 + go.temporal.io/sdk/contrib/opentelemetry v0.3.0 go.uber.org/mock v0.4.0 - goa.design/goa/v3 v3.14.1 - goa.design/plugins/v3 v3.14.1 + goa.design/goa/v3 v3.15.1 + goa.design/plugins/v3 v3.15.1 gocloud.dev v0.35.0 golang.org/x/crypto v0.21.0 google.golang.org/grpc v1.62.1 @@ -93,7 +95,7 @@ require ( github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/go-chi/chi/v5 v5.0.11 // indirect + github.com/go-chi/chi/v5 v5.0.12 // indirect github.com/go-jose/go-jose/v3 v3.0.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-logr/zapr v1.3.0 // indirect @@ -138,7 +140,7 @@ require ( github.com/sergi/go-diff v1.3.1 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/cast v1.6.0 // indirect - github.com/stretchr/objx v0.5.1 // indirect + github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/ulikunitz/xz v0.5.11 // indirect github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect @@ -150,16 +152,16 @@ require ( go.opentelemetry.io/proto/otlp v1.1.0 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.26.0 // indirect + go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20231219180239-dc181d75b848 // indirect - golang.org/x/mod v0.14.0 // indirect + golang.org/x/mod v0.15.0 // indirect golang.org/x/net v0.21.0 // indirect golang.org/x/oauth2 v0.16.0 // indirect golang.org/x/sync v0.6.0 // indirect golang.org/x/sys v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.16.1 // indirect + golang.org/x/tools v0.18.0 // indirect golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect google.golang.org/api v0.154.0 // indirect google.golang.org/appengine v1.6.8 // indirect diff --git a/go.sum b/go.sum index daeefb54e..199a7ada7 100644 --- a/go.sum +++ b/go.sum @@ -790,6 +790,8 @@ github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0 github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/XSAM/otelsql v0.29.0 h1:pEw9YXXs8ZrGRYfDc0cmArIz9lci5b42gmP5+tA1Huc= +github.com/XSAM/otelsql v0.29.0/go.mod h1:d3/0xGIGC5RVEE+Ld7KotwaLy6zDeaF3fLJHOPpdN2w= github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= @@ -948,13 +950,13 @@ github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHk github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/getkin/kin-openapi v0.122.0 h1:WB9Jbl0Hp/T79/JF9xlSW5Kl9uYdk/AWD0yAd9HOM10= -github.com/getkin/kin-openapi v0.122.0/go.mod h1:PCWw/lfBrJY4HcdqE3jj+QFkaFK8ABoqo7PvqVhXXqw= +github.com/getkin/kin-openapi v0.123.0 h1:zIik0mRwFNLyvtXK274Q6ut+dPh6nlxBp0x7mNrPhs8= +github.com/getkin/kin-openapi v0.123.0/go.mod h1:wb1aSZA/iWmorQP9KTAS/phLj/t17B5jT7+fS8ed9NM= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.3.6 h1:ZzjlDa05TcFRICb3anf/dSPN3ewz1Zx6CMLPWgkm3b8= github.com/gliderlabs/ssh v0.3.6/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8= -github.com/go-chi/chi/v5 v5.0.11 h1:BnpYbFZ3T3S1WMpD79r7R5ThWX40TaFB7L31Y8xqSwA= -github.com/go-chi/chi/v5 v5.0.11/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-chi/chi/v5 v5.0.12 h1:9euLV5sTrTNTRUU9POmDUvfxyj6LAABLUcEWO+JJb4s= +github.com/go-chi/chi/v5 v5.0.12/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= @@ -965,9 +967,11 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k= github.com/go-jose/go-jose/v3 v3.0.3/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= @@ -978,10 +982,10 @@ github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= github.com/go-openapi/inflect v0.19.0 h1:9jCH9scKIbHeV9m12SmPilScz6krDxKRasNNSNPXu/4= github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4= -github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= -github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= -github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q= +github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs= +github.com/go-openapi/swag v0.22.8 h1:/9RjDSQ0vbFR+NyjGMkFTsA1IA0fmhKSThmfGZjicbw= +github.com/go-openapi/swag v0.22.8/go.mod h1:6QT22icPLEqAM/z/TChgb4WAveCHF92+2gF0CNjHpPI= github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= @@ -994,8 +998,10 @@ github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MG github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= github.com/gogo/status v1.1.1 h1:DuHXlSFHNKqTQ+/ACf5Vs6r4X/dH2EgIzR9Vr+H65kg= github.com/gogo/status v1.1.1/go.mod h1:jpG3dM5QPcqu19Hg8lkUhBFBa3TcLs1DG7+2Jqci7oU= github.com/golang-migrate/migrate/v4 v4.17.0 h1:rd40H3QXU0AA4IoLllFcEAEo9dYKRHYND2gB4p7xcaU= @@ -1131,6 +1137,7 @@ github.com/gorilla/schema v1.2.1 h1:tjDxcmdb+siIqkTNoV+qRH2mjYdr2hHe5MKXbp61ziM= github.com/gorilla/schema v1.2.1/go.mod h1:Dg5SSm5PV60mhF2NFaTV1xuYYj8tV8NOPRo4FggUMnM= github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= @@ -1188,6 +1195,7 @@ github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= @@ -1237,6 +1245,7 @@ github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= @@ -1329,10 +1338,11 @@ github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.1 h1:4VhoImhV/Bm0ToFkXFi8hXNXwpDRZ/ynw3amt82mzq0= -github.com/stretchr/objx v0.5.1/go.mod h1:/iHQpkQwBD6DLUmQ4pE+s1TXdob1mORJ4/UFdrifcy0= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1344,8 +1354,9 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -1385,6 +1396,7 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.4 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1/go.mod h1:4UoMYEZOC0yN/sPGH76KPkkU7zgiEWYWL9vwmbnTJPE= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/otel v1.2.0/go.mod h1:aT17Fk0Z1Nor9e0uisf98LrntPGMnk4frBO9+dkf69I= go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0 h1:t6wl9SPayj+c7lEIFgm4ooDBZVb01IhLB4InpomhRw8= @@ -1393,8 +1405,12 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0 h1:Mw5xc go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0/go.mod h1:CQNu9bj7o7mC6U7+CA/schKEYakYXWr79ucDHTMGhCM= go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/sdk v1.2.0/go.mod h1:jNN8QtpvbsKhgaC6V5lHiejMoKD+V8uadoSafgHPx1U= go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw= go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= +go.opentelemetry.io/otel/sdk/metric v1.24.0 h1:yyMQrPzF+k88/DbH7o4FMAs80puqd+9osbiBrJrz/w8= +go.opentelemetry.io/otel/sdk/metric v1.24.0/go.mod h1:I6Y5FjH6rvEnTTAYQz3Mmv2kl6Ek5IIrmwTLqMrrOE0= +go.opentelemetry.io/otel/trace v1.2.0/go.mod h1:N5FLswTubnxKxOJHM7XZC074qpeEdLy3CgAVsdMucK0= go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= @@ -1402,11 +1418,17 @@ go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI= go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY= +go.temporal.io/api v1.5.0/go.mod h1:BqKxEJJYdxb5dqf0ODfzfMxh8UEQ5L3zKS51FiIYYkA= go.temporal.io/api v1.24.0 h1:WWjMYSXNh4+T4Y4jq1e/d9yCNnWoHhq4bIwflHY6fic= go.temporal.io/api v1.24.0/go.mod h1:4ackgCMjQHMpJYr1UQ6Tr/nknIqFkJ6dZ/SZsGv+St0= +go.temporal.io/sdk v1.12.0/go.mod h1:lSp3lH1lI0TyOsus0arnO3FYvjVXBZGi/G7DjnAnm6o= go.temporal.io/sdk v1.25.1 h1:jC9l9vHHz5OJ7PR6OjrpYSN4+uEG0bLe5rdF9nlMSGk= go.temporal.io/sdk v1.25.1/go.mod h1:X7iFKZpsj90BfszfpFCzLX8lwEJXbnRrl351/HyEgmU= +go.temporal.io/sdk/contrib/opentelemetry v0.3.0 h1:wOEErZugJF1NcBpcxEAmOQmrcRBw3Plx5+LacEbZ1CE= +go.temporal.io/sdk/contrib/opentelemetry v0.3.0/go.mod h1:V0kUHBikUWh3fb4WufUKXd8tKrFO3isZM+MmrfJKIGM= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= @@ -1414,16 +1436,18 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= -go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= -goa.design/goa/v3 v3.14.1 h1:wNvKwCXeEJWmosd2MXaZHjJGm+wtEPCZf5jNXCx3oJo= -goa.design/goa/v3 v3.14.1/go.mod h1:MhHWTSB7X6qVuNvjDTNtr/YQyYi9x1I4zfPtXnCdHtQ= -goa.design/plugins/v3 v3.14.1 h1:JUp9vlSeTP/RUErZWJUmuPV0uVOX19QzCQpO8f4LsH8= -goa.design/plugins/v3 v3.14.1/go.mod h1:/BmXhXOZh6RvBb+97cupnRGBHJ5z8xKM3BA2uXQNWWs= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +goa.design/goa/v3 v3.15.1 h1:pM1gT56iblux9RbZDPW0otJbwxbzmBo4JP1E64yk0Xg= +goa.design/goa/v3 v3.15.1/go.mod h1:EcUOOD0VcSYM/DfhskGBwyE1C1oyHUxb39HvEP74/Fw= +goa.design/plugins/v3 v3.15.1 h1:8nf64yjvVximu5/HqhISIVC7QnKa5qSZ30k4eNI8iK0= +goa.design/plugins/v3 v3.15.1/go.mod h1:j1fUvgTJlOVn8wRZBVTzs2//XwUqhJLMVeNgXzGe4uA= gocloud.dev v0.35.0 h1:x/Gtt5OJdT4j+ir1AXAIXb7bBnFawXAAaJptCUGk3HU= gocloud.dev v0.35.0/go.mod h1:wbyF+BhfdtLWyUtVEWRW13hFLb1vXnV2ovEhYGQe3ck= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -1503,8 +1527,8 @@ golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1542,6 +1566,7 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210913180222-943fd674d43e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1672,6 +1697,7 @@ golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1741,6 +1767,7 @@ golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1812,8 +1839,8 @@ golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= -golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= -golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= +golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2144,6 +2171,7 @@ google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHh gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= diff --git a/go.work.sum b/go.work.sum index f8dd75f7d..a309a995c 100644 --- a/go.work.sum +++ b/go.work.sum @@ -935,6 +935,7 @@ github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= @@ -1108,7 +1109,7 @@ github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/neo4j/neo4j-go-driver v1.8.1-0.20200803113522-b626aa943eba h1:fhFP5RliM2HW/8XdcO5QngSfFli9GcRIpMXvypTQt6E= github.com/neo4j/neo4j-go-driver v1.8.1-0.20200803113522-b626aa943eba/go.mod h1:ncO5VaFWh0Nrt+4KT4mOZboaczBZcLuHrG+/sUeP8gI= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= @@ -1218,6 +1219,7 @@ go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+Gf go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= +go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= gocloud.dev/secrets/hashivault v0.27.0 h1:AAeGJXr0tiHHJgg5tL8atOGktB4eK9EJAqkZbPKAcOo= gocloud.dev/secrets/hashivault v0.27.0/go.mod h1:offqsI5oj0B0bVHZdfk/88uIb3NnN93ia8py0yvRlHY= golang.org/x/crypto v0.0.0-20220517005047-85d78b3ac167/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -1241,6 +1243,8 @@ golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/telemetry v0.0.0-20240208230135-b75ee8823808 h1:+Kc94D8UVEVxJnLXp/+FMfqQARZtWHfVrcRtcG8aT3g= +golang.org/x/telemetry v0.0.0-20240208230135-b75ee8823808/go.mod h1:KG1lNk5ZFNssSZLrpVb4sMXKMpGwGXOxSG3rnu2gZQQ= golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= @@ -1259,6 +1263,7 @@ google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqv google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI= google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY= google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f/go.mod h1:nWSwAFPb+qfNJXsoeO3Io7zf4tMSfN8EA8RlDA04GhY= +google.golang.org/genproto v0.0.0-20231127180814-3a041ad873d4/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= google.golang.org/genproto v0.0.0-20231212172506-995d672761c0/go.mod h1:l/k7rMz0vFTBPy+tFSGvXEd3z+BcoG1k7EHbqm+YBsY= google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:+Rvu7ElI+aLzyDQhpHMFMMltsD6m7nqpuWDd2CwJw3k= @@ -1266,6 +1271,7 @@ google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go. google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870= google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI= +google.golang.org/genproto/googleapis/api v0.0.0-20231127180814-3a041ad873d4/go.mod h1:k2dtGpRrbsSyKcNPKKI5sstZkrNCZwpU/ns96JoHbGg= google.golang.org/genproto/googleapis/api v0.0.0-20231211222908-989df2bf70f3/go.mod h1:k2dtGpRrbsSyKcNPKKI5sstZkrNCZwpU/ns96JoHbGg= google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917/go.mod h1:CmlNWB9lSezaYELKS5Ym1r44VrrbPUa7JTvw+6MbpJ0= google.golang.org/genproto/googleapis/api v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:B5xPO//w8qmBDjGReYLpR6UJPnkldGkCSMoH/2vxJeg= diff --git a/hack/kube/base/enduro-internal.yaml b/hack/kube/base/enduro-internal.yaml index 0e16c228e..c857b6817 100644 --- a/hack/kube/base/enduro-internal.yaml +++ b/hack/kube/base/enduro-internal.yaml @@ -66,6 +66,12 @@ spec: value: $(MINIO_PASSWORD) - name: ENDURO_API_AUTH_ENABLED value: "false" + - name: ENDURO_TELEMETRY_TRACES_ENABLED + value: "true" + - name: ENDURO_TELEMETRY_TRACES_ADDRESS + value: "grafana-agent.enduro-sdps:4317" + - name: ENDURO_TELEMETRY_TRACES_SAMPLING_RATIO + value: "1.0" ports: - containerPort: 9000 resources: {} diff --git a/hack/kube/components/dev/grafana-agent.yaml b/hack/kube/components/dev/grafana-agent.yaml index 58963de6b..a1b02b329 100644 --- a/hack/kube/components/dev/grafana-agent.yaml +++ b/hack/kube/components/dev/grafana-agent.yaml @@ -235,6 +235,7 @@ spec: - --storage.path=/tmp/agent - --server.http.listen-addr=0.0.0.0:80 - --server.http.ui-path-prefix=/ + - --disable-reporting env: - name: AGENT_MODE value: flow diff --git a/hack/kube/components/dev/grafana.yaml b/hack/kube/components/dev/grafana.yaml index 62dbfffe1..9ed99e513 100644 --- a/hack/kube/components/dev/grafana.yaml +++ b/hack/kube/components/dev/grafana.yaml @@ -32,7 +32,9 @@ metadata: data: grafana.ini: | [analytics] + reporting_enabled = false check_for_updates = true + check_for_plugin_updates = true [grafana_net] url = https://grafana.net [log] diff --git a/hack/kube/overlays/dev-a3m/enduro-a3m.yaml b/hack/kube/overlays/dev-a3m/enduro-a3m.yaml index 2ad348a32..387f65e1e 100644 --- a/hack/kube/overlays/dev-a3m/enduro-a3m.yaml +++ b/hack/kube/overlays/dev-a3m/enduro-a3m.yaml @@ -67,6 +67,12 @@ spec: value: $(MINIO_USER) - name: ENDURO_UPLOAD_SECRET value: $(MINIO_PASSWORD) + - name: ENDURO_TELEMETRY_TRACES_ENABLED + value: "true" + - name: ENDURO_TELEMETRY_TRACES_ADDRESS + value: "grafana-agent.enduro-sdps:4317" + - name: ENDURO_TELEMETRY_TRACES_SAMPLING_RATIO + value: "1.0" volumeMounts: - name: enduro-a3m mountPath: /home/a3m/.local/share/a3m/share diff --git a/hack/kube/overlays/dev-am/enduro-am.yaml b/hack/kube/overlays/dev-am/enduro-am.yaml index fb5e7dafa..1b03b9be6 100644 --- a/hack/kube/overlays/dev-am/enduro-am.yaml +++ b/hack/kube/overlays/dev-am/enduro-am.yaml @@ -105,6 +105,12 @@ spec: secretKeyRef: name: enduro-am-secret key: sftp_private_key_passphrase + - name: ENDURO_TELEMETRY_TRACES_ENABLED + value: "true" + - name: ENDURO_TELEMETRY_TRACES_ADDRESS + value: "grafana-agent.enduro-sdps:4317" + - name: ENDURO_TELEMETRY_TRACES_SAMPLING_RATIO + value: "1.0" volumeMounts: - name: ssh-volume mountPath: "/etc/ssh" diff --git a/hack/make/dep_goa.mk b/hack/make/dep_goa.mk index 55acd3776..6e6cf331a 100644 --- a/hack/make/dep_goa.mk +++ b/hack/make/dep_goa.mk @@ -6,7 +6,7 @@ $(call _assert_var,CACHE_VERSIONS) $(call _assert_var,CACHE_BIN) # Keep in sync with the goa version in go.mod. -GOA_VERSION ?= 3.14.1 +GOA_VERSION ?= 3.15.1 GOA := $(CACHE_VERSIONS)/goa/$(GOA_VERSION) $(GOA): diff --git a/internal/api/api.go b/internal/api/api.go index b017b83ca..1f1a90ef6 100644 --- a/internal/api/api.go +++ b/internal/api/api.go @@ -83,11 +83,10 @@ func HTTPServer( // Global middlewares. var handler http.Handler = mux handler = recoverMiddleware(logger)(handler) - handler = otelhttp.NewHandler(handler, "enduro/internal/api", otelhttp.WithTracerProvider(tp)) - handler = goahttpmwr.RequestID()(handler) + handler = otelhttp.NewHandler(handler, "api", otelhttp.WithTracerProvider(tp)) handler = versionHeaderMiddleware(version.Short)(handler) if config.Debug { - handler = goahttpmwr.Log(loggerAdapter(logger))(handler) + handler = goahttpmwr.Log(loggerAdapter(logger))(handler) //nolint SA1019: deprecated - use OpenTelemetry. handler = goahttpmwr.Debug(mux, os.Stdout)(handler) } diff --git a/internal/api/design/design.go b/internal/api/design/design.go index 81881fe3f..e8ee566c3 100644 --- a/internal/api/design/design.go +++ b/internal/api/design/design.go @@ -12,6 +12,7 @@ import ( . "goa.design/goa/v3/dsl" "goa.design/goa/v3/expr" cors "goa.design/plugins/v3/cors/dsl" + _ "goa.design/plugins/v3/otel" ) var OAuth2Auth = OAuth2Security("oauth2", func() { diff --git a/internal/api/gen/http/cli/enduro/cli.go b/internal/api/gen/http/cli/enduro/cli.go index 3b9053dd0..9be945402 100644 --- a/internal/api/gen/http/cli/enduro/cli.go +++ b/internal/api/gen/http/cli/enduro/cli.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // enduro HTTP client CLI support package // diff --git a/internal/api/gen/http/openapi.json b/internal/api/gen/http/openapi.json index dfa3d838b..f5419bf04 100644 --- a/internal/api/gen/http/openapi.json +++ b/internal/api/gen/http/openapi.json @@ -2613,7 +2613,7 @@ "host": "localhost:9000", "info": { "title": "Enduro API", - "version": "" + "version": "0.0.1" }, "paths": { "/package": { diff --git a/internal/api/gen/http/openapi.yaml b/internal/api/gen/http/openapi.yaml index ee153d507..a5d5eee4c 100644 --- a/internal/api/gen/http/openapi.yaml +++ b/internal/api/gen/http/openapi.yaml @@ -1,7 +1,7 @@ swagger: "2.0" info: title: Enduro API - version: "" + version: 0.0.1 host: localhost:9000 consumes: - application/json diff --git a/internal/api/gen/http/openapi3.json b/internal/api/gen/http/openapi3.json index 4d4c7c7fd..7f9d43c06 100644 --- a/internal/api/gen/http/openapi3.json +++ b/internal/api/gen/http/openapi3.json @@ -136,10 +136,12 @@ }, "id": { "example": 1, + "format": "int64", "type": "integer" }, "package_id": { "example": 1, + "format": "int64", "type": "integer" }, "started_at": { @@ -267,6 +269,7 @@ }, "id": { "example": 1, + "format": "int64", "type": "integer" }, "name": { @@ -279,6 +282,7 @@ }, "preservation_action_id": { "example": 1, + "format": "int64", "type": "integer" }, "started_at": { @@ -366,6 +370,7 @@ "id": { "description": "Identifier of package", "example": 1, + "format": "int64", "type": "integer" }, "location_id": { @@ -866,6 +871,7 @@ "id": { "description": "Identifier of package", "example": 1, + "format": "int64", "type": "integer" }, "item": { @@ -887,6 +893,7 @@ "id": { "description": "Identifier of package", "example": 1, + "format": "int64", "type": "integer" }, "location_id": { @@ -911,6 +918,7 @@ "id": { "description": "Identifier of missing package", "example": 1, + "format": "int64", "type": "integer" }, "message": { @@ -1032,6 +1040,7 @@ "id": { "description": "Identifier of package", "example": 1, + "format": "int64", "type": "integer" }, "status": { @@ -1075,6 +1084,7 @@ "id": { "description": "Identifier of package", "example": 1, + "format": "int64", "type": "integer" }, "item": { @@ -1116,6 +1126,7 @@ "id": { "description": "Identifier of preservation action", "example": 1, + "format": "int64", "type": "integer" }, "item": { @@ -1157,6 +1168,7 @@ "id": { "description": "Identifier of preservation action", "example": 1, + "format": "int64", "type": "integer" }, "item": { @@ -1187,6 +1199,7 @@ "id": { "description": "Identifier of preservation task", "example": 1, + "format": "int64", "type": "integer" }, "item": { @@ -1217,6 +1230,7 @@ "id": { "description": "Identifier of preservation task", "example": 1, + "format": "int64", "type": "integer" }, "item": { @@ -1276,7 +1290,7 @@ }, "info": { "title": "Enduro API", - "version": "1.0" + "version": "0.0.1" }, "openapi": "3.0.3", "paths": { @@ -1419,7 +1433,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "list package", @@ -1529,7 +1543,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "monitor_request package", @@ -1552,6 +1566,7 @@ "schema": { "description": "Identifier of package to show", "example": 1, + "format": "int64", "type": "integer" } } @@ -1618,7 +1633,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "show package", @@ -1641,6 +1656,7 @@ "schema": { "description": "Identifier of package to look up", "example": 1, + "format": "int64", "type": "integer" } } @@ -1711,7 +1727,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "confirm package", @@ -1734,6 +1750,7 @@ "schema": { "description": "Identifier of package to move", "example": 1, + "format": "int64", "type": "integer" } } @@ -1791,7 +1808,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "move_status package", @@ -1812,6 +1829,7 @@ "schema": { "description": "Identifier of package to move", "example": 1, + "format": "int64", "type": "integer" } } @@ -1882,7 +1900,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "move package", @@ -1905,6 +1923,7 @@ "schema": { "description": "Identifier of package to look up", "example": 1, + "format": "int64", "type": "integer" } } @@ -1974,7 +1993,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "preservation_actions package", @@ -1997,6 +2016,7 @@ "schema": { "description": "Identifier of package to look up", "example": 1, + "format": "int64", "type": "integer" } } @@ -2054,7 +2074,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "reject package", @@ -2103,7 +2123,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "locations storage", @@ -2173,7 +2193,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "add_location storage", @@ -2253,7 +2273,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "show_location storage", @@ -2341,7 +2361,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "location_packages storage", @@ -2417,7 +2437,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "show storage", @@ -2488,7 +2508,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "download storage", @@ -2569,7 +2589,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "reject storage", @@ -2650,7 +2670,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "move_status storage", @@ -2742,7 +2762,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "move storage", @@ -2832,7 +2852,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "submit storage", @@ -2899,7 +2919,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "update storage", @@ -2919,7 +2939,7 @@ }, "security": [ { - "oauth2__": null + "oauth2__": [] } ], "summary": "Download gen/http/openapi.json", @@ -2986,7 +3006,7 @@ }, "security": [ { - "oauth2_header_Authorization": null + "oauth2_header_Authorization": [] } ], "summary": "upload upload", @@ -2998,7 +3018,7 @@ }, "security": [ { - "oauth2__": null + "oauth2__": [] } ], "servers": [ diff --git a/internal/api/gen/http/openapi3.yaml b/internal/api/gen/http/openapi3.yaml index 1baf18203..a15f6c176 100644 --- a/internal/api/gen/http/openapi3.yaml +++ b/internal/api/gen/http/openapi3.yaml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: title: Enduro API - version: "1.0" + version: 0.0.1 servers: - url: http://localhost:9000 paths: @@ -127,6 +127,7 @@ paths: type: integer description: Identifier of package to show example: 1 + format: int64 example: 1 responses: "200": @@ -187,6 +188,7 @@ paths: type: integer description: Identifier of package to look up example: 1 + format: int64 example: 1 requestBody: required: true @@ -246,6 +248,7 @@ paths: type: integer description: Identifier of package to move example: 1 + format: int64 example: 1 responses: "200": @@ -296,6 +299,7 @@ paths: type: integer description: Identifier of package to move example: 1 + format: int64 example: 1 requestBody: required: true @@ -355,6 +359,7 @@ paths: type: integer description: Identifier of package to look up example: 1 + format: int64 example: 1 responses: "200": @@ -416,6 +421,7 @@ paths: type: integer description: Identifier of package to look up example: 1 + format: int64 example: 1 responses: "202": @@ -1228,9 +1234,11 @@ components: id: type: integer example: 1 + format: int64 package_id: type: integer example: 1 + format: int64 started_at: type: string example: "1970-01-01T00:00:01Z" @@ -1335,6 +1343,7 @@ components: id: type: integer example: 1 + format: int64 name: type: string example: abc123 @@ -1344,6 +1353,7 @@ components: preservation_action_id: type: integer example: 1 + format: int64 started_at: type: string example: "1970-01-01T00:00:01Z" @@ -1412,6 +1422,7 @@ components: type: integer description: Identifier of package example: 1 + format: int64 location_id: type: string description: Identifier of storage location @@ -1814,6 +1825,7 @@ components: type: integer description: Identifier of package example: 1 + format: int64 item: $ref: '#/components/schemas/EnduroStoredPackage' example: @@ -1839,6 +1851,7 @@ components: type: integer description: Identifier of package example: 1 + format: int64 location_id: type: string description: Identifier of storage location @@ -1856,6 +1869,7 @@ components: type: integer description: Identifier of missing package example: 1 + format: int64 message: type: string description: Message of error @@ -1950,6 +1964,7 @@ components: type: integer description: Identifier of package example: 1 + format: int64 status: type: string example: in progress @@ -1975,6 +1990,7 @@ components: type: integer description: Identifier of package example: 1 + format: int64 item: $ref: '#/components/schemas/EnduroStoredPackage' example: @@ -2000,6 +2016,7 @@ components: type: integer description: Identifier of preservation action example: 1 + format: int64 item: $ref: '#/components/schemas/EnduroPackagePreservationAction' example: @@ -2031,6 +2048,7 @@ components: type: integer description: Identifier of preservation action example: 1 + format: int64 item: $ref: '#/components/schemas/EnduroPackagePreservationAction' example: @@ -2062,6 +2080,7 @@ components: type: integer description: Identifier of preservation task example: 1 + format: int64 item: $ref: '#/components/schemas/EnduroPackagePreservationTask' example: @@ -2085,6 +2104,7 @@ components: type: integer description: Identifier of preservation task example: 1 + format: int64 item: $ref: '#/components/schemas/EnduroPackagePreservationTask' example: diff --git a/internal/api/gen/http/package_/client/cli.go b/internal/api/gen/http/package_/client/cli.go index 5300ec13b..b9289effd 100644 --- a/internal/api/gen/http/package_/client/cli.go +++ b/internal/api/gen/http/package_/client/cli.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // package HTTP client CLI support package // diff --git a/internal/api/gen/http/package_/client/client.go b/internal/api/gen/http/package_/client/client.go index e9849f134..5f7b574cd 100644 --- a/internal/api/gen/http/package_/client/client.go +++ b/internal/api/gen/http/package_/client/client.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // package client HTTP transport // diff --git a/internal/api/gen/http/package_/client/encode_decode.go b/internal/api/gen/http/package_/client/encode_decode.go index 3bd07f65b..f1113cc73 100644 --- a/internal/api/gen/http/package_/client/encode_decode.go +++ b/internal/api/gen/http/package_/client/encode_decode.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // package HTTP client encoders and decoders // diff --git a/internal/api/gen/http/package_/client/paths.go b/internal/api/gen/http/package_/client/paths.go index fd59c9a1c..522fded2f 100644 --- a/internal/api/gen/http/package_/client/paths.go +++ b/internal/api/gen/http/package_/client/paths.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // HTTP request path constructors for the package service. // diff --git a/internal/api/gen/http/package_/client/types.go b/internal/api/gen/http/package_/client/types.go index 11ecf7071..488960703 100644 --- a/internal/api/gen/http/package_/client/types.go +++ b/internal/api/gen/http/package_/client/types.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // package HTTP client types // diff --git a/internal/api/gen/http/package_/client/websocket.go b/internal/api/gen/http/package_/client/websocket.go index cd9ea09b7..034c427c6 100644 --- a/internal/api/gen/http/package_/client/websocket.go +++ b/internal/api/gen/http/package_/client/websocket.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // package WebSocket client streaming // diff --git a/internal/api/gen/http/package_/server/encode_decode.go b/internal/api/gen/http/package_/server/encode_decode.go index c5b953862..71d65621b 100644 --- a/internal/api/gen/http/package_/server/encode_decode.go +++ b/internal/api/gen/http/package_/server/encode_decode.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // package HTTP server encoders and decoders // diff --git a/internal/api/gen/http/package_/server/paths.go b/internal/api/gen/http/package_/server/paths.go index 62936d127..c0bbad4b2 100644 --- a/internal/api/gen/http/package_/server/paths.go +++ b/internal/api/gen/http/package_/server/paths.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // HTTP request path constructors for the package service. // diff --git a/internal/api/gen/http/package_/server/server.go b/internal/api/gen/http/package_/server/server.go index e5ed47b9a..315025770 100644 --- a/internal/api/gen/http/package_/server/server.go +++ b/internal/api/gen/http/package_/server/server.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // package HTTP server // @@ -14,6 +14,7 @@ import ( "os" package_ "github.com/artefactual-sdps/enduro/internal/api/gen/package_" + otelhttp "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" goahttp "goa.design/goa/v3/http" goa "goa.design/goa/v3/pkg" "goa.design/plugins/v3/cors" @@ -144,7 +145,7 @@ func MountMonitorRequestHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("POST", "/package/monitor", f) + mux.Handle("POST", "/package/monitor", otelhttp.WithRouteTag("/package/monitor", f).ServeHTTP) } // NewMonitorRequestHandler creates a HTTP handler which loads the HTTP request @@ -195,7 +196,7 @@ func MountMonitorHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("GET", "/package/monitor", f) + mux.Handle("GET", "/package/monitor", otelhttp.WithRouteTag("/package/monitor", f).ServeHTTP) } // NewMonitorHandler creates a HTTP handler which loads the HTTP request and @@ -261,7 +262,7 @@ func MountListHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("GET", "/package", f) + mux.Handle("GET", "/package", otelhttp.WithRouteTag("/package", f).ServeHTTP) } // NewListHandler creates a HTTP handler which loads the HTTP request and calls @@ -312,7 +313,7 @@ func MountShowHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("GET", "/package/{id}", f) + mux.Handle("GET", "/package/{id}", otelhttp.WithRouteTag("/package/{id}", f).ServeHTTP) } // NewShowHandler creates a HTTP handler which loads the HTTP request and calls @@ -363,7 +364,7 @@ func MountPreservationActionsHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("GET", "/package/{id}/preservation-actions", f) + mux.Handle("GET", "/package/{id}/preservation-actions", otelhttp.WithRouteTag("/package/{id}/preservation-actions", f).ServeHTTP) } // NewPreservationActionsHandler creates a HTTP handler which loads the HTTP @@ -414,7 +415,7 @@ func MountConfirmHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("POST", "/package/{id}/confirm", f) + mux.Handle("POST", "/package/{id}/confirm", otelhttp.WithRouteTag("/package/{id}/confirm", f).ServeHTTP) } // NewConfirmHandler creates a HTTP handler which loads the HTTP request and @@ -465,7 +466,7 @@ func MountRejectHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("POST", "/package/{id}/reject", f) + mux.Handle("POST", "/package/{id}/reject", otelhttp.WithRouteTag("/package/{id}/reject", f).ServeHTTP) } // NewRejectHandler creates a HTTP handler which loads the HTTP request and @@ -516,7 +517,7 @@ func MountMoveHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("POST", "/package/{id}/move", f) + mux.Handle("POST", "/package/{id}/move", otelhttp.WithRouteTag("/package/{id}/move", f).ServeHTTP) } // NewMoveHandler creates a HTTP handler which loads the HTTP request and calls @@ -567,7 +568,7 @@ func MountMoveStatusHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("GET", "/package/{id}/move", f) + mux.Handle("GET", "/package/{id}/move", otelhttp.WithRouteTag("/package/{id}/move", f).ServeHTTP) } // NewMoveStatusHandler creates a HTTP handler which loads the HTTP request and diff --git a/internal/api/gen/http/package_/server/types.go b/internal/api/gen/http/package_/server/types.go index 6c8ee69b5..09899fdc7 100644 --- a/internal/api/gen/http/package_/server/types.go +++ b/internal/api/gen/http/package_/server/types.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // package HTTP server types // diff --git a/internal/api/gen/http/package_/server/websocket.go b/internal/api/gen/http/package_/server/websocket.go index 3d922d27e..52f2b965e 100644 --- a/internal/api/gen/http/package_/server/websocket.go +++ b/internal/api/gen/http/package_/server/websocket.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // package WebSocket server streaming // diff --git a/internal/api/gen/http/storage/client/cli.go b/internal/api/gen/http/storage/client/cli.go index a946514d6..17a7ff817 100644 --- a/internal/api/gen/http/storage/client/cli.go +++ b/internal/api/gen/http/storage/client/cli.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // storage HTTP client CLI support package // diff --git a/internal/api/gen/http/storage/client/client.go b/internal/api/gen/http/storage/client/client.go index 94ea62e2c..d415222e6 100644 --- a/internal/api/gen/http/storage/client/client.go +++ b/internal/api/gen/http/storage/client/client.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // storage client HTTP transport // diff --git a/internal/api/gen/http/storage/client/encode_decode.go b/internal/api/gen/http/storage/client/encode_decode.go index 826f39d03..543960188 100644 --- a/internal/api/gen/http/storage/client/encode_decode.go +++ b/internal/api/gen/http/storage/client/encode_decode.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // storage HTTP client encoders and decoders // diff --git a/internal/api/gen/http/storage/client/paths.go b/internal/api/gen/http/storage/client/paths.go index 3d25967e9..3b681a7ec 100644 --- a/internal/api/gen/http/storage/client/paths.go +++ b/internal/api/gen/http/storage/client/paths.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // HTTP request path constructors for the storage service. // diff --git a/internal/api/gen/http/storage/client/types.go b/internal/api/gen/http/storage/client/types.go index 5763b6bfa..8558d9312 100644 --- a/internal/api/gen/http/storage/client/types.go +++ b/internal/api/gen/http/storage/client/types.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // storage HTTP client types // diff --git a/internal/api/gen/http/storage/server/encode_decode.go b/internal/api/gen/http/storage/server/encode_decode.go index a46c48a33..13ef07e83 100644 --- a/internal/api/gen/http/storage/server/encode_decode.go +++ b/internal/api/gen/http/storage/server/encode_decode.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // storage HTTP server encoders and decoders // diff --git a/internal/api/gen/http/storage/server/paths.go b/internal/api/gen/http/storage/server/paths.go index 5d258bca1..986db9c14 100644 --- a/internal/api/gen/http/storage/server/paths.go +++ b/internal/api/gen/http/storage/server/paths.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // HTTP request path constructors for the storage service. // diff --git a/internal/api/gen/http/storage/server/server.go b/internal/api/gen/http/storage/server/server.go index 90d851c20..978f6598f 100644 --- a/internal/api/gen/http/storage/server/server.go +++ b/internal/api/gen/http/storage/server/server.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // storage HTTP server // @@ -14,6 +14,7 @@ import ( "os" storage "github.com/artefactual-sdps/enduro/internal/api/gen/storage" + otelhttp "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" goahttp "goa.design/goa/v3/http" goa "goa.design/goa/v3/pkg" "goa.design/plugins/v3/cors" @@ -151,7 +152,7 @@ func MountSubmitHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("POST", "/storage/package/{aip_id}/submit", f) + mux.Handle("POST", "/storage/package/{aip_id}/submit", otelhttp.WithRouteTag("/storage/package/{aip_id}/submit", f).ServeHTTP) } // NewSubmitHandler creates a HTTP handler which loads the HTTP request and @@ -202,7 +203,7 @@ func MountUpdateHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("POST", "/storage/package/{aip_id}/update", f) + mux.Handle("POST", "/storage/package/{aip_id}/update", otelhttp.WithRouteTag("/storage/package/{aip_id}/update", f).ServeHTTP) } // NewUpdateHandler creates a HTTP handler which loads the HTTP request and @@ -253,7 +254,7 @@ func MountDownloadHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("GET", "/storage/package/{aip_id}/download", f) + mux.Handle("GET", "/storage/package/{aip_id}/download", otelhttp.WithRouteTag("/storage/package/{aip_id}/download", f).ServeHTTP) } // NewDownloadHandler creates a HTTP handler which loads the HTTP request and @@ -304,7 +305,7 @@ func MountLocationsHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("GET", "/storage/location", f) + mux.Handle("GET", "/storage/location", otelhttp.WithRouteTag("/storage/location", f).ServeHTTP) } // NewLocationsHandler creates a HTTP handler which loads the HTTP request and @@ -355,7 +356,7 @@ func MountAddLocationHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("POST", "/storage/location", f) + mux.Handle("POST", "/storage/location", otelhttp.WithRouteTag("/storage/location", f).ServeHTTP) } // NewAddLocationHandler creates a HTTP handler which loads the HTTP request @@ -406,7 +407,7 @@ func MountMoveHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("POST", "/storage/package/{aip_id}/store", f) + mux.Handle("POST", "/storage/package/{aip_id}/store", otelhttp.WithRouteTag("/storage/package/{aip_id}/store", f).ServeHTTP) } // NewMoveHandler creates a HTTP handler which loads the HTTP request and calls @@ -457,7 +458,7 @@ func MountMoveStatusHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("GET", "/storage/package/{aip_id}/store", f) + mux.Handle("GET", "/storage/package/{aip_id}/store", otelhttp.WithRouteTag("/storage/package/{aip_id}/store", f).ServeHTTP) } // NewMoveStatusHandler creates a HTTP handler which loads the HTTP request and @@ -508,7 +509,7 @@ func MountRejectHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("POST", "/storage/package/{aip_id}/reject", f) + mux.Handle("POST", "/storage/package/{aip_id}/reject", otelhttp.WithRouteTag("/storage/package/{aip_id}/reject", f).ServeHTTP) } // NewRejectHandler creates a HTTP handler which loads the HTTP request and @@ -559,7 +560,7 @@ func MountShowHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("GET", "/storage/package/{aip_id}", f) + mux.Handle("GET", "/storage/package/{aip_id}", otelhttp.WithRouteTag("/storage/package/{aip_id}", f).ServeHTTP) } // NewShowHandler creates a HTTP handler which loads the HTTP request and calls @@ -610,7 +611,7 @@ func MountShowLocationHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("GET", "/storage/location/{uuid}", f) + mux.Handle("GET", "/storage/location/{uuid}", otelhttp.WithRouteTag("/storage/location/{uuid}", f).ServeHTTP) } // NewShowLocationHandler creates a HTTP handler which loads the HTTP request @@ -661,7 +662,7 @@ func MountLocationPackagesHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("GET", "/storage/location/{uuid}/packages", f) + mux.Handle("GET", "/storage/location/{uuid}/packages", otelhttp.WithRouteTag("/storage/location/{uuid}/packages", f).ServeHTTP) } // NewLocationPackagesHandler creates a HTTP handler which loads the HTTP diff --git a/internal/api/gen/http/storage/server/types.go b/internal/api/gen/http/storage/server/types.go index 3e292a2ef..c8d5116bf 100644 --- a/internal/api/gen/http/storage/server/types.go +++ b/internal/api/gen/http/storage/server/types.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // storage HTTP server types // diff --git a/internal/api/gen/http/swagger/client/client.go b/internal/api/gen/http/swagger/client/client.go index 9a4be4012..11a82797a 100644 --- a/internal/api/gen/http/swagger/client/client.go +++ b/internal/api/gen/http/swagger/client/client.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // swagger client HTTP transport // diff --git a/internal/api/gen/http/swagger/client/encode_decode.go b/internal/api/gen/http/swagger/client/encode_decode.go index e8857a882..78882510b 100644 --- a/internal/api/gen/http/swagger/client/encode_decode.go +++ b/internal/api/gen/http/swagger/client/encode_decode.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // swagger HTTP client encoders and decoders // diff --git a/internal/api/gen/http/swagger/client/paths.go b/internal/api/gen/http/swagger/client/paths.go index 1e4893faa..14381429c 100644 --- a/internal/api/gen/http/swagger/client/paths.go +++ b/internal/api/gen/http/swagger/client/paths.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // HTTP request path constructors for the swagger service. // diff --git a/internal/api/gen/http/swagger/client/types.go b/internal/api/gen/http/swagger/client/types.go index 52dd567cb..e6458b540 100644 --- a/internal/api/gen/http/swagger/client/types.go +++ b/internal/api/gen/http/swagger/client/types.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // swagger HTTP client types // diff --git a/internal/api/gen/http/swagger/server/paths.go b/internal/api/gen/http/swagger/server/paths.go index e56e41ec3..9c6c308d7 100644 --- a/internal/api/gen/http/swagger/server/paths.go +++ b/internal/api/gen/http/swagger/server/paths.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // HTTP request path constructors for the swagger service. // diff --git a/internal/api/gen/http/swagger/server/server.go b/internal/api/gen/http/swagger/server/server.go index d5ed71141..806b1b9eb 100644 --- a/internal/api/gen/http/swagger/server/server.go +++ b/internal/api/gen/http/swagger/server/server.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // swagger HTTP server // diff --git a/internal/api/gen/http/swagger/server/types.go b/internal/api/gen/http/swagger/server/types.go index 03f73ce05..475c886e9 100644 --- a/internal/api/gen/http/swagger/server/types.go +++ b/internal/api/gen/http/swagger/server/types.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // swagger HTTP server types // diff --git a/internal/api/gen/http/upload/client/cli.go b/internal/api/gen/http/upload/client/cli.go index 9abcd28b9..9052e2632 100644 --- a/internal/api/gen/http/upload/client/cli.go +++ b/internal/api/gen/http/upload/client/cli.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // upload HTTP client CLI support package // diff --git a/internal/api/gen/http/upload/client/client.go b/internal/api/gen/http/upload/client/client.go index 8d4af2f56..89913b2db 100644 --- a/internal/api/gen/http/upload/client/client.go +++ b/internal/api/gen/http/upload/client/client.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // upload client HTTP transport // diff --git a/internal/api/gen/http/upload/client/encode_decode.go b/internal/api/gen/http/upload/client/encode_decode.go index 3d844ac52..cc43725b2 100644 --- a/internal/api/gen/http/upload/client/encode_decode.go +++ b/internal/api/gen/http/upload/client/encode_decode.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // upload HTTP client encoders and decoders // diff --git a/internal/api/gen/http/upload/client/paths.go b/internal/api/gen/http/upload/client/paths.go index c5798f0ac..77627bf60 100644 --- a/internal/api/gen/http/upload/client/paths.go +++ b/internal/api/gen/http/upload/client/paths.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // HTTP request path constructors for the upload service. // diff --git a/internal/api/gen/http/upload/client/types.go b/internal/api/gen/http/upload/client/types.go index 3905e74be..910c0ffee 100644 --- a/internal/api/gen/http/upload/client/types.go +++ b/internal/api/gen/http/upload/client/types.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // upload HTTP client types // diff --git a/internal/api/gen/http/upload/server/encode_decode.go b/internal/api/gen/http/upload/server/encode_decode.go index 1258cc171..725c0a564 100644 --- a/internal/api/gen/http/upload/server/encode_decode.go +++ b/internal/api/gen/http/upload/server/encode_decode.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // upload HTTP server encoders and decoders // diff --git a/internal/api/gen/http/upload/server/paths.go b/internal/api/gen/http/upload/server/paths.go index 925e1de5e..dc642fe8e 100644 --- a/internal/api/gen/http/upload/server/paths.go +++ b/internal/api/gen/http/upload/server/paths.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // HTTP request path constructors for the upload service. // diff --git a/internal/api/gen/http/upload/server/server.go b/internal/api/gen/http/upload/server/server.go index 1b997967b..aaff7008a 100644 --- a/internal/api/gen/http/upload/server/server.go +++ b/internal/api/gen/http/upload/server/server.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // upload HTTP server // @@ -14,6 +14,7 @@ import ( "os" upload "github.com/artefactual-sdps/enduro/internal/api/gen/upload" + otelhttp "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" goahttp "goa.design/goa/v3/http" goa "goa.design/goa/v3/pkg" "goa.design/plugins/v3/cors" @@ -93,7 +94,7 @@ func MountUploadHandler(mux goahttp.Muxer, h http.Handler) { h.ServeHTTP(w, r) } } - mux.Handle("POST", "/upload/upload", f) + mux.Handle("POST", "/upload/upload", otelhttp.WithRouteTag("/upload/upload", f).ServeHTTP) } // NewUploadHandler creates a HTTP handler which loads the HTTP request and diff --git a/internal/api/gen/http/upload/server/types.go b/internal/api/gen/http/upload/server/types.go index 15e7e479a..06622c9e6 100644 --- a/internal/api/gen/http/upload/server/types.go +++ b/internal/api/gen/http/upload/server/types.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // upload HTTP server types // diff --git a/internal/api/gen/package_/client.go b/internal/api/gen/package_/client.go index c36f78841..eda2006ab 100644 --- a/internal/api/gen/package_/client.go +++ b/internal/api/gen/package_/client.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // package client // diff --git a/internal/api/gen/package_/endpoints.go b/internal/api/gen/package_/endpoints.go index 746866c01..c92ad9317 100644 --- a/internal/api/gen/package_/endpoints.go +++ b/internal/api/gen/package_/endpoints.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // package endpoints // diff --git a/internal/api/gen/package_/service.go b/internal/api/gen/package_/service.go index bd13718bb..ec8982dac 100644 --- a/internal/api/gen/package_/service.go +++ b/internal/api/gen/package_/service.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // package service // @@ -45,6 +45,12 @@ type Auther interface { OAuth2Auth(ctx context.Context, token string, schema *security.OAuth2Scheme) (context.Context, error) } +// APIName is the name of the API as defined in the design. +const APIName = "enduro" + +// APIVersion is the version of the API as defined in the design. +const APIVersion = "0.0.1" + // ServiceName is the name of the service as defined in the design. This is the // same value that is set in the endpoint request contexts under the ServiceKey // key. diff --git a/internal/api/gen/package_/views/view.go b/internal/api/gen/package_/views/view.go index f59cfff37..749b579ac 100644 --- a/internal/api/gen/package_/views/view.go +++ b/internal/api/gen/package_/views/view.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // package views // diff --git a/internal/api/gen/storage/client.go b/internal/api/gen/storage/client.go index c1476ea72..4c7a035b4 100644 --- a/internal/api/gen/storage/client.go +++ b/internal/api/gen/storage/client.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // storage client // diff --git a/internal/api/gen/storage/convert.go b/internal/api/gen/storage/convert.go index eecd28990..0c924978f 100644 --- a/internal/api/gen/storage/convert.go +++ b/internal/api/gen/storage/convert.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // storage service type conversion functions // diff --git a/internal/api/gen/storage/endpoints.go b/internal/api/gen/storage/endpoints.go index 4e9ea78d1..55dd6ed34 100644 --- a/internal/api/gen/storage/endpoints.go +++ b/internal/api/gen/storage/endpoints.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // storage endpoints // diff --git a/internal/api/gen/storage/service.go b/internal/api/gen/storage/service.go index 6dfe1da7a..fac412490 100644 --- a/internal/api/gen/storage/service.go +++ b/internal/api/gen/storage/service.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // storage service // @@ -49,6 +49,12 @@ type Auther interface { OAuth2Auth(ctx context.Context, token string, schema *security.OAuth2Scheme) (context.Context, error) } +// APIName is the name of the API as defined in the design. +const APIName = "enduro" + +// APIVersion is the version of the API as defined in the design. +const APIVersion = "0.0.1" + // ServiceName is the name of the service as defined in the design. This is the // same value that is set in the endpoint request contexts under the ServiceKey // key. diff --git a/internal/api/gen/storage/views/view.go b/internal/api/gen/storage/views/view.go index 801ef3e3c..8a155e296 100644 --- a/internal/api/gen/storage/views/view.go +++ b/internal/api/gen/storage/views/view.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // storage views // diff --git a/internal/api/gen/swagger/client.go b/internal/api/gen/swagger/client.go index 9fdd96fc5..a9a6173ab 100644 --- a/internal/api/gen/swagger/client.go +++ b/internal/api/gen/swagger/client.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // swagger client // diff --git a/internal/api/gen/swagger/endpoints.go b/internal/api/gen/swagger/endpoints.go index 94a9d6605..5aaa1616f 100644 --- a/internal/api/gen/swagger/endpoints.go +++ b/internal/api/gen/swagger/endpoints.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // swagger endpoints // diff --git a/internal/api/gen/swagger/service.go b/internal/api/gen/swagger/service.go index 0af1c3600..288bd858f 100644 --- a/internal/api/gen/swagger/service.go +++ b/internal/api/gen/swagger/service.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // swagger service // @@ -16,6 +16,12 @@ import ( type Service interface { } +// APIName is the name of the API as defined in the design. +const APIName = "enduro" + +// APIVersion is the version of the API as defined in the design. +const APIVersion = "0.0.1" + // ServiceName is the name of the service as defined in the design. This is the // same value that is set in the endpoint request contexts under the ServiceKey // key. diff --git a/internal/api/gen/upload/client.go b/internal/api/gen/upload/client.go index db0371ffb..cd7e80902 100644 --- a/internal/api/gen/upload/client.go +++ b/internal/api/gen/upload/client.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // upload client // diff --git a/internal/api/gen/upload/endpoints.go b/internal/api/gen/upload/endpoints.go index 65555cc23..5cf662185 100644 --- a/internal/api/gen/upload/endpoints.go +++ b/internal/api/gen/upload/endpoints.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // upload endpoints // diff --git a/internal/api/gen/upload/service.go b/internal/api/gen/upload/service.go index 2adda6c26..06abc9686 100644 --- a/internal/api/gen/upload/service.go +++ b/internal/api/gen/upload/service.go @@ -1,4 +1,4 @@ -// Code generated by goa v3.14.1, DO NOT EDIT. +// Code generated by goa v3.15.1, DO NOT EDIT. // // upload service // @@ -29,6 +29,12 @@ type Auther interface { OAuth2Auth(ctx context.Context, token string, schema *security.OAuth2Scheme) (context.Context, error) } +// APIName is the name of the API as defined in the design. +const APIName = "enduro" + +// APIVersion is the version of the API as defined in the design. +const APIVersion = "0.0.1" + // ServiceName is the name of the service as defined in the design. This is the // same value that is set in the endpoint request contexts under the ServiceKey // key. diff --git a/internal/db/db.go b/internal/db/db.go index 8c1bff626..98e7ff535 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -1,18 +1,23 @@ package db import ( + "context" "database/sql" "fmt" "os" "runtime" "time" + "github.com/XSAM/otelsql" mysqldriver "github.com/go-sql-driver/mysql" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database/mysql" "github.com/golang-migrate/migrate/v4/source" _ "github.com/mattn/go-sqlite3" "github.com/prometheus/client_golang/prometheus" + "go.opentelemetry.io/otel/codes" + semconv "go.opentelemetry.io/otel/semconv/v1.18.0" + "go.opentelemetry.io/otel/trace" "github.com/artefactual-sdps/enduro/internal/storage/persistence" ) @@ -21,22 +26,30 @@ import ( const lockTimeout = time.Minute * 5 // Connect returns a database handler. -func Connect(driver, dsn string) (db *sql.DB, err error) { +func Connect(ctx context.Context, tp trace.TracerProvider, driver, dsn string) (db *sql.DB, err error) { switch driver { case "mysql": - db, err = ConnectMySQL(dsn) + db, err = ConnectMySQL(tp, dsn) case "sqlite3": - db, err = ConnectSQLite(dsn) + db, err = ConnectSQLite(tp, dsn) default: return nil, fmt.Errorf("unsupported database driver: %q", driver) } + // Verify connection. + ctx, span := tp.Tracer("db.verify").Start(ctx, "sql.ping") + if err := db.PingContext(ctx); err != nil { + span.SetStatus(codes.Error, "ping failed") + span.RecordError(err) + } + span.End() + return db, err } // ConnectMySQL returns a MySQL database handler which is safe for concurrent // access. -func ConnectMySQL(dsn string) (db *sql.DB, err error) { +func ConnectMySQL(tp trace.TracerProvider, dsn string) (db *sql.DB, err error) { config, err := mysqldriver.ParseDSN(dsn) if err != nil { return nil, fmt.Errorf("error parsing dsn: %w (%s)", err, dsn) @@ -54,7 +67,14 @@ func ConnectMySQL(dsn string) (db *sql.DB, err error) { return nil, fmt.Errorf("error creating connector: %w", err) } - db = sql.OpenDB(conn) + db = otelsql.OpenDB(conn, + otelsql.WithAttributes(semconv.DBSystemMySQL), + otelsql.WithTracerProvider(tp), + otelsql.WithSpanOptions(otelsql.SpanOptions{ + Ping: true, + DisableErrSkip: true, + }), + ) // Set reasonable defaults in the built-in pool. db.SetMaxOpenConns(100) @@ -81,8 +101,14 @@ func ConnectMySQL(dsn string) (db *sql.DB, err error) { // ConnectSQLite returns a SQLlite database handler which is NOT safe for // concurrent access. -func ConnectSQLite(dsn string) (db *sql.DB, err error) { - db, err = sql.Open("sqlite3", dsn) +func ConnectSQLite(tp trace.TracerProvider, dsn string) (db *sql.DB, err error) { + db, err = otelsql.Open("sqlite3", dsn, + otelsql.WithAttributes(semconv.DBSystemSqlite), + otelsql.WithTracerProvider(tp), + otelsql.WithSpanOptions(otelsql.SpanOptions{ + Ping: true, + }), + ) conns := runtime.NumCPU() db.SetMaxOpenConns(conns) @@ -126,11 +152,6 @@ func MigrateEnduroStorageDatabase(db *sql.DB) error { // up migrates the database. func up(db *sql.DB, src source.Driver) error { - _, ok := db.Driver().(*mysqldriver.MySQLDriver) - if !ok { - return fmt.Errorf("only MySQL migrations are supported") - } - m, err := newMigrate(db, src) if err != nil { return fmt.Errorf("error creating golang-migrate object: %v", err) diff --git a/internal/db/db_test.go b/internal/db/db_test.go index c1f6467eb..c8c3cfa3a 100644 --- a/internal/db/db_test.go +++ b/internal/db/db_test.go @@ -1,10 +1,12 @@ package db import ( + "context" "os" "testing" _ "github.com/mattn/go-sqlite3" + "go.opentelemetry.io/otel/trace/noop" "gotest.tools/v3/assert" ) @@ -15,7 +17,7 @@ func TestConnect(t *testing.T) { t.Parallel() dbfile := "/tmp/enduro-test.db" - db, err := Connect("sqlite3", dbfile) + db, err := Connect(context.Background(), noop.NewTracerProvider(), "sqlite3", dbfile) assert.NilError(t, err) defer func() { db.Close() @@ -51,7 +53,7 @@ func TestMigrateEnduroDatabase(t *testing.T) { t.Parallel() dbfile := "/tmp/enduro-migrate-test.db" - db, err := Connect("sqlite3", dbfile) + db, err := Connect(context.Background(), noop.NewTracerProvider(), "sqlite3", dbfile) assert.NilError(t, err) defer func() { db.Close() @@ -59,6 +61,6 @@ func TestMigrateEnduroDatabase(t *testing.T) { }() err = MigrateEnduroDatabase(db) - assert.Error(t, err, "only MySQL migrations are supported") + assert.Error(t, err, "error creating golang-migrate object: error creating migrate driver: no such function: DATABASE in line 0: SELECT DATABASE()") }) } diff --git a/internal/workflow/activities/download.go b/internal/workflow/activities/download.go index ce094b950..fb0a72924 100644 --- a/internal/workflow/activities/download.go +++ b/internal/workflow/activities/download.go @@ -8,6 +8,7 @@ import ( "github.com/go-logr/logr" temporal_tools "go.artefactual.dev/tools/temporal" + "go.opentelemetry.io/otel/trace" "github.com/artefactual-sdps/enduro/internal/watcher" ) @@ -46,9 +47,14 @@ func (a *DownloadActivity) Execute(ctx context.Context, params *DownloadActivity } dest := filepath.Clean(filepath.Join(destDir, params.Key)) + + ctx, span := trace.SpanFromContext(ctx).TracerProvider().Tracer(DownloadActivityName).Start(ctx, "download") if err := a.wsvc.Download(ctx, dest, params.WatcherName, params.Key); err != nil { + span.RecordError(err) + span.End() return nil, temporal_tools.NewNonRetryableError(fmt.Errorf("download: %v", err)) } + span.End() return &DownloadActivityResult{Path: dest}, nil } diff --git a/main.go b/main.go index c189a96f5..ed7a1cbf9 100644 --- a/main.go +++ b/main.go @@ -20,10 +20,10 @@ import ( "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/spf13/pflag" "go.artefactual.dev/tools/log" - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/codes" temporalsdk_activity "go.temporal.io/sdk/activity" temporalsdk_client "go.temporal.io/sdk/client" + temporalsdk_contrib_opentelemetry "go.temporal.io/sdk/contrib/opentelemetry" + temporalsdk_interceptor "go.temporal.io/sdk/interceptor" temporalsdk_worker "go.temporal.io/sdk/worker" temporalsdk_workflow "go.temporal.io/sdk/workflow" goahttp "goa.design/goa/v3/http" @@ -107,10 +107,9 @@ func main() { os.Exit(1) } defer func() { _ = shutdown(ctx) }() - tracer := tp.Tracer("enduro") // Set up the Enduro database client handler. - enduroDatabase, err := db.Connect(cfg.Database.Driver, cfg.Database.DSN) + enduroDatabase, err := db.Connect(ctx, tp, cfg.Database.Driver, cfg.Database.DSN) if err != nil { logger.Error(err, "Enduro database configuration failed.") os.Exit(1) @@ -121,17 +120,9 @@ func main() { os.Exit(1) } } - _, span := tracer.Start(ctx, "enduro-db-ping") - span.SetAttributes(attribute.String("db.driver", cfg.Database.Driver)) - if err := enduroDatabase.Ping(); err != nil { - span.SetStatus(codes.Error, "ping failed") - span.RecordError(err) - } - span.AddEvent("Connected!") - span.End() // Set up the Storage database client handler. - storageDatabase, err := db.Connect(cfg.Storage.Database.Driver, cfg.Storage.Database.DSN) + storageDatabase, err := db.Connect(ctx, tp, cfg.Storage.Database.Driver, cfg.Storage.Database.DSN) if err != nil { logger.Error(err, "Storage database configuration failed.") os.Exit(1) @@ -142,19 +133,22 @@ func main() { os.Exit(1) } } - _, span = tracer.Start(ctx, "storage-db-ping") - span.SetAttributes(attribute.String("db.driver", cfg.Storage.Database.Driver)) - if err := storageDatabase.Ping(); err != nil { - span.SetStatus(codes.Error, "ping failed") - span.RecordError(err) - } - span.AddEvent("Connected!") - span.End() + // Set up the Temporal client. + tracingInterceptor, err := temporalsdk_contrib_opentelemetry.NewTracingInterceptor( + temporalsdk_contrib_opentelemetry.TracerOptions{ + Tracer: tp.Tracer("temporal-sdk-go"), + }, + ) + if err != nil { + logger.Error(err, "Unable to create OpenTelemetry interceptor.") + os.Exit(1) + } temporalClient, err := temporalsdk_client.Dial(temporalsdk_client.Options{ - Namespace: cfg.Temporal.Namespace, - HostPort: cfg.Temporal.Address, - Logger: temporal.Logger(logger.WithName("temporal-client")), + Namespace: cfg.Temporal.Namespace, + HostPort: cfg.Temporal.Address, + Logger: temporal.Logger(logger.WithName("temporal-client")), + Interceptors: []temporalsdk_interceptor.ClientInterceptor{tracingInterceptor}, }) if err != nil { logger.Error(err, "Error creating Temporal client.")