mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
	
	
		
			34 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			34 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
| 
								 | 
							
								package utils
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"context"
							 | 
						||
| 
								 | 
							
									"encoding/json"
							 | 
						||
| 
								 | 
							
									"fmt"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									"github.com/grafana/grafana-plugin-sdk-go/backend"
							 | 
						||
| 
								 | 
							
									"go.opentelemetry.io/otel/attribute"
							 | 
						||
| 
								 | 
							
									"go.opentelemetry.io/otel/trace"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// GetJsonData just gets the json in easier to work with type. It's used on multiple places which isn't super effective
							 | 
						||
| 
								 | 
							
								// but only when creating a client which should not happen often anyway.
							 | 
						||
| 
								 | 
							
								func GetJsonData(settings backend.DataSourceInstanceSettings) (map[string]any, error) {
							 | 
						||
| 
								 | 
							
									var jsonData map[string]any
							 | 
						||
| 
								 | 
							
									err := json.Unmarshal(settings.JSONData, &jsonData)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, fmt.Errorf("error unmarshalling JSONData: %w", err)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return jsonData, nil
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// StartTrace setups a trace but does not panic if tracer is nil which helps with testing
							 | 
						||
| 
								 | 
							
								func StartTrace(ctx context.Context, tracer trace.Tracer, name string, attributes ...attribute.KeyValue) (context.Context, func()) {
							 | 
						||
| 
								 | 
							
									if tracer == nil {
							 | 
						||
| 
								 | 
							
										return ctx, func() {}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									ctx, span := tracer.Start(ctx, name, trace.WithAttributes(attributes...))
							 | 
						||
| 
								 | 
							
									return ctx, func() {
							 | 
						||
| 
								 | 
							
										span.End()
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |