mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 04:22:25 -05:00 
			
		
		
		
	
		
			
	
	
		
			95 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			95 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | // Copyright The OpenTelemetry Authors | ||
|  | // SPDX-License-Identifier: Apache-2.0 | ||
|  | 
 | ||
|  | package sdk | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"log/slog" | ||
|  | 	"os" | ||
|  | 	"strconv" | ||
|  | ) | ||
|  | 
 | ||
|  | // maxSpan are the span limits resolved during startup. | ||
|  | var maxSpan = newSpanLimits() | ||
|  | 
 | ||
|  | type spanLimits struct { | ||
|  | 	// Attrs is the number of allowed attributes for a span. | ||
|  | 	// | ||
|  | 	// This is resolved from the environment variable value for the | ||
|  | 	// OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT key if it exists. Otherwise, the | ||
|  | 	// environment variable value for OTEL_ATTRIBUTE_COUNT_LIMIT, or 128 if | ||
|  | 	// that is not set, is used. | ||
|  | 	Attrs int | ||
|  | 	// AttrValueLen is the maximum attribute value length allowed for a span. | ||
|  | 	// | ||
|  | 	// This is resolved from the environment variable value for the | ||
|  | 	// OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT key if it exists. Otherwise, the | ||
|  | 	// environment variable value for OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT, or -1 | ||
|  | 	// if that is not set, is used. | ||
|  | 	AttrValueLen int | ||
|  | 	// Events is the number of allowed events for a span. | ||
|  | 	// | ||
|  | 	// This is resolved from the environment variable value for the | ||
|  | 	// OTEL_SPAN_EVENT_COUNT_LIMIT key, or 128 is used if that is not set. | ||
|  | 	Events int | ||
|  | 	// EventAttrs is the number of allowed attributes for a span event. | ||
|  | 	// | ||
|  | 	// The is resolved from the environment variable value for the | ||
|  | 	// OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT key, or 128 is used if that is not set. | ||
|  | 	EventAttrs int | ||
|  | 	// Links is the number of allowed Links for a span. | ||
|  | 	// | ||
|  | 	// This is resolved from the environment variable value for the | ||
|  | 	// OTEL_SPAN_LINK_COUNT_LIMIT, or 128 is used if that is not set. | ||
|  | 	Links int | ||
|  | 	// LinkAttrs is the number of allowed attributes for a span link. | ||
|  | 	// | ||
|  | 	// This is resolved from the environment variable value for the | ||
|  | 	// OTEL_LINK_ATTRIBUTE_COUNT_LIMIT, or 128 is used if that is not set. | ||
|  | 	LinkAttrs int | ||
|  | } | ||
|  | 
 | ||
|  | func newSpanLimits() spanLimits { | ||
|  | 	return spanLimits{ | ||
|  | 		Attrs: firstEnv( | ||
|  | 			128, | ||
|  | 			"OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT", | ||
|  | 			"OTEL_ATTRIBUTE_COUNT_LIMIT", | ||
|  | 		), | ||
|  | 		AttrValueLen: firstEnv( | ||
|  | 			-1, // Unlimited. | ||
|  | 			"OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT", | ||
|  | 			"OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT", | ||
|  | 		), | ||
|  | 		Events:     firstEnv(128, "OTEL_SPAN_EVENT_COUNT_LIMIT"), | ||
|  | 		EventAttrs: firstEnv(128, "OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT"), | ||
|  | 		Links:      firstEnv(128, "OTEL_SPAN_LINK_COUNT_LIMIT"), | ||
|  | 		LinkAttrs:  firstEnv(128, "OTEL_LINK_ATTRIBUTE_COUNT_LIMIT"), | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | // firstEnv returns the parsed integer value of the first matching environment | ||
|  | // variable from keys. The defaultVal is returned if the value is not an | ||
|  | // integer or no match is found. | ||
|  | func firstEnv(defaultVal int, keys ...string) int { | ||
|  | 	for _, key := range keys { | ||
|  | 		strV := os.Getenv(key) | ||
|  | 		if strV == "" { | ||
|  | 			continue | ||
|  | 		} | ||
|  | 
 | ||
|  | 		v, err := strconv.Atoi(strV) | ||
|  | 		if err == nil { | ||
|  | 			return v | ||
|  | 		} | ||
|  | 		slog.Warn( | ||
|  | 			"invalid limit environment variable", | ||
|  | 			"error", err, | ||
|  | 			"key", key, | ||
|  | 			"value", strV, | ||
|  | 		) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	return defaultVal | ||
|  | } |