mirror of
https://github.com/hanzoai/telemetry.git
synced 2026-10-30 20:01:49 +00:00
This is a huge PR that does not touch any of the critical logic "marshaling/unmarshaling" of the pdata. We have e2e tests with the go official generated protobufs to ensure nothing breaks. The easy way to review this is to only look at what change publicly in "pdata/pcommon", "pdata/plog", "pdata/ptrace", "pdata/pmetric", "pdata/pprofile", "pdata/xpdata". This PR also switches the xpada request to use the same generating mechanism as pdatagen. **Binary size before:** ``` 42246018 bin/otelcorecol_darwin_arm64 ``` **Binary size after:** ``` 40709202 bin/otelcorecol_darwin_arm64 ``` Signed-off-by: Bogdan Drutu <[email protected]>
89 lines
3.0 KiB
Go
89 lines
3.0 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package plogotlp // import "go.opentelemetry.io/collector/pdata/plog/plogotlp"
|
|
|
|
import (
|
|
"context"
|
|
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
|
|
"go.opentelemetry.io/collector/pdata/internal"
|
|
"go.opentelemetry.io/collector/pdata/internal/otelgrpc"
|
|
"go.opentelemetry.io/collector/pdata/internal/otlp"
|
|
)
|
|
|
|
// GRPCClient is the client API for OTLP-GRPC Logs service.
|
|
//
|
|
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
|
|
type GRPCClient interface {
|
|
// Export plog.Logs to the server.
|
|
//
|
|
// For performance reasons, it is recommended to keep this RPC
|
|
// alive for the entire life of the application.
|
|
Export(ctx context.Context, request ExportRequest, opts ...grpc.CallOption) (ExportResponse, error)
|
|
|
|
// unexported disallow implementation of the GRPCClient.
|
|
unexported()
|
|
}
|
|
|
|
// NewGRPCClient returns a new GRPCClient connected using the given connection.
|
|
func NewGRPCClient(cc *grpc.ClientConn) GRPCClient {
|
|
return &grpcClient{rawClient: otelgrpc.NewLogsServiceClient(cc)}
|
|
}
|
|
|
|
type grpcClient struct {
|
|
rawClient otelgrpc.LogsServiceClient
|
|
}
|
|
|
|
func (c *grpcClient) Export(ctx context.Context, request ExportRequest, opts ...grpc.CallOption) (ExportResponse, error) {
|
|
rsp, err := c.rawClient.Export(ctx, request.orig, opts...)
|
|
if err != nil {
|
|
return ExportResponse{}, err
|
|
}
|
|
return ExportResponse{orig: rsp, state: internal.NewState()}, err
|
|
}
|
|
|
|
func (c *grpcClient) unexported() {}
|
|
|
|
// GRPCServer is the server API for OTLP gRPC LogsService service.
|
|
// Implementations MUST embed UnimplementedGRPCServer.
|
|
type GRPCServer interface {
|
|
// Export is called every time a new request is received.
|
|
//
|
|
// For performance reasons, it is recommended to keep this RPC
|
|
// alive for the entire life of the application.
|
|
Export(context.Context, ExportRequest) (ExportResponse, error)
|
|
|
|
// unexported disallow implementation of the GRPCServer.
|
|
unexported()
|
|
}
|
|
|
|
var _ GRPCServer = (*UnimplementedGRPCServer)(nil)
|
|
|
|
// UnimplementedGRPCServer MUST be embedded to have forward compatible implementations.
|
|
type UnimplementedGRPCServer struct{}
|
|
|
|
func (*UnimplementedGRPCServer) Export(context.Context, ExportRequest) (ExportResponse, error) {
|
|
return ExportResponse{}, status.Errorf(codes.Unimplemented, "method Export not implemented")
|
|
}
|
|
|
|
func (*UnimplementedGRPCServer) unexported() {}
|
|
|
|
// RegisterGRPCServer registers the Server to the grpc.Server.
|
|
func RegisterGRPCServer(s *grpc.Server, srv GRPCServer) {
|
|
otelgrpc.RegisterLogsServiceServer(s, &rawLogsServer{srv: srv})
|
|
}
|
|
|
|
type rawLogsServer struct {
|
|
srv GRPCServer
|
|
}
|
|
|
|
func (s rawLogsServer) Export(ctx context.Context, request *internal.ExportLogsServiceRequest) (*internal.ExportLogsServiceResponse, error) {
|
|
otlp.MigrateLogs(request.ResourceLogs)
|
|
rsp, err := s.srv.Export(ctx, ExportRequest{orig: request, state: internal.NewState()})
|
|
return rsp.orig, err
|
|
}
|