github.com/grafana/pyroscope@v1.18.0/pkg/validation/usage_groups_bench_test.go (about)

     1  package validation
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  
     8  	"github.com/grafana/pyroscope/pkg/model"
     9  	"github.com/grafana/pyroscope/pkg/util"
    10  )
    11  
    12  func BenchmarkUsageGroups_Regular(b *testing.B) {
    13  	config, err := NewUsageGroupConfig(map[string]string{
    14  		"app/frontend":  `{service_name=~"(.*)"}`,
    15  		"app/backend":   `{team=~"(.*)"}`,
    16  		"app/database":  `{environment=~"(.*)"}`,
    17  		"team/platform": `{service_name=~"(.*)", team=~"(.*)"}`,
    18  		"team/product":  `{service_name=~"(.*)", team=~"(.*)", environment=~"(.*)"}`,
    19  	})
    20  	require.NoError(b, err)
    21  
    22  	l := model.Labels{
    23  		{Name: "service_name", Value: "frontend"},
    24  		{Name: "team", Value: "platform"},
    25  		{Name: "environment", Value: "production"},
    26  	}
    27  	evaluator := NewUsageGroupEvaluator(util.Logger)
    28  
    29  	b.ResetTimer()
    30  	for i := 0; i < b.N; i++ {
    31  		_ = evaluator.GetMatch("tenant1", config, l)
    32  	}
    33  }
    34  
    35  func BenchmarkUsageGroups_Dynamic(b *testing.B) {
    36  	config, err := NewUsageGroupConfig(map[string]string{
    37  		"app/${labels.service_name}":                                          `{service_name=~".*"}`,
    38  		"team/${labels.team}":                                                 `{team=~".*"}`,
    39  		"env/${labels.environment}":                                           `{environment=~".*"}`,
    40  		"${labels.service_name}/${labels.team}":                               `{service_name=~".*", team=~".*"}`,
    41  		"complex/${labels.service_name}-${labels.team}-${labels.environment}": `{service_name=~".*", team=~".*", environment=~".*"}`,
    42  	})
    43  	require.NoError(b, err)
    44  
    45  	l := model.Labels{
    46  		{Name: "service_name", Value: "frontend"},
    47  		{Name: "team", Value: "platform"},
    48  		{Name: "environment", Value: "production"},
    49  	}
    50  	evaluator := NewUsageGroupEvaluator(util.Logger)
    51  
    52  	b.ResetTimer()
    53  	for i := 0; i < b.N; i++ {
    54  		_ = evaluator.GetMatch("tenant1", config, l)
    55  	}
    56  }
    57  
    58  func BenchmarkUsageGroups_ComplexRegex(b *testing.B) {
    59  	config, err := NewUsageGroupConfig(map[string]string{
    60  		"complex/${labels.service_name}":      `{service_name=~"[a-zA-Z]+-[0-9]+"}`,
    61  		"very-complex/${labels.service_name}": `{service_name=~"[a-zA-Z]+-[0-9]+\\.[a-z]{2,4}"}`,
    62  	})
    63  	require.NoError(b, err)
    64  
    65  	l := model.Labels{
    66  		{Name: "service_name", Value: "frontend-123.prod"},
    67  	}
    68  	evaluator := NewUsageGroupEvaluator(util.Logger)
    69  
    70  	b.ResetTimer()
    71  	for i := 0; i < b.N; i++ {
    72  		_ = evaluator.GetMatch("tenant1", config, l)
    73  	}
    74  }