Skip to content

Commit

Permalink
Azure Monitor: Adapt empty Logs response (#56378)
Browse files Browse the repository at this point in the history
  • Loading branch information
andresmgot committed Oct 5, 2022
1 parent 7fd613e commit 8594e64
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 8 deletions.
Expand Up @@ -187,10 +187,11 @@ func (e *AzureLogAnalyticsDatasource) executeQuery(ctx context.Context, query *A
return dataResponseErrorWithExecuted(err)
}

frame, err := ResponseTableToFrame(t, logResponse)
frame, err := ResponseTableToFrame(t, query.RefID, query.Params.Get("query"))
if err != nil {
return dataResponseErrorWithExecuted(err)
}
appendErrorNotice(frame, logResponse.Error)

model, err := simplejson.NewJson(query.JSON)
if err != nil {
Expand Down Expand Up @@ -222,6 +223,12 @@ func (e *AzureLogAnalyticsDatasource) executeQuery(ctx context.Context, query *A
return dataResponse
}

func appendErrorNotice(frame *data.Frame, err *AzureLogAnalyticsAPIError) {
if err != nil {
frame.AppendNotices(apiErrorToNotice(err))
}
}

func (e *AzureLogAnalyticsDatasource) createRequest(ctx context.Context, dsInfo types.DatasourceInfo, url string) (*http.Request, error) {
req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
if err != nil {
Expand Down
15 changes: 10 additions & 5 deletions pkg/tsdb/azuremonitor/loganalytics/azure-response-table-frame.go
Expand Up @@ -43,7 +43,16 @@ func apiErrorToNotice(err *AzureLogAnalyticsAPIError) data.Notice {
}

// ResponseTableToFrame converts an AzureResponseTable to a data.Frame.
func ResponseTableToFrame(table *types.AzureResponseTable, res AzureLogAnalyticsResponse) (*data.Frame, error) {
func ResponseTableToFrame(table *types.AzureResponseTable, refID string, executedQuery string) (*data.Frame, error) {
if len(table.Rows) == 0 {
return &data.Frame{
RefID: refID,
Meta: &data.FrameMeta{
ExecutedQueryString: executedQuery,
},
}, nil
}

converterFrame, err := converterFrameForTable(table)
if err != nil {
return nil, err
Expand All @@ -57,10 +66,6 @@ func ResponseTableToFrame(table *types.AzureResponseTable, res AzureLogAnalytics
}
}

if res.Error != nil {
converterFrame.Frame.AppendNotices(apiErrorToNotice(res.Error))
}

return converterFrame.Frame, nil
}

Expand Down
Expand Up @@ -169,12 +169,25 @@ func TestLogTableToFrame(t *testing.T) {
return frame
},
},
{
name: "empty data response",
testFile: "loganalytics/11-log-analytics-response-empty.json",
expectedFrame: func() *data.Frame {
return &data.Frame{
RefID: "A",
Meta: &data.FrameMeta{
ExecutedQueryString: "query",
},
}
},
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
res := loadLogAnalyticsTestFileWithNumber(t, tt.testFile)
frame, err := ResponseTableToFrame(&res.Tables[0], res)
frame, err := ResponseTableToFrame(&res.Tables[0], "A", "query")
appendErrorNotice(frame, res.Error)
require.NoError(t, err)

if diff := cmp.Diff(tt.expectedFrame(), frame, data.FrameTestCompareOptions()...); diff != "" {
Expand Down
Expand Up @@ -188,7 +188,7 @@ func (e *AzureResourceGraphDatasource) executeQuery(ctx context.Context, query *
return dataResponseErrorWithExecuted(err)
}

frame, err := loganalytics.ResponseTableToFrame(&argResponse.Data, loganalytics.AzureLogAnalyticsResponse{})
frame, err := loganalytics.ResponseTableToFrame(&argResponse.Data, query.RefID, query.InterpolatedQuery)
if err != nil {
return dataResponseErrorWithExecuted(err)
}
Expand Down
@@ -0,0 +1,19 @@
{
"tables": [
{
"name": "PrimaryResult",
"columns": [
{
"name": "OperationName",
"type": "string"
},
{
"name": "Level",
"type": "string"
}
],
"rows": []
}
]
}

0 comments on commit 8594e64

Please sign in to comment.