From 81676c5404741c6420e934a87532de25d0e66a9e Mon Sep 17 00:00:00 2001 From: Ryan McGuire Date: Fri, 7 Mar 2025 08:42:38 -0500 Subject: [PATCH] add weather grpc --- go.mod | 11 ++++++----- go.sum | 12 ++++++++++++ pkg/app/app_init.go | 6 +++--- pkg/app/app_types.go | 6 +++--- pkg/srv/grpc/grpc.go | 29 +++++++++++++++++++++++++++++ pkg/srv/grpc/opts/grpc_config.go | 11 +++++++++++ pkg/srv/{ => http}/http.go | 12 ++---------- pkg/srv/{ => http}/http_health.go | 2 +- pkg/srv/{ => http}/http_log.go | 2 +- 9 files changed, 68 insertions(+), 23 deletions(-) create mode 100644 pkg/srv/grpc/grpc.go create mode 100644 pkg/srv/grpc/opts/grpc_config.go rename pkg/srv/{ => http}/http.go (94%) rename pkg/srv/{ => http}/http_health.go (99%) rename pkg/srv/{ => http}/http_log.go (99%) diff --git a/go.mod b/go.mod index a58d156..2e353a8 100644 --- a/go.mod +++ b/go.mod @@ -6,17 +6,19 @@ require ( github.com/caarlos0/env/v11 v11.3.1 github.com/prometheus/client_golang v1.20.5 github.com/rs/zerolog v1.33.0 + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 - go.opentelemetry.io/otel v1.34.0 + go.opentelemetry.io/otel v1.35.0 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.34.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 go.opentelemetry.io/otel/exporters/prometheus v0.56.0 go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.34.0 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.34.0 - go.opentelemetry.io/otel/metric v1.34.0 + go.opentelemetry.io/otel/metric v1.35.0 go.opentelemetry.io/otel/sdk v1.34.0 go.opentelemetry.io/otel/sdk/metric v1.34.0 - go.opentelemetry.io/otel/trace v1.34.0 + go.opentelemetry.io/otel/trace v1.35.0 + google.golang.org/grpc v1.71.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -43,7 +45,6 @@ require ( golang.org/x/sys v0.30.0 // indirect golang.org/x/text v0.22.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250212204824-5a70512c5d8b // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250212204824-5a70512c5d8b // indirect - google.golang.org/grpc v1.70.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a // indirect google.golang.org/protobuf v1.36.5 // indirect ) diff --git a/go.sum b/go.sum index bd8f83c..03cc49f 100644 --- a/go.sum +++ b/go.sum @@ -69,6 +69,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 h1:yd02MEjBdJkG3uabWP9apV+OuWRIXGDuJEUJbOHmCFU= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0/go.mod h1:umTcuxiv1n/s/S6/c2AT/g2CQ7u5C59sHDNmfSwgz7Q= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s= @@ -77,6 +79,8 @@ go.opentelemetry.io/otel v1.33.0 h1:/FerN9bax5LoK51X/sI0SVYrjSE0/yUL7DpxW4K3FWw= go.opentelemetry.io/otel v1.33.0/go.mod h1:SUUkR6csvUQl+yjReHu5uM3EtVV7MBm5FHKRlNx4I8I= go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= +go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= +go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.33.0 h1:7F29RDmnlqk6B5d+sUqemt8TBfDqxryYW5gX6L74RFA= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.33.0/go.mod h1:ZiGDq7xwDMKmWDrN1XsXAj0iC7hns+2DhxBFSncNHSE= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.34.0 h1:ajl4QczuJVA2TU9W9AGw++86Xga/RKt//16z/yxPgdk= @@ -105,6 +109,8 @@ go.opentelemetry.io/otel/metric v1.33.0 h1:r+JOocAyeRVXD8lZpjdQjzMadVZp2M4WmQ+5W go.opentelemetry.io/otel/metric v1.33.0/go.mod h1:L9+Fyctbp6HFTddIxClbQkjtubW6O9QS3Ann/M82u6M= go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= +go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= +go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= go.opentelemetry.io/otel/sdk v1.33.0 h1:iax7M131HuAm9QkZotNHEfstof92xM+N8sr3uHXc2IM= go.opentelemetry.io/otel/sdk v1.33.0/go.mod h1:A1Q5oi7/9XaMlIWzPSxLRWOI8nG3FnzHJNbiENQuihM= go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= @@ -117,6 +123,8 @@ go.opentelemetry.io/otel/trace v1.33.0 h1:cCJuF7LRjUFso9LPnEAHJDB2pqzp+hbO8eu1qq go.opentelemetry.io/otel/trace v1.33.0/go.mod h1:uIcdVUZMpTAmz0tI1z04GoVSezK37CbGV4fr1f2nBck= go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= +go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= +go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= go.opentelemetry.io/proto/otlp v1.4.0 h1:TA9WRvW6zMwP+Ssb6fLoUIuirti1gGbP28GcKG1jgeg= go.opentelemetry.io/proto/otlp v1.4.0/go.mod h1:PPBWZIP98o2ElSqI35IHfu7hIhSwvc5N38Jw8pXuGFY= go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4= @@ -156,10 +164,14 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287 h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287/go.mod h1:8BS3B93F/U1juMFq9+EDk+qOT5CO1R9IzXxG3PTqiRk= google.golang.org/genproto/googleapis/rpc v0.0.0-20250212204824-5a70512c5d8b h1:FQtJ1MxbXoIIrZHZ33M+w5+dAP9o86rgpjoKr/ZmT7k= google.golang.org/genproto/googleapis/rpc v0.0.0-20250212204824-5a70512c5d8b/go.mod h1:8BS3B93F/U1juMFq9+EDk+qOT5CO1R9IzXxG3PTqiRk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a h1:51aaUVRocpvUOSQKM6Q7VuoaktNIaMCLuhZB6DKksq4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a/go.mod h1:uRxBH1mhmO8PGhU89cMcHaXKZqO+OfakD8QQO0oYwlQ= google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU= google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= +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.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk= google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= google.golang.org/protobuf v1.36.2 h1:R8FeyR1/eLmkutZOM5CWghmo5itiG9z0ktFlTVLuTmU= diff --git a/pkg/app/app_init.go b/pkg/app/app_init.go index 5872d98..6b0fd1c 100644 --- a/pkg/app/app_init.go +++ b/pkg/app/app_init.go @@ -7,7 +7,7 @@ import ( "go.opentelemetry.io/otel/codes" "gitea.libretechconsulting.com/rmcguire/go-app/pkg/otel" - "gitea.libretechconsulting.com/rmcguire/go-app/pkg/srv" + srvhttp "gitea.libretechconsulting.com/rmcguire/go-app/pkg/srv/http" ) func (a *App) initGRPC() { @@ -26,8 +26,8 @@ func (a *App) initHTTP(ctx context.Context) error { attribute.Int("numHTTPHealthChecks", len(a.HTTP.HealthChecks)), ) - httpShutdown, a.HTTP.httpDone, err = srv.InitHTTPServer( - &srv.HTTPServerOpts{ + httpShutdown, a.HTTP.httpDone, err = srvhttp.InitHTTPServer( + &srvhttp.HTTPServerOpts{ Ctx: a.AppContext, HandleFuncs: a.HTTP.Funcs, Middleware: a.HTTP.Middleware, diff --git a/pkg/app/app_types.go b/pkg/app/app_types.go index 3205d3b..e4c7b3b 100644 --- a/pkg/app/app_types.go +++ b/pkg/app/app_types.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc" "gitea.libretechconsulting.com/rmcguire/go-app/pkg/config" - "gitea.libretechconsulting.com/rmcguire/go-app/pkg/srv" + srvhttp "gitea.libretechconsulting.com/rmcguire/go-app/pkg/srv/http" ) type App struct { @@ -35,9 +35,9 @@ type GRPCService struct { } type AppHTTP struct { - Funcs []srv.HTTPFunc + Funcs []srvhttp.HTTPFunc Middleware []http.Handler - HealthChecks []srv.HealthCheckFunc + HealthChecks []srvhttp.HealthCheckFunc httpDone <-chan any } diff --git a/pkg/srv/grpc/grpc.go b/pkg/srv/grpc/grpc.go new file mode 100644 index 0000000..4c43bdf --- /dev/null +++ b/pkg/srv/grpc/grpc.go @@ -0,0 +1,29 @@ +package grpc + +import ( + "context" + + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" + "go.opentelemetry.io/otel/metric" + "go.opentelemetry.io/otel/trace" + sdktrace "go.opentelemetry.io/otel/sdk/trace" + "google.golang.org/grpc" + + "gitea.libretechconsulting.com/rmcguire/go-app/pkg/srv/grpc/opts" +) + +type AppGRPCServer struct { + ctx context.Context + tracer trace.Tracer + meter metric.Meter +} + +func InitGRPCServer(ctx context.Context, opts *opts.GRPCOpts) { + server := grpc.NewServer() + + stats := otelgrpc.NewServerHandler(otelgrpc.WithTracerProvider(sdktrace.T)) + + for _, service := range opts.Services { + server.RegisterService(service.Type, service.Service) + } +} diff --git a/pkg/srv/grpc/opts/grpc_config.go b/pkg/srv/grpc/opts/grpc_config.go new file mode 100644 index 0000000..095606c --- /dev/null +++ b/pkg/srv/grpc/opts/grpc_config.go @@ -0,0 +1,11 @@ +package opts + +import ( + "gitea.libretechconsulting.com/rmcguire/go-app/pkg/app" + "gitea.libretechconsulting.com/rmcguire/go-app/pkg/config" +) + +type GRPCOpts struct { + *config.GRPCConfig + *app.AppGRPC +} diff --git a/pkg/srv/http.go b/pkg/srv/http/http.go similarity index 94% rename from pkg/srv/http.go rename to pkg/srv/http/http.go index 625470d..123fdf1 100644 --- a/pkg/srv/http.go +++ b/pkg/srv/http/http.go @@ -1,4 +1,4 @@ -package srv +package http import ( "context" @@ -128,17 +128,9 @@ func prepHTTPServer(opts *HTTPServerOpts) *http.Server { } } -// Returns a shutdown func and a done channel if the -// server aborts abnormally. Panics on error. -func InitHTTPServer(opts *HTTPServerOpts) ( - func(context.Context) error, <-chan any, error, -) { - return initHTTPServer(opts) -} - // Returns a shutdown func and a done channel if the // server aborts abnormally. Returns error on failure to start -func initHTTPServer(opts *HTTPServerOpts) ( +func InitHTTPServer(opts *HTTPServerOpts) ( func(context.Context) error, <-chan any, error, ) { l := zerolog.Ctx(opts.Ctx) diff --git a/pkg/srv/http_health.go b/pkg/srv/http/http_health.go similarity index 99% rename from pkg/srv/http_health.go rename to pkg/srv/http/http_health.go index 8a31a90..a504689 100644 --- a/pkg/srv/http_health.go +++ b/pkg/srv/http/http_health.go @@ -1,4 +1,4 @@ -package srv +package http import ( "context" diff --git a/pkg/srv/http_log.go b/pkg/srv/http/http_log.go similarity index 99% rename from pkg/srv/http_log.go rename to pkg/srv/http/http_log.go index b59c7e0..6e9b520 100644 --- a/pkg/srv/http_log.go +++ b/pkg/srv/http/http_log.go @@ -1,4 +1,4 @@ -package srv +package http import ( "bytes"