github.com/hashicorp/vault/sdk@v0.13.0/plugin/middleware.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package plugin 5 6 import ( 7 "context" 8 "time" 9 10 log "github.com/hashicorp/go-hclog" 11 "github.com/hashicorp/vault/sdk/logical" 12 ) 13 14 // backendPluginClient implements logical.Backend and is the 15 // go-plugin client. 16 type BackendTracingMiddleware struct { 17 logger log.Logger 18 19 next logical.Backend 20 } 21 22 // Validate the backendTracingMiddle object satisfies the backend interface 23 var _ logical.Backend = &BackendTracingMiddleware{} 24 25 func (b *BackendTracingMiddleware) Initialize(ctx context.Context, req *logical.InitializationRequest) (err error) { 26 defer func(then time.Time) { 27 b.logger.Trace("initialize", "status", "finished", "err", err, "took", time.Since(then)) 28 }(time.Now()) 29 30 b.logger.Trace("initialize", "status", "started") 31 return b.next.Initialize(ctx, req) 32 } 33 34 func (b *BackendTracingMiddleware) HandleRequest(ctx context.Context, req *logical.Request) (resp *logical.Response, err error) { 35 defer func(then time.Time) { 36 b.logger.Trace("handle request", "path", req.Path, "status", "finished", "err", err, "took", time.Since(then)) 37 }(time.Now()) 38 39 b.logger.Trace("handle request", "path", req.Path, "status", "started") 40 return b.next.HandleRequest(ctx, req) 41 } 42 43 func (b *BackendTracingMiddleware) SpecialPaths() *logical.Paths { 44 defer func(then time.Time) { 45 b.logger.Trace("special paths", "status", "finished", "took", time.Since(then)) 46 }(time.Now()) 47 48 b.logger.Trace("special paths", "status", "started") 49 return b.next.SpecialPaths() 50 } 51 52 func (b *BackendTracingMiddleware) System() logical.SystemView { 53 return b.next.System() 54 } 55 56 func (b *BackendTracingMiddleware) Logger() log.Logger { 57 return b.next.Logger() 58 } 59 60 func (b *BackendTracingMiddleware) HandleExistenceCheck(ctx context.Context, req *logical.Request) (found bool, exists bool, err error) { 61 defer func(then time.Time) { 62 b.logger.Trace("handle existence check", "path", req.Path, "status", "finished", "err", err, "took", time.Since(then)) 63 }(time.Now()) 64 65 b.logger.Trace("handle existence check", "path", req.Path, "status", "started") 66 return b.next.HandleExistenceCheck(ctx, req) 67 } 68 69 func (b *BackendTracingMiddleware) Cleanup(ctx context.Context) { 70 defer func(then time.Time) { 71 b.logger.Trace("cleanup", "status", "finished", "took", time.Since(then)) 72 }(time.Now()) 73 74 b.logger.Trace("cleanup", "status", "started") 75 b.next.Cleanup(ctx) 76 } 77 78 func (b *BackendTracingMiddleware) InvalidateKey(ctx context.Context, key string) { 79 defer func(then time.Time) { 80 b.logger.Trace("invalidate key", "key", key, "status", "finished", "took", time.Since(then)) 81 }(time.Now()) 82 83 b.logger.Trace("invalidate key", "key", key, "status", "started") 84 b.next.InvalidateKey(ctx, key) 85 } 86 87 func (b *BackendTracingMiddleware) Setup(ctx context.Context, config *logical.BackendConfig) (err error) { 88 defer func(then time.Time) { 89 b.logger.Trace("setup", "status", "finished", "err", err, "took", time.Since(then)) 90 }(time.Now()) 91 92 b.logger.Trace("setup", "status", "started") 93 return b.next.Setup(ctx, config) 94 } 95 96 func (b *BackendTracingMiddleware) Type() logical.BackendType { 97 defer func(then time.Time) { 98 b.logger.Trace("type", "status", "finished", "took", time.Since(then)) 99 }(time.Now()) 100 101 b.logger.Trace("type", "status", "started") 102 return b.next.Type() 103 } 104 105 func (b *BackendTracingMiddleware) PluginVersion() logical.PluginVersion { 106 defer func(then time.Time) { 107 b.logger.Trace("version", "status", "finished", "took", time.Since(then)) 108 }(time.Now()) 109 110 b.logger.Trace("version", "status", "started") 111 if versioner, ok := b.next.(logical.PluginVersioner); ok { 112 return versioner.PluginVersion() 113 } 114 return logical.EmptyPluginVersion 115 }