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`
 |