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