Plugins: Enhanced plugin instrumentation (#90199)

* Plugins: Enhanced plugin instrumentation

* use backend.CallResourceResponseSenderFunc

* sdk v0.237.0

* support admission control

* cover all handlers in log and metrics middlewares

* fix after review
This commit is contained in:
Marcus Efraimsson
2024-07-09 15:03:46 +02:00
committed by GitHub
parent 2a4a73e03d
commit c8af659f02
40 changed files with 700 additions and 472 deletions
+1 -7
View File
@@ -94,7 +94,7 @@ func (s *Service) CallResource(ctx context.Context, req *backend.CallResourceReq
removeNonAllowedHeaders(req.Headers)
processedStreams := 0
wrappedSender := callResourceResponseSenderFunc(func(res *backend.CallResourceResponse) error {
wrappedSender := backend.CallResourceResponseSenderFunc(func(res *backend.CallResourceResponse) error {
// Expected that headers and status are only part of first stream
if processedStreams == 0 && res != nil {
if len(res.Headers) > 0 {
@@ -354,9 +354,3 @@ func ensureContentTypeHeader(res *backend.CallResourceResponse) {
res.Headers[contentTypeHeaderName] = []string{defaultContentType}
}
}
type callResourceResponseSenderFunc func(res *backend.CallResourceResponse) error
func (fn callResourceResponseSenderFunc) Send(res *backend.CallResourceResponse) error {
return fn(res)
}
+4 -4
View File
@@ -169,7 +169,7 @@ func TestCallResource(t *testing.T) {
}
responses := []*backend.CallResourceResponse{}
sender := callResourceResponseSenderFunc(func(res *backend.CallResourceResponse) error {
sender := backend.CallResourceResponseSenderFunc(func(res *backend.CallResourceResponse) error {
responses = append(responses, res)
return nil
})
@@ -232,7 +232,7 @@ func TestCallResource(t *testing.T) {
}
responses := []*backend.CallResourceResponse{}
sender := callResourceResponseSenderFunc(func(res *backend.CallResourceResponse) error {
sender := backend.CallResourceResponseSenderFunc(func(res *backend.CallResourceResponse) error {
responses = append(responses, res)
return nil
})
@@ -280,7 +280,7 @@ func TestCallResource(t *testing.T) {
}
responses := []*backend.CallResourceResponse{}
sender := callResourceResponseSenderFunc(func(res *backend.CallResourceResponse) error {
sender := backend.CallResourceResponseSenderFunc(func(res *backend.CallResourceResponse) error {
responses = append(responses, res)
return nil
})
@@ -348,7 +348,7 @@ func TestCallResource(t *testing.T) {
}
responses := []*backend.CallResourceResponse{}
sender := callResourceResponseSenderFunc(func(res *backend.CallResourceResponse) error {
sender := backend.CallResourceResponseSenderFunc(func(res *backend.CallResourceResponse) error {
responses = append(responses, res)
return nil
})
+39
View File
@@ -35,6 +35,9 @@ func (d *Decorator) QueryData(ctx context.Context, req *backend.QueryDataRequest
if req == nil {
return nil, errNilRequest
}
ctx = backend.WithEndpoint(ctx, backend.EndpointQueryData)
ctx = backend.WithPluginContext(ctx, req.PluginContext)
ctx = backend.WithUser(ctx, req.PluginContext.User)
client := clientFromMiddlewares(d.middlewares, d.client)
@@ -46,6 +49,10 @@ func (d *Decorator) CallResource(ctx context.Context, req *backend.CallResourceR
return errNilRequest
}
ctx = backend.WithEndpoint(ctx, backend.EndpointCallResource)
ctx = backend.WithPluginContext(ctx, req.PluginContext)
ctx = backend.WithUser(ctx, req.PluginContext.User)
if sender == nil {
return errors.New("sender cannot be nil")
}
@@ -59,6 +66,10 @@ func (d *Decorator) CollectMetrics(ctx context.Context, req *backend.CollectMetr
return nil, errNilRequest
}
ctx = backend.WithEndpoint(ctx, backend.EndpointCollectMetrics)
ctx = backend.WithPluginContext(ctx, req.PluginContext)
ctx = backend.WithUser(ctx, req.PluginContext.User)
client := clientFromMiddlewares(d.middlewares, d.client)
return client.CollectMetrics(ctx, req)
}
@@ -68,6 +79,10 @@ func (d *Decorator) CheckHealth(ctx context.Context, req *backend.CheckHealthReq
return nil, errNilRequest
}
ctx = backend.WithEndpoint(ctx, backend.EndpointCheckHealth)
ctx = backend.WithPluginContext(ctx, req.PluginContext)
ctx = backend.WithUser(ctx, req.PluginContext.User)
client := clientFromMiddlewares(d.middlewares, d.client)
return client.CheckHealth(ctx, req)
}
@@ -77,6 +92,10 @@ func (d *Decorator) SubscribeStream(ctx context.Context, req *backend.SubscribeS
return nil, errNilRequest
}
ctx = backend.WithEndpoint(ctx, backend.EndpointSubscribeStream)
ctx = backend.WithPluginContext(ctx, req.PluginContext)
ctx = backend.WithUser(ctx, req.PluginContext.User)
client := clientFromMiddlewares(d.middlewares, d.client)
return client.SubscribeStream(ctx, req)
}
@@ -86,6 +105,10 @@ func (d *Decorator) PublishStream(ctx context.Context, req *backend.PublishStrea
return nil, errNilRequest
}
ctx = backend.WithEndpoint(ctx, backend.EndpointPublishStream)
ctx = backend.WithPluginContext(ctx, req.PluginContext)
ctx = backend.WithUser(ctx, req.PluginContext.User)
client := clientFromMiddlewares(d.middlewares, d.client)
return client.PublishStream(ctx, req)
}
@@ -95,6 +118,10 @@ func (d *Decorator) RunStream(ctx context.Context, req *backend.RunStreamRequest
return errNilRequest
}
ctx = backend.WithEndpoint(ctx, backend.EndpointRunStream)
ctx = backend.WithPluginContext(ctx, req.PluginContext)
ctx = backend.WithUser(ctx, req.PluginContext.User)
if sender == nil {
return errors.New("sender cannot be nil")
}
@@ -108,6 +135,10 @@ func (d *Decorator) ValidateAdmission(ctx context.Context, req *backend.Admissio
return nil, errNilRequest
}
ctx = backend.WithEndpoint(ctx, backend.EndpointValidateAdmission)
ctx = backend.WithPluginContext(ctx, req.PluginContext)
ctx = backend.WithUser(ctx, req.PluginContext.User)
client := clientFromMiddlewares(d.middlewares, d.client)
return client.ValidateAdmission(ctx, req)
}
@@ -117,6 +148,10 @@ func (d *Decorator) MutateAdmission(ctx context.Context, req *backend.AdmissionR
return nil, errNilRequest
}
ctx = backend.WithEndpoint(ctx, backend.EndpointMutateAdmission)
ctx = backend.WithPluginContext(ctx, req.PluginContext)
ctx = backend.WithUser(ctx, req.PluginContext.User)
client := clientFromMiddlewares(d.middlewares, d.client)
return client.MutateAdmission(ctx, req)
}
@@ -126,6 +161,10 @@ func (d *Decorator) ConvertObject(ctx context.Context, req *backend.ConversionRe
return nil, errNilRequest
}
ctx = backend.WithEndpoint(ctx, backend.EndpointConvertObject)
ctx = backend.WithPluginContext(ctx, req.PluginContext)
ctx = backend.WithUser(ctx, req.PluginContext.User)
client := clientFromMiddlewares(d.middlewares, d.client)
return client.ConvertObject(ctx, req)
}
+1 -1
View File
@@ -43,7 +43,7 @@ func TestDecorator(t *testing.T) {
_, _ = d.QueryData(context.Background(), &backend.QueryDataRequest{})
require.True(t, queryDataCalled)
sender := callResourceResponseSenderFunc(func(res *backend.CallResourceResponse) error {
sender := backend.CallResourceResponseSenderFunc(func(res *backend.CallResourceResponse) error {
return nil
})