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  }