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
 | |
| }
 |