@@ -33,51 +33,62 @@ import (
3333type GRPCHandler struct {
3434 logger * zap.Logger
3535 batchConsumer batchConsumer
36- tenancyConfig * tenancy.TenancyConfig
3736}
3837
3938// NewGRPCHandler registers routes for this handler on the given router.
4039func NewGRPCHandler (logger * zap.Logger , spanProcessor processor.SpanProcessor , tenancyConfig * tenancy.TenancyConfig ) * GRPCHandler {
4140 return & GRPCHandler {
4241 logger : logger ,
43- batchConsumer : batchConsumer {
44- logger : logger ,
45- spanProcessor : spanProcessor ,
46- spanOptions : processor.SpansOptions {
47- InboundTransport : processor .GRPCTransport ,
48- SpanFormat : processor .ProtoSpanFormat ,
49- },
50- },
51- tenancyConfig : tenancyConfig ,
42+ batchConsumer : newBatchConsumer (logger ,
43+ spanProcessor ,
44+ processor .GRPCTransport ,
45+ processor .ProtoSpanFormat ,
46+ tenancyConfig ),
5247 }
5348}
5449
5550// PostSpans implements gRPC CollectorService.
5651func (g * GRPCHandler ) PostSpans (ctx context.Context , r * api_v2.PostSpansRequest ) (* api_v2.PostSpansResponse , error ) {
57- tenant , err := g .validateTenant (ctx )
58- if err != nil {
59- g .logger .Error ("rejecting spans (tenancy)" , zap .Error (err ))
60- return nil , err
61- }
62-
6352 batch := & r .Batch
64- err = g .batchConsumer .consume (batch , tenant )
53+ err : = g .batchConsumer .consume (ctx , batch )
6554 return & api_v2.PostSpansResponse {}, err
6655}
6756
6857type batchConsumer struct {
6958 logger * zap.Logger
7059 spanProcessor processor.SpanProcessor
7160 spanOptions processor.SpansOptions
61+ tenancyConfig tenancy.TenancyConfig
7262}
7363
74- func (c * batchConsumer ) consume (batch * model.Batch , tenant string ) error {
64+ func newBatchConsumer (logger * zap.Logger , spanProcessor processor.SpanProcessor , transport processor.InboundTransport , spanFormat processor.SpanFormat , tenancyConfig * tenancy.TenancyConfig ) batchConsumer {
65+ if tenancyConfig == nil {
66+ tenancyConfig = & tenancy.TenancyConfig {}
67+ }
68+ return batchConsumer {
69+ logger : logger ,
70+ spanProcessor : spanProcessor ,
71+ spanOptions : processor.SpansOptions {
72+ InboundTransport : transport ,
73+ SpanFormat : spanFormat ,
74+ },
75+ tenancyConfig : * tenancyConfig ,
76+ }
77+ }
78+
79+ func (c * batchConsumer ) consume (ctx context.Context , batch * model.Batch ) error {
80+ tenant , err := c .validateTenant (ctx )
81+ if err != nil {
82+ c .logger .Error ("rejecting spans (tenancy)" , zap .Error (err ))
83+ return err
84+ }
85+
7586 for _ , span := range batch .Spans {
7687 if span .GetProcess () == nil {
7788 span .Process = batch .Process
7889 }
7990 }
80- _ , err : = c .spanProcessor .ProcessSpans (batch .Spans , processor.SpansOptions {
91+ _ , err = c .spanProcessor .ProcessSpans (batch .Spans , processor.SpansOptions {
8192 InboundTransport : processor .GRPCTransport ,
8293 SpanFormat : processor .ProtoSpanFormat ,
8394 Tenant : tenant ,
@@ -92,8 +103,8 @@ func (c *batchConsumer) consume(batch *model.Batch, tenant string) error {
92103 return nil
93104}
94105
95- func (g * GRPCHandler ) validateTenant (ctx context.Context ) (string , error ) {
96- if ! g .tenancyConfig .Enabled {
106+ func (c * batchConsumer ) validateTenant (ctx context.Context ) (string , error ) {
107+ if ! c .tenancyConfig .Enabled {
97108 return "" , nil
98109 }
99110
@@ -102,14 +113,14 @@ func (g *GRPCHandler) validateTenant(ctx context.Context) (string, error) {
102113 return "" , status .Errorf (codes .PermissionDenied , "missing tenant header" )
103114 }
104115
105- tenants := md [g .tenancyConfig .Header ]
116+ tenants := md [c .tenancyConfig .Header ]
106117 if len (tenants ) < 1 {
107118 return "" , status .Errorf (codes .PermissionDenied , "missing tenant header" )
108119 } else if len (tenants ) > 1 {
109120 return "" , status .Errorf (codes .PermissionDenied , "extra tenant header" )
110121 }
111122
112- if ! g .tenancyConfig .Valid (tenants [0 ]) {
123+ if ! c .tenancyConfig .Valid (tenants [0 ]) {
113124 return "" , status .Errorf (codes .PermissionDenied , "unknown tenant" )
114125 }
115126
0 commit comments