github.com/ethereum/go-ethereum@v1.14.3/metrics/influxdb/influxdb.go (about)

     1  package influxdb
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/ethereum/go-ethereum/metrics"
     7  )
     8  
     9  func readMeter(namespace, name string, i interface{}) (string, map[string]interface{}) {
    10  	switch metric := i.(type) {
    11  	case metrics.Counter:
    12  		measurement := fmt.Sprintf("%s%s.count", namespace, name)
    13  		fields := map[string]interface{}{
    14  			"value": metric.Snapshot().Count(),
    15  		}
    16  		return measurement, fields
    17  	case metrics.CounterFloat64:
    18  		measurement := fmt.Sprintf("%s%s.count", namespace, name)
    19  		fields := map[string]interface{}{
    20  			"value": metric.Snapshot().Count(),
    21  		}
    22  		return measurement, fields
    23  	case metrics.Gauge:
    24  		measurement := fmt.Sprintf("%s%s.gauge", namespace, name)
    25  		fields := map[string]interface{}{
    26  			"value": metric.Snapshot().Value(),
    27  		}
    28  		return measurement, fields
    29  	case metrics.GaugeFloat64:
    30  		measurement := fmt.Sprintf("%s%s.gauge", namespace, name)
    31  		fields := map[string]interface{}{
    32  			"value": metric.Snapshot().Value(),
    33  		}
    34  		return measurement, fields
    35  	case metrics.GaugeInfo:
    36  		ms := metric.Snapshot()
    37  		measurement := fmt.Sprintf("%s%s.gauge", namespace, name)
    38  		fields := map[string]interface{}{
    39  			"value": ms.Value().String(),
    40  		}
    41  		return measurement, fields
    42  	case metrics.Histogram:
    43  		ms := metric.Snapshot()
    44  		if ms.Count() <= 0 {
    45  			break
    46  		}
    47  		ps := ms.Percentiles([]float64{0.25, 0.5, 0.75, 0.95, 0.99, 0.999, 0.9999})
    48  		measurement := fmt.Sprintf("%s%s.histogram", namespace, name)
    49  		fields := map[string]interface{}{
    50  			"count":    ms.Count(),
    51  			"max":      ms.Max(),
    52  			"mean":     ms.Mean(),
    53  			"min":      ms.Min(),
    54  			"stddev":   ms.StdDev(),
    55  			"variance": ms.Variance(),
    56  			"p25":      ps[0],
    57  			"p50":      ps[1],
    58  			"p75":      ps[2],
    59  			"p95":      ps[3],
    60  			"p99":      ps[4],
    61  			"p999":     ps[5],
    62  			"p9999":    ps[6],
    63  		}
    64  		return measurement, fields
    65  	case metrics.Meter:
    66  		ms := metric.Snapshot()
    67  		measurement := fmt.Sprintf("%s%s.meter", namespace, name)
    68  		fields := map[string]interface{}{
    69  			"count": ms.Count(),
    70  			"m1":    ms.Rate1(),
    71  			"m5":    ms.Rate5(),
    72  			"m15":   ms.Rate15(),
    73  			"mean":  ms.RateMean(),
    74  		}
    75  		return measurement, fields
    76  	case metrics.Timer:
    77  		ms := metric.Snapshot()
    78  		ps := ms.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999, 0.9999})
    79  
    80  		measurement := fmt.Sprintf("%s%s.timer", namespace, name)
    81  		fields := map[string]interface{}{
    82  			"count":    ms.Count(),
    83  			"max":      ms.Max(),
    84  			"mean":     ms.Mean(),
    85  			"min":      ms.Min(),
    86  			"stddev":   ms.StdDev(),
    87  			"variance": ms.Variance(),
    88  			"p50":      ps[0],
    89  			"p75":      ps[1],
    90  			"p95":      ps[2],
    91  			"p99":      ps[3],
    92  			"p999":     ps[4],
    93  			"p9999":    ps[5],
    94  			"m1":       ms.Rate1(),
    95  			"m5":       ms.Rate5(),
    96  			"m15":      ms.Rate15(),
    97  			"meanrate": ms.RateMean(),
    98  		}
    99  		return measurement, fields
   100  	case metrics.ResettingTimer:
   101  		ms := metric.Snapshot()
   102  		if ms.Count() == 0 {
   103  			break
   104  		}
   105  		ps := ms.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999, 0.9999})
   106  		measurement := fmt.Sprintf("%s%s.timer", namespace, name)
   107  		fields := map[string]interface{}{
   108  			"count": ms.Count(),
   109  			"max":   ms.Max(),
   110  			"mean":  ms.Mean(),
   111  			"min":   ms.Min(),
   112  			"p50":   ps[0],
   113  			"p75":   ps[1],
   114  			"p95":   ps[2],
   115  			"p99":   ps[3],
   116  			"p999":  ps[4],
   117  			"p9999": ps[5],
   118  		}
   119  		return measurement, fields
   120  	}
   121  	return "", nil
   122  }