MCPcopy
hub / github.com/grafana/tempo / RunValidationMode

Function RunValidationMode

cmd/tempo-vulture/validation.go:19–86  ·  view source on GitHub ↗
(
	ctx context.Context,
	vultureConfig vultureConfiguration,
	pushEndpoint string,
	logger *zap.Logger,
)

Source from the content-addressed store, hash-verified

17const TempoAccessPolicyToken = "TEMPO_ACCESS_POLICY_TOKEN"
18
19func RunValidationMode(
20 ctx context.Context,
21 vultureConfig vultureConfiguration,
22 pushEndpoint string,
23 logger *zap.Logger,
24) int {
25 accessPolicyToken := os.Getenv(TempoAccessPolicyToken)
26 if accessPolicyToken == "" {
27 logger.Error("TEMPO_ACCESS_POLICY_TOKEN environment variable is required in validation mode")
28 return 1
29 }
30
31 // Construct the basic auth token for HTTP headers
32 basicAuthToken := constructAuthToken(vultureConfig.tempoOrgID, accessPolicyToken)
33
34 httpClient := httpclient.New(vultureConfig.tempoQueryURL, vultureConfig.tempoOrgID)
35 httpClient.SetHeader("Authorization", fmt.Sprintf("Basic %s", basicAuthToken))
36
37 // Create authenticated jaeger client for writing traces
38 authJaegerClient, err := utilpkg.NewJaegerToOTLPExporterWithAuth(
39 pushEndpoint,
40 vultureConfig.tempoOrgID,
41 basicAuthToken,
42 vultureConfig.tempoPushTLS,
43 )
44 if err != nil {
45 logger.Error("failed to create authenticated OTLP exporter", zap.Error(err))
46 os.Exit(1)
47 }
48
49 logger.Info("Running in validation mode",
50 zap.Int("cycles", validationCycles),
51 zap.Duration("timeout", validationTimeout),
52 zap.String("org_id", vultureConfig.tempoOrgID),
53 )
54
55 validationConfig := ValidationConfig{
56 Cycles: validationCycles,
57 TempoOrgID: vultureConfig.tempoOrgID,
58 TempoBasicAuthToken: basicAuthToken,
59 WriteBackoffDuration: vultureConfig.tempoWriteBackoffDuration,
60 SearchBackoffDuration: vultureConfig.tempoSearchBackoffDuration,
61 }
62
63 service := NewValidationService(validationConfig, RealClock{}, logger)
64
65 result := service.RunValidation(ctx, authJaegerClient, httpClient, httpClient)
66
67 // Log detailed results before exiting
68 logger.Info("Validation completed",
69 zap.Int("total_traces", result.TotalTraces),
70 zap.Int("validations_passed", result.SuccessCount),
71 zap.Int("validations_failed", len(result.Failures)),
72 zap.Duration("duration", result.Duration),
73 )
74
75 // Optionally log each failure for debugging
76 for _, failure := range result.Failures {

Callers 1

mainFunction · 0.85

Calls 10

RunValidationMethod · 0.95
NewFunction · 0.92
constructAuthTokenFunction · 0.85
NewValidationServiceFunction · 0.85
IntMethod · 0.80
DurationMethod · 0.80
ExitCodeMethod · 0.80
ErrorMethod · 0.65
SetHeaderMethod · 0.45
StringMethod · 0.45

Tested by

no test coverage detected