implement grpc gateway and addl handler support
This commit is contained in:
parent
262f6a4232
commit
7f60a59d42
@ -9,9 +9,6 @@ import (
|
|||||||
"gitea.libretechconsulting.com/rmcguire/go-app/pkg/config"
|
"gitea.libretechconsulting.com/rmcguire/go-app/pkg/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO: Make Configurable
|
|
||||||
const GRPC_GW_API_PATH = "/api"
|
|
||||||
|
|
||||||
func (a *App) Done() <-chan any {
|
func (a *App) Done() <-chan any {
|
||||||
return a.appDone
|
return a.appDone
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ func (a *App) runGRPC(ctx context.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
a.HTTP.Handlers = append(a.HTTP.Handlers, opts.HTTPHandler{
|
a.HTTP.Handlers = append(a.HTTP.Handlers, opts.HTTPHandler{
|
||||||
Prefix: GRPC_GW_API_PATH,
|
Prefix: a.cfg.GRPC.GRPCGatewayPath,
|
||||||
StripPrefix: true,
|
StripPrefix: true,
|
||||||
Handler: a.GRPC.GetGatewayMux(),
|
Handler: a.GRPC.GetGatewayMux(),
|
||||||
})
|
})
|
||||||
|
@ -15,4 +15,6 @@ type GRPCConfig struct {
|
|||||||
LogRequests bool `yaml:"logRequests" env:"APP_GRPC_LOG_REQUESTS" json:"logRequests,omitempty"`
|
LogRequests bool `yaml:"logRequests" env:"APP_GRPC_LOG_REQUESTS" json:"logRequests,omitempty"`
|
||||||
EnableReflection bool `yaml:"enableReflection" env:"APP_GRPC_ENABLE_REFLECTION" json:"enableReflection,omitempty"`
|
EnableReflection bool `yaml:"enableReflection" env:"APP_GRPC_ENABLE_REFLECTION" json:"enableReflection,omitempty"`
|
||||||
EnableInstrumentation bool `yaml:"enableInstrumentation" env:"APP_GRPC_ENABLE_INSTRUMENTATION" json:"enableInstrumentation,omitempty"` // requires OTEL
|
EnableInstrumentation bool `yaml:"enableInstrumentation" env:"APP_GRPC_ENABLE_INSTRUMENTATION" json:"enableInstrumentation,omitempty"` // requires OTEL
|
||||||
|
EnableGRPCGateway bool `yaml:"enableGRPCGateway" json:"enableGRPCGateway,omitempty" env:"APP_GRPC_ENABLE_GATEWAY" default:"true"`
|
||||||
|
GRPCGatewayPath string `yaml:"grpcGatewayPath" json:"grpcGatewayPath,omitempty" env:"APP_GRPC_GATEWAY_PATH" default:"/grpc-api"`
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
"github.com/grpc-ecosystem/grpc-gateway/runtime"
|
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
"go.opentelemetry.io/otel/codes"
|
"go.opentelemetry.io/otel/codes"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
|
@ -4,7 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/grpc-ecosystem/grpc-gateway/runtime"
|
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
"go.opentelemetry.io/otel/codes"
|
"go.opentelemetry.io/otel/codes"
|
||||||
|
@ -3,7 +3,7 @@ package opts
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/grpc-ecosystem/grpc-gateway/runtime"
|
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
|
|
||||||
"gitea.libretechconsulting.com/rmcguire/go-app/pkg/config"
|
"gitea.libretechconsulting.com/rmcguire/go-app/pkg/config"
|
||||||
@ -28,9 +28,11 @@ type GRPCService struct {
|
|||||||
Name string // Descriptive name of service
|
Name string // Descriptive name of service
|
||||||
Type *grpc.ServiceDesc // Type (from protoc generated code)
|
Type *grpc.ServiceDesc // Type (from protoc generated code)
|
||||||
Service any // Implementation of GRPCService.Type (ptr)
|
Service any // Implementation of GRPCService.Type (ptr)
|
||||||
GwRegistrationFuncs []func(context.Context, *runtime.ServeMux, *grpc.ClientConn) error // Gateway regustration handler funcs
|
GwRegistrationFuncs []GwRegistrationFunc // Gateway regustration handler funcs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type GwRegistrationFunc func(context.Context, *runtime.ServeMux, *grpc.ClientConn) error
|
||||||
|
|
||||||
func (a *AppGRPC) SetGatewayMux(mux *runtime.ServeMux) {
|
func (a *AppGRPC) SetGatewayMux(mux *runtime.ServeMux) {
|
||||||
a.gatewayMux = mux
|
a.gatewayMux = mux
|
||||||
}
|
}
|
||||||
|
@ -19,8 +19,10 @@ func (a *appGRPCServer) registerGRPCServices(ctx context.Context) {
|
|||||||
|
|
||||||
for _, service := range a.opts.Services {
|
for _, service := range a.opts.Services {
|
||||||
a.registerGRPCService(ctx, service)
|
a.registerGRPCService(ctx, service)
|
||||||
|
if a.opts.EnableGRPCGateway {
|
||||||
a.registerServiceGatewayHandlers(ctx, service)
|
a.registerServiceGatewayHandlers(ctx, service)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
span.SetStatus(codes.Ok, "")
|
span.SetStatus(codes.Ok, "")
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user