func (c *CapturingStatsReporter) ReportGauge(
	name string,
	tags map[string]string,
	value float64,
) {
	c.gauges = append(c.gauges, CapturedGauge{name, tags, value})
}
ReportGauge reports the gauges
package metrics
import (
	"io"
	"time"
	"github.com/uber-go/tally"
)
func NewMetricsScope(isReplay *bool) (tally.Scope, io.Closer, *CapturingStatsReporter) {
	reporter := &CapturingStatsReporter{}
	opts := tally.ScopeOptions{Reporter: reporter}
	scope, closer := tally.NewRootScope(opts, time.Second)
	return WrapScope(isReplay, scope, &realClock{}), closer, reporter
}
func NewTaggedMetricsScope() (*TaggedScope, io.Closer, *CapturingStatsReporter) {
	isReplay := false
	scope, closer, reporter := NewMetricsScope(&isReplay)
	return &TaggedScope{Scope: scope}, closer, reporter
}
type realClock struct {
}
func (c *realClock) Now() time.Time {
	return time.Now()
}
type CapturingStatsReporter struct {
	counts                   []CapturedCount
	gauges                   []CapturedGauge
	timers                   []CapturedTimer
	histogramValueSamples    []CapturedHistogramValueSamples
	histogramDurationSamples []CapturedHistogramDurationSamples
	capabilities             int
	flush                    int
}
func (c *CapturingStatsReporter) HistogramDurationSamples() []CapturedHistogramDurationSamples {
	return c.histogramDurationSamples
}
func (c *CapturingStatsReporter) HistogramValueSamples() []CapturedHistogramValueSamples {
	return c.histogramValueSamples
}
func (c *CapturingStatsReporter) Timers() []CapturedTimer {
	return c.timers
}
func (c *CapturingStatsReporter) Gauges() []CapturedGauge {
	return c.gauges
}
func (c *CapturingStatsReporter) Counts() []CapturedCount {
	return c.counts
}
type CapturedCount struct {
	name  string
	tags  map[string]string
	value int64
}
func (c *CapturedCount) Value() int64 {
	return c.value
}
func (c *CapturedCount) Tags() map[string]string {
	return c.tags
}
func (c *CapturedCount) Name() string {
	return c.name
}
type CapturedGauge struct {
	name  string
	tags  map[string]string
	value float64
}
func (c *CapturedGauge) Value() float64 {
	return c.value
}
func (c *CapturedGauge) Tags() map[string]string {
	return c.tags
}
func (c *CapturedGauge) Name() string {
	return c.name
}
type CapturedTimer struct {
	name  string
	tags  map[string]string
	value time.Duration
}
func (c *CapturedTimer) Value() time.Duration {
	return c.value
}
func (c *CapturedTimer) Tags() map[string]string {
	return c.tags
}
func (c *CapturedTimer) Name() string {
	return c.name
}
type CapturedHistogramValueSamples struct {
	name             string
	tags             map[string]string
	bucketLowerBound float64
	bucketUpperBound float64
	samples          int64
}
type CapturedHistogramDurationSamples struct {
	name             string
	tags             map[string]string
	bucketLowerBound time.Duration
	bucketUpperBound time.Duration
	samples          int64
}
func (c *CapturingStatsReporter) ReportCounter(
	name string,
	tags map[string]string,
	value int64,
) {
	c.counts = append(c.counts, CapturedCount{name, tags, value})
}