/
grpc_server.go
51 lines (41 loc) 路 1.05 KB
/
grpc_server.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package otlp
import (
"context"
"fmt"
"net"
"go.opentelemetry.io/otel/trace"
pb "go.opentelemetry.io/proto/otlp/collector/trace/v1"
"google.golang.org/grpc"
)
type grpcServer struct {
pb.UnimplementedTraceServiceServer
addr string
ingester Ingester
gServer *grpc.Server
tracer trace.Tracer
}
func NewGrpcServer(addr string, ingester Ingester, tracer trace.Tracer) *grpcServer {
return &grpcServer{
addr: addr,
ingester: ingester,
tracer: tracer,
}
}
func (s *grpcServer) Start() error {
s.gServer = grpc.NewServer()
listener, err := net.Listen("tcp", s.addr)
if err != nil {
return fmt.Errorf("cannot listen on address %s: %w", s.addr, err)
}
pb.RegisterTraceServiceServer(s.gServer, s)
go s.gServer.Serve(listener)
return nil
}
func (s *grpcServer) Stop() {
s.gServer.Stop()
}
func (s grpcServer) Export(ctx context.Context, request *pb.ExportTraceServiceRequest) (*pb.ExportTraceServiceResponse, error) {
ctx, span := s.tracer.Start(ctx, "Export trace")
defer span.End()
return s.ingester.Ingest(ctx, request, "gRPC")
}