mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
package annotation
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/json"
 | 
						|
	"fmt"
 | 
						|
)
 | 
						|
 | 
						|
type annotationWithSamplingBody struct {
 | 
						|
	Body profileSampledAnnotation `json:"body"`
 | 
						|
}
 | 
						|
 | 
						|
type profileSampledAnnotation struct {
 | 
						|
	Source *samplingSource `json:"source"`
 | 
						|
}
 | 
						|
 | 
						|
type samplingSource struct {
 | 
						|
	UsageGroup  string  `json:"usageGroup"`
 | 
						|
	Probability float64 `json:"probability"`
 | 
						|
}
 | 
						|
 | 
						|
func convertSamplingAnnotation(raw string, timestamp int64) (*processedProfileAnnotation, error) {
 | 
						|
	var profileAnnotation annotationWithSamplingBody
 | 
						|
	err := json.Unmarshal([]byte(raw), &profileAnnotation)
 | 
						|
	if err != nil {
 | 
						|
		return nil, fmt.Errorf("error parsing annotation data: %w", err)
 | 
						|
	}
 | 
						|
	if profileAnnotation.Body.Source == nil {
 | 
						|
		return nil, fmt.Errorf("error parsing sampling annotation data: source is nil")
 | 
						|
	}
 | 
						|
 | 
						|
	samplingInfo := profileAnnotation.Body.Source
 | 
						|
	if samplingInfo.Probability == 1.0 {
 | 
						|
		return nil, nil
 | 
						|
	}
 | 
						|
 | 
						|
	reductionPercentage := (1 - samplingInfo.Probability) * 100
 | 
						|
	id := fmt.Sprintf("%s-%.0f", samplingInfo.UsageGroup, reductionPercentage)
 | 
						|
	text := fmt.Sprintf("Profile volume reduced by %.2f%% for this service.", reductionPercentage)
 | 
						|
 | 
						|
	return &processedProfileAnnotation{
 | 
						|
		id:       id,
 | 
						|
		text:     text,
 | 
						|
		time:     timestamp,
 | 
						|
		timeEnd:  timestamp,
 | 
						|
		isRegion: true,
 | 
						|
	}, nil
 | 
						|
}
 |