mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
	
	
		
			81 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			81 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
|  | package sql | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"testing" | ||
|  | 
 | ||
|  | 	"github.com/stretchr/testify/require" | ||
|  | ) | ||
|  | 
 | ||
|  | func TestAllowQuery(t *testing.T) { | ||
|  | 	testCases := []struct { | ||
|  | 		name string | ||
|  | 		q    string | ||
|  | 		err  error | ||
|  | 	}{ | ||
|  | 		{ | ||
|  | 			name: "a big catch all for now", | ||
|  | 			q:    example_metrics_query, | ||
|  | 			err:  nil, | ||
|  | 		}, | ||
|  | 	} | ||
|  | 	for _, tc := range testCases { | ||
|  | 		t.Run(tc.name, func(t *testing.T) { | ||
|  | 			_, err := AllowQuery(tc.q) | ||
|  | 			if tc.err != nil { | ||
|  | 				require.Error(t, err) | ||
|  | 			} else { | ||
|  | 				require.NoError(t, err) | ||
|  | 			} | ||
|  | 		}) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | var example_metrics_query = `WITH | ||
|  |   metrics_this_month AS ( | ||
|  |     SELECT | ||
|  |       Month, | ||
|  |       namespace, | ||
|  |       sum(BillableSeries) AS billable_series | ||
|  |     FROM metrics | ||
|  |     WHERE | ||
|  |       Month = "2024-11" | ||
|  |     GROUP BY  | ||
|  |       Month, | ||
|  |       namespace | ||
|  |     ORDER BY billable_series DESC | ||
|  |   ), | ||
|  |   total_metrics AS ( | ||
|  |     SELECT SUM(billable_series) AS metrics_billable_series_total | ||
|  |     FROM metrics_this_month | ||
|  |   ), | ||
|  |   total_traces AS ( | ||
|  |     -- "usage" is a reserved keyword in MySQL. Quote it with backticks. | ||
|  |     SELECT SUM(value) AS traces_usage_total | ||
|  |     FROM traces | ||
|  |   ), | ||
|  |   usage_by_team AS ( | ||
|  |     SELECT | ||
|  |       COALESCE(teams.team, 'unaccounted') AS team, | ||
|  |       1 + 0 AS team_count, | ||
|  |       -- Metrics | ||
|  |       SUM(COALESCE(metrics_this_month.billable_series, 0)) AS metrics_billable_series, | ||
|  |       -- Traces | ||
|  |       SUM(COALESCE(traces.value, 0)) AS traces_usage | ||
|  |     -- FROM teams | ||
|  |     -- FULL OUTER JOIN metrics_this_month | ||
|  |     FROM metrics_this_month | ||
|  |     FULL OUTER JOIN teams | ||
|  |       ON teams.namespace = metrics_this_month.namespace | ||
|  |     FULL OUTER JOIN traces | ||
|  |       ON teams.namespace = traces.namespace | ||
|  |     GROUP BY | ||
|  |       -- COALESCE(teams.team, 'unaccounted') | ||
|  |       teams.team | ||
|  |     ORDER BY metrics_billable_series DESC | ||
|  |   ) | ||
|  | 
 | ||
|  | SELECT * | ||
|  | FROM usage_by_team | ||
|  | CROSS JOIN total_metrics | ||
|  | CROSS JOIN total_traces` |