github.com/whamcloud/lemur@v0.0.0-20190827193804-4655df8a52af/cmd/lhsmd/transport/grpc/stats.go (about)

     1  // Copyright (c) 2018 DDN. All rights reserved.
     2  // Use of this source code is governed by a MIT-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package rpc
     6  
     7  import (
     8  	"bytes"
     9  	"fmt"
    10  	"runtime"
    11  	"time"
    12  
    13  	"github.com/dustin/go-humanize"
    14  	"github.com/rcrowley/go-metrics"
    15  )
    16  
    17  type messageStats struct {
    18  	StartTime   time.Time
    19  	StartSysMem uint64
    20  	MaxSysMem   uint64
    21  	Count       metrics.Counter
    22  	Rate        metrics.Meter
    23  	Latencies   metrics.Histogram
    24  }
    25  
    26  func (s *messageStats) String() string {
    27  	var buf bytes.Buffer
    28  
    29  	ms := runtime.MemStats{}
    30  	runtime.ReadMemStats(&ms)
    31  	if ms.Sys > s.MaxSysMem {
    32  		s.MaxSysMem = ms.Sys
    33  	}
    34  
    35  	fmt.Fprintf(&buf, "mem usage (start/cur/max): %s/%s/%s\n",
    36  		humanize.Bytes(s.StartSysMem),
    37  		humanize.Bytes(ms.Sys),
    38  		humanize.Bytes(s.MaxSysMem),
    39  	)
    40  	fmt.Fprintf(&buf, "runtime: %s\n", time.Since(s.StartTime))
    41  	fmt.Fprintf(&buf, "  count: %s\n", humanize.Comma(s.Count.Count()))
    42  	fmt.Fprintf(&buf, "msg/sec (1 min/5 min/15 min/inst): %s/%s/%s/%s\n",
    43  		humanize.Comma(int64(s.Rate.Rate1())),
    44  		humanize.Comma(int64(s.Rate.Rate5())),
    45  		humanize.Comma(int64(s.Rate.Rate15())),
    46  		humanize.Comma(int64(s.Rate.RateMean())),
    47  	)
    48  	fmt.Fprintln(&buf, "latencies:")
    49  	fmt.Fprintf(&buf, "  min: %s\n", time.Duration(s.Latencies.Min()))
    50  	fmt.Fprintf(&buf, " mean: %s\n", time.Duration(int64(s.Latencies.Mean())))
    51  	fmt.Fprintf(&buf, "  max: %s\n", time.Duration(s.Latencies.Max()))
    52  
    53  	return buf.String()
    54  }
    55  
    56  func newMessageStats() *messageStats {
    57  	ms := runtime.MemStats{}
    58  	runtime.ReadMemStats(&ms)
    59  
    60  	return &messageStats{
    61  		StartTime:   time.Now(),
    62  		StartSysMem: ms.Sys,
    63  		MaxSysMem:   ms.Sys,
    64  		Count:       metrics.NewCounter(),
    65  		Rate:        metrics.NewMeter(),
    66  		Latencies: metrics.NewHistogram(
    67  			metrics.NewUniformSample(1024),
    68  		),
    69  	}
    70  }