github.com/vseinstrumentiru/lego@v1.0.2/internal/lego/transport/event/metrics/handler.go (about)

     1  package metrics
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/ThreeDotsLabs/watermill/message"
     7  	"go.opencensus.io/stats"
     8  	"go.opencensus.io/tag"
     9  )
    10  
    11  func Middleware(h message.HandlerFunc) message.HandlerFunc {
    12  	return func(msg *message.Message) (msgs []*message.Message, err error) {
    13  		now := time.Now()
    14  		ctx := msg.Context()
    15  
    16  		tags := []tag.Mutator{
    17  			tag.Upsert(HandlerName, message.HandlerNameFromCtx(ctx)),
    18  		}
    19  
    20  		defer func() {
    21  			if err != nil {
    22  				tags = append(tags, tag.Upsert(Success, "false"))
    23  			} else {
    24  				tags = append(tags, tag.Upsert(Success, "true"))
    25  			}
    26  
    27  			_ = stats.RecordWithTags(ctx, tags, HandlerExecutionTime.M(time.Since(now).Seconds()))
    28  		}()
    29  
    30  		return h(msg)
    31  	}
    32  }