25 lines
		
	
	
		
			716 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			25 lines
		
	
	
		
			716 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package metrics
 | 
						|
 | 
						|
// ResettingSample converts an ordinary sample into one that resets whenever its
 | 
						|
// snapshot is retrieved. This will break for multi-monitor systems, but when only
 | 
						|
// a single metric is being pushed out, this ensure that low-frequency events don't
 | 
						|
// skew th charts indefinitely.
 | 
						|
func ResettingSample(sample Sample) Sample {
 | 
						|
	return &resettingSample{
 | 
						|
		Sample: sample,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// resettingSample is a simple wrapper around a sample that resets it upon the
 | 
						|
// snapshot retrieval.
 | 
						|
type resettingSample struct {
 | 
						|
	Sample
 | 
						|
}
 | 
						|
 | 
						|
// Snapshot returns a read-only copy of the sample with the original reset.
 | 
						|
func (rs *resettingSample) Snapshot() Sample {
 | 
						|
	s := rs.Sample.Snapshot()
 | 
						|
	rs.Sample.Clear()
 | 
						|
	return s
 | 
						|
}
 |