mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Add basic logs enabled check (#92324)
This commit is contained in:
parent
951f676ac8
commit
0049e4f997
@ -169,6 +169,7 @@ func buildLogAnalyticsQuery(query backend.DataQuery, dsInfo types.DatasourceInfo
|
||||
timeColumn := ""
|
||||
azureLogAnalyticsTarget := queryJSONModel.AzureLogAnalytics
|
||||
basicLogsQuery := false
|
||||
basicLogsEnabled := false
|
||||
|
||||
resultFormat := ParseResultFormat(azureLogAnalyticsTarget.ResultFormat, dataquery.AzureQueryTypeAzureLogAnalytics)
|
||||
|
||||
@ -180,9 +181,12 @@ func buildLogAnalyticsQuery(query backend.DataQuery, dsInfo types.DatasourceInfo
|
||||
resources, resourceOrWorkspace := retrieveResources(azureLogAnalyticsTarget)
|
||||
appInsightsQuery = appInsightsRegExp.Match([]byte(resourceOrWorkspace))
|
||||
|
||||
if value, ok := dsInfo.JSONData["basicLogsEnabled"].(bool); ok {
|
||||
basicLogsEnabled = value
|
||||
}
|
||||
|
||||
if basicLogsQueryFlag {
|
||||
if meetsBasicLogsCriteria, meetsBasicLogsCriteriaErr := meetsBasicLogsCriteria(resources, fromAlert); meetsBasicLogsCriteriaErr != nil {
|
||||
// This error is a downstream error
|
||||
if meetsBasicLogsCriteria, meetsBasicLogsCriteriaErr := meetsBasicLogsCriteria(resources, fromAlert, basicLogsEnabled); meetsBasicLogsCriteriaErr != nil {
|
||||
return nil, meetsBasicLogsCriteriaErr
|
||||
} else {
|
||||
basicLogsQuery = meetsBasicLogsCriteria
|
||||
|
@ -83,15 +83,6 @@ func TestBuildLogAnalyticsQuery(t *testing.T) {
|
||||
t.Errorf("failed to create fake client")
|
||||
}
|
||||
|
||||
dsInfo := types.DatasourceInfo{
|
||||
Services: map[string]types.DatasourceService{
|
||||
"Azure Monitor": {URL: svr.URL, HTTPClient: client},
|
||||
},
|
||||
JSONData: map[string]any{
|
||||
"azureLogAnalyticsSameAs": false,
|
||||
},
|
||||
}
|
||||
|
||||
appInsightsRegExp, err := regexp.Compile("(?i)providers/microsoft.insights/components")
|
||||
if err != nil {
|
||||
t.Error("failed to compile reg: %w", err)
|
||||
@ -100,6 +91,7 @@ func TestBuildLogAnalyticsQuery(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
fromAlert bool
|
||||
basicLogsEnabled bool
|
||||
queryModel backend.DataQuery
|
||||
azureLogAnalyticsQuery *AzureLogAnalyticsQuery
|
||||
Err require.ErrorAssertionFunc
|
||||
@ -332,8 +324,9 @@ func TestBuildLogAnalyticsQuery(t *testing.T) {
|
||||
Err: require.NoError,
|
||||
},
|
||||
{
|
||||
name: "Basic Logs query",
|
||||
fromAlert: false,
|
||||
name: "Basic Logs query",
|
||||
fromAlert: false,
|
||||
basicLogsEnabled: true,
|
||||
queryModel: backend.DataQuery{
|
||||
JSON: []byte(fmt.Sprintf(`{
|
||||
"queryType": "Azure Log Analytics",
|
||||
@ -377,8 +370,9 @@ func TestBuildLogAnalyticsQuery(t *testing.T) {
|
||||
Err: require.NoError,
|
||||
},
|
||||
{
|
||||
name: "Basic Logs query with multiple resources",
|
||||
fromAlert: false,
|
||||
name: "Basic Logs query with multiple resources",
|
||||
fromAlert: false,
|
||||
basicLogsEnabled: true,
|
||||
queryModel: backend.DataQuery{
|
||||
JSON: []byte(fmt.Sprintf(`{
|
||||
"queryType": "Azure Log Analytics",
|
||||
@ -399,8 +393,9 @@ func TestBuildLogAnalyticsQuery(t *testing.T) {
|
||||
Err: require.Error,
|
||||
},
|
||||
{
|
||||
name: "Basic Logs query with non LA workspace resources",
|
||||
fromAlert: false,
|
||||
name: "Basic Logs query with non LA workspace resources",
|
||||
fromAlert: false,
|
||||
basicLogsEnabled: true,
|
||||
queryModel: backend.DataQuery{
|
||||
JSON: []byte(fmt.Sprintf(`{
|
||||
"queryType": "Azure Log Analytics",
|
||||
@ -421,8 +416,9 @@ func TestBuildLogAnalyticsQuery(t *testing.T) {
|
||||
Err: require.Error,
|
||||
},
|
||||
{
|
||||
name: "Basic Logs query from alerts",
|
||||
fromAlert: true,
|
||||
name: "Basic Logs query from alerts",
|
||||
fromAlert: true,
|
||||
basicLogsEnabled: true,
|
||||
queryModel: backend.DataQuery{
|
||||
JSON: []byte(fmt.Sprintf(`{
|
||||
"queryType": "Azure Log Analytics",
|
||||
@ -442,6 +438,30 @@ func TestBuildLogAnalyticsQuery(t *testing.T) {
|
||||
azureLogAnalyticsQuery: nil,
|
||||
Err: require.Error,
|
||||
},
|
||||
{
|
||||
name: "Basic Logs query fails if basicLogsEnabled is set to false",
|
||||
fromAlert: true,
|
||||
basicLogsEnabled: false,
|
||||
queryModel: backend.DataQuery{
|
||||
JSON: []byte(fmt.Sprintf(`{
|
||||
"queryType": "Azure Log Analytics",
|
||||
"azureLogAnalytics": {
|
||||
"resources": ["/subscriptions/test-sub/resourceGroups/test-rg/providers/Microsoft.Insights/components/r1"],
|
||||
"query": "Perf",
|
||||
"resultFormat": "%s",
|
||||
"dashboardTime": true,
|
||||
"timeColumn": "TimeGenerated",
|
||||
"basicLogsQuery": true
|
||||
}
|
||||
}`, dataquery.ResultFormatTimeSeries)),
|
||||
RefID: "A",
|
||||
TimeRange: timeRange,
|
||||
QueryType: string(dataquery.AzureQueryTypeAzureLogAnalytics),
|
||||
},
|
||||
azureLogAnalyticsQuery: nil,
|
||||
Err: require.Error,
|
||||
},
|
||||
|
||||
{
|
||||
name: "Detects App Insights resource queries",
|
||||
fromAlert: false,
|
||||
@ -524,6 +544,15 @@ func TestBuildLogAnalyticsQuery(t *testing.T) {
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
dsInfo := types.DatasourceInfo{
|
||||
Services: map[string]types.DatasourceService{
|
||||
"Azure Monitor": {URL: svr.URL, HTTPClient: client},
|
||||
},
|
||||
JSONData: map[string]any{
|
||||
"azureLogAnalyticsSameAs": false,
|
||||
"basicLogsEnabled": tt.basicLogsEnabled, // Use the value from the current test case
|
||||
},
|
||||
}
|
||||
query, err := buildLogAnalyticsQuery(tt.queryModel, dsInfo, appInsightsRegExp, tt.fromAlert)
|
||||
tt.Err(t, err)
|
||||
if diff := cmp.Diff(tt.azureLogAnalyticsQuery, query); diff != "" {
|
||||
|
@ -41,10 +41,11 @@ func AddConfigLinks(frame data.Frame, dl string, title *string) data.Frame {
|
||||
}
|
||||
|
||||
// Check whether a query should be handled as basic logs query
|
||||
// 2. resource selected is a workspace
|
||||
// 3. query is not an alerts query
|
||||
// 4. number of selected resources is exactly one
|
||||
func meetsBasicLogsCriteria(resources []string, fromAlert bool) (bool, error) {
|
||||
// 1. resource selected is a workspace
|
||||
// 2. query is not an alerts query
|
||||
// 3. number of selected resources is exactly one
|
||||
// 4. the ds toggle is set to true
|
||||
func meetsBasicLogsCriteria(resources []string, fromAlert bool, basicLogsEnabled bool) (bool, error) {
|
||||
if fromAlert {
|
||||
return false, errorsource.DownstreamError(fmt.Errorf("basic Logs queries cannot be used for alerts"), false)
|
||||
}
|
||||
@ -53,7 +54,11 @@ func meetsBasicLogsCriteria(resources []string, fromAlert bool) (bool, error) {
|
||||
}
|
||||
|
||||
if !strings.Contains(strings.ToLower(resources[0]), "microsoft.operationalinsights/workspaces") {
|
||||
return false, errorsource.DownstreamError(fmt.Errorf("basic Logs queries may only be run against Log Analytics workspaces"), false)
|
||||
return false, errorsource.DownstreamError(fmt.Errorf("basic logs queries may only be run against Log Analytics workspaces"), false)
|
||||
}
|
||||
|
||||
if !basicLogsEnabled {
|
||||
return false, errorsource.DownstreamError(fmt.Errorf("basic Logs queries are disabled for this data source"), false)
|
||||
}
|
||||
|
||||
return true, nil
|
||||
|
Loading…
Reference in New Issue
Block a user