mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Datasource/CloudWatch: Fix CloudWatch logs dataframe transformation (#24327)
* Datasource/CloudWatch: Fix CloudWatch logs dataframe transformation
This commit is contained in:
parent
3a2c844a8a
commit
dbac77d239
@ -238,8 +238,8 @@ export class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery, CloudWa
|
|||||||
async describeLogGroups(params: DescribeLogGroupsRequest): Promise<string[]> {
|
async describeLogGroups(params: DescribeLogGroupsRequest): Promise<string[]> {
|
||||||
const dataFrames = await this.makeLogActionRequest('DescribeLogGroups', [params]).toPromise();
|
const dataFrames = await this.makeLogActionRequest('DescribeLogGroups', [params]).toPromise();
|
||||||
|
|
||||||
const logGroupNames = dataFrames[0].fields[0].values.toArray();
|
const logGroupNames = dataFrames[0]?.fields[0]?.values.toArray() ?? [];
|
||||||
return logGroupNames && logGroupNames.length > 0 ? logGroupNames : [];
|
return logGroupNames;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getLogGroupFields(params: GetLogGroupFieldsRequest): Promise<GetLogGroupFieldsResponse> {
|
async getLogGroupFields(params: GetLogGroupFieldsRequest): Promise<GetLogGroupFieldsResponse> {
|
||||||
@ -495,14 +495,10 @@ export class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery, CloudWa
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const resultsToDataFrames = (val: any): DataFrame[] => {
|
const resultsToDataFrames = (val: any): DataFrame[] => toDataQueryResponse(val).data || [];
|
||||||
// NOTE: this function currently only processes binary results from:
|
|
||||||
// /api/ds/query -- it will retrun empty results most of the time
|
|
||||||
return toDataQueryResponse(val).data || [];
|
|
||||||
};
|
|
||||||
|
|
||||||
return from(this.awsRequest(TSDB_QUERY_ENDPOINT, requestParams)).pipe(
|
return from(this.awsRequest(TSDB_QUERY_ENDPOINT, requestParams)).pipe(
|
||||||
map(response => resultsToDataFrames(response)),
|
map(response => resultsToDataFrames({ data: response })),
|
||||||
catchError(err => {
|
catchError(err => {
|
||||||
if (err.data?.error) {
|
if (err.data?.error) {
|
||||||
throw err.data.error;
|
throw err.data.error;
|
||||||
|
@ -46,6 +46,65 @@ describe('CloudWatchDatasource', () => {
|
|||||||
jest.clearAllMocks();
|
jest.clearAllMocks();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('When getting log groups', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
datasourceRequestMock.mockImplementation(() =>
|
||||||
|
Promise.resolve({
|
||||||
|
data: {
|
||||||
|
results: {
|
||||||
|
A: {
|
||||||
|
dataframes: [
|
||||||
|
'QVJST1cxAAD/////GAEAABAAAAAAAAoADgAMAAsABAAKAAAAFAAAAAAAAAEDAAoADAAAAAgABAAKAAAACAAAAFgAAAACAAAAKAAAAAQAAAB8////CAAAAAwAAAAAAAAAAAAAAAUAAAByZWZJZAAAAJz///8IAAAAFAAAAAkAAABsb2dHcm91cHMAAAAEAAAAbmFtZQAAAAABAAAAGAAAAAAAEgAYABQAEwASAAwAAAAIAAQAEgAAABQAAABMAAAAUAAAAAAABQFMAAAAAQAAAAwAAAAIAAwACAAEAAgAAAAIAAAAGAAAAAwAAABsb2dHcm91cE5hbWUAAAAABAAAAG5hbWUAAAAAAAAAAAQABAAEAAAADAAAAGxvZ0dyb3VwTmFtZQAAAAD/////mAAAABQAAAAAAAAADAAWABQAEwAMAAQADAAAAGAGAAAAAAAAFAAAAAAAAAMDAAoAGAAMAAgABAAKAAAAFAAAAEgAAAAhAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAAAAAACIAAAAAAAAANgFAAAAAAAAAAAAAAEAAAAhAAAAAAAAAAAAAAAAAAAAAAAAADIAAABiAAAAkQAAALwAAADuAAAAHwEAAFQBAACHAQAAtQEAAOoBAAAbAgAASgIAAHQCAAClAgAA1QIAABADAABEAwAAdgMAAKMDAADXAwAACQQAAEAEAAB3BAAAlwQAAK0EAAC8BAAA+wQAAEIFAABhBQAAeAUAAJIFAAC0BQAA1gUAAC9hd3MvY29udGFpbmVyaW5zaWdodHMvZGV2MzAzLXdvcmtzaG9wL2FwcGxpY2F0aW9uL2F3cy9jb250YWluZXJpbnNpZ2h0cy9kZXYzMDMtd29ya3Nob3AvZGF0YXBsYW5lL2F3cy9jb250YWluZXJpbnNpZ2h0cy9kZXYzMDMtd29ya3Nob3AvZmxvd2xvZ3MvYXdzL2NvbnRhaW5lcmluc2lnaHRzL2RldjMwMy13b3Jrc2hvcC9ob3N0L2F3cy9jb250YWluZXJpbnNpZ2h0cy9kZXYzMDMtd29ya3Nob3AvcGVyZm9ybWFuY2UvYXdzL2NvbnRhaW5lcmluc2lnaHRzL2RldjMwMy13b3Jrc2hvcC9wcm9tZXRoZXVzL2F3cy9jb250YWluZXJpbnNpZ2h0cy9lY29tbWVyY2Utc29ja3Nob3AvYXBwbGljYXRpb24vYXdzL2NvbnRhaW5lcmluc2lnaHRzL2Vjb21tZXJjZS1zb2Nrc2hvcC9kYXRhcGxhbmUvYXdzL2NvbnRhaW5lcmluc2lnaHRzL2Vjb21tZXJjZS1zb2Nrc2hvcC9ob3N0L2F3cy9jb250YWluZXJpbnNpZ2h0cy9lY29tbWVyY2Utc29ja3Nob3AvcGVyZm9ybWFuY2UvYXdzL2NvbnRhaW5lcmluc2lnaHRzL3dhdGNoZGVtby1wZXJmL2FwcGxpY2F0aW9uL2F3cy9jb250YWluZXJpbnNpZ2h0cy93YXRjaGRlbW8tcGVyZi9kYXRhcGxhbmUvYXdzL2NvbnRhaW5lcmluc2lnaHRzL3dhdGNoZGVtby1wZXJmL2hvc3QvYXdzL2NvbnRhaW5lcmluc2lnaHRzL3dhdGNoZGVtby1wZXJmL3BlcmZvcm1hbmNlL2F3cy9jb250YWluZXJpbnNpZ2h0cy93YXRjaGRlbW8tcGVyZi9wcm9tZXRoZXVzL2F3cy9jb250YWluZXJpbnNpZ2h0cy93YXRjaGRlbW8tcHJvZC11cy1lYXN0LTEvcGVyZm9ybWFuY2UvYXdzL2NvbnRhaW5lcmluc2lnaHRzL3dhdGNoZGVtby1zdGFnaW5nL2FwcGxpY2F0aW9uL2F3cy9jb250YWluZXJpbnNpZ2h0cy93YXRjaGRlbW8tc3RhZ2luZy9kYXRhcGxhbmUvYXdzL2NvbnRhaW5lcmluc2lnaHRzL3dhdGNoZGVtby1zdGFnaW5nL2hvc3QvYXdzL2NvbnRhaW5lcmluc2lnaHRzL3dhdGNoZGVtby1zdGFnaW5nL3BlcmZvcm1hbmNlL2F3cy9lY3MvY29udGFpbmVyaW5zaWdodHMvYnVnYmFzaC1lYzIvcGVyZm9ybWFuY2UvYXdzL2Vjcy9jb250YWluZXJpbnNpZ2h0cy9lY3MtZGVtb3dvcmtzaG9wL3BlcmZvcm1hbmNlL2F3cy9lY3MvY29udGFpbmVyaW5zaWdodHMvZWNzLXdvcmtzaG9wLWRldi9wZXJmb3JtYW5jZS9hd3MvZWtzL2RldjMwMy13b3Jrc2hvcC9jbHVzdGVyL2F3cy9ldmVudHMvY2xvdWR0cmFpbC9hd3MvZXZlbnRzL2Vjcy9hd3MvbGFtYmRhL2N3c3luLW15Y2FuYXJ5LWZhYzk3ZGVkLWYxMzQtNDk5YS05ZDcxLTRjM2JlMWY2MzE4Mi9hd3MvbGFtYmRhL2N3c3luLXdhdGNoLWxpbmtjaGVja3MtZWY3ZWYyNzMtNWRhMi00NjYzLWFmNTQtZDJmNTJkNTViMDYwL2Vjcy9lY3MtY3dhZ2VudC1kYWVtb24tc2VydmljZS9lY3MvZWNzLWRlbW8tbGltaXRUYXNrQ2xvdWRUcmFpbC9EZWZhdWx0TG9nR3JvdXBjb250YWluZXItaW5zaWdodHMtcHJvbWV0aGV1cy1iZXRhY29udGFpbmVyLWluc2lnaHRzLXByb21ldGhldXMtZGVtbwAAEAAAAAwAFAASAAwACAAEAAwAAAAQAAAALAAAADwAAAAAAAMAAQAAACgBAAAAAAAAoAAAAAAAAABgBgAAAAAAAAAAAAAAAAAAAAAAAAAACgAMAAAACAAEAAoAAAAIAAAAWAAAAAIAAAAoAAAABAAAAHz///8IAAAADAAAAAAAAAAAAAAABQAAAHJlZklkAAAAnP///wgAAAAUAAAACQAAAGxvZ0dyb3VwcwAAAAQAAABuYW1lAAAAAAEAAAAYAAAAAAASABgAFAATABIADAAAAAgABAASAAAAFAAAAEwAAABQAAAAAAAFAUwAAAABAAAADAAAAAgADAAIAAQACAAAAAgAAAAYAAAADAAAAGxvZ0dyb3VwTmFtZQAAAAAEAAAAbmFtZQAAAAAAAAAABAAEAAQAAAAMAAAAbG9nR3JvdXBOYW1lAAAAAEgBAABBUlJPVzE=',
|
||||||
|
],
|
||||||
|
refId: 'A',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return log groups as an array of strings', async () => {
|
||||||
|
const logGroups = await ctx.ds.describeLogGroups();
|
||||||
|
const expectedLogGroups = [
|
||||||
|
'/aws/containerinsights/dev303-workshop/application',
|
||||||
|
'/aws/containerinsights/dev303-workshop/dataplane',
|
||||||
|
'/aws/containerinsights/dev303-workshop/flowlogs',
|
||||||
|
'/aws/containerinsights/dev303-workshop/host',
|
||||||
|
'/aws/containerinsights/dev303-workshop/performance',
|
||||||
|
'/aws/containerinsights/dev303-workshop/prometheus',
|
||||||
|
'/aws/containerinsights/ecommerce-sockshop/application',
|
||||||
|
'/aws/containerinsights/ecommerce-sockshop/dataplane',
|
||||||
|
'/aws/containerinsights/ecommerce-sockshop/host',
|
||||||
|
'/aws/containerinsights/ecommerce-sockshop/performance',
|
||||||
|
'/aws/containerinsights/watchdemo-perf/application',
|
||||||
|
'/aws/containerinsights/watchdemo-perf/dataplane',
|
||||||
|
'/aws/containerinsights/watchdemo-perf/host',
|
||||||
|
'/aws/containerinsights/watchdemo-perf/performance',
|
||||||
|
'/aws/containerinsights/watchdemo-perf/prometheus',
|
||||||
|
'/aws/containerinsights/watchdemo-prod-us-east-1/performance',
|
||||||
|
'/aws/containerinsights/watchdemo-staging/application',
|
||||||
|
'/aws/containerinsights/watchdemo-staging/dataplane',
|
||||||
|
'/aws/containerinsights/watchdemo-staging/host',
|
||||||
|
'/aws/containerinsights/watchdemo-staging/performance',
|
||||||
|
'/aws/ecs/containerinsights/bugbash-ec2/performance',
|
||||||
|
'/aws/ecs/containerinsights/ecs-demoworkshop/performance',
|
||||||
|
'/aws/ecs/containerinsights/ecs-workshop-dev/performance',
|
||||||
|
'/aws/eks/dev303-workshop/cluster',
|
||||||
|
'/aws/events/cloudtrail',
|
||||||
|
'/aws/events/ecs',
|
||||||
|
'/aws/lambda/cwsyn-mycanary-fac97ded-f134-499a-9d71-4c3be1f63182',
|
||||||
|
'/aws/lambda/cwsyn-watch-linkchecks-ef7ef273-5da2-4663-af54-d2f52d55b060',
|
||||||
|
'/ecs/ecs-cwagent-daemon-service',
|
||||||
|
'/ecs/ecs-demo-limitTask',
|
||||||
|
'CloudTrail/DefaultLogGroup',
|
||||||
|
'container-insights-prometheus-beta',
|
||||||
|
'container-insights-prometheus-demo',
|
||||||
|
];
|
||||||
|
expect(logGroups).toEqual(expectedLogGroups);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('When performing CloudWatch metrics query', () => {
|
describe('When performing CloudWatch metrics query', () => {
|
||||||
const query = {
|
const query = {
|
||||||
range: defaultTimeRange,
|
range: defaultTimeRange,
|
||||||
@ -741,7 +800,6 @@ describe('CloudWatchDatasource', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should call __GetDimensions and return result', () => {
|
it('should call __GetDimensions and return result', () => {
|
||||||
console.log({ a: scenario.requestResponse.results });
|
|
||||||
expect(scenario.result[0].text).toBe('InstanceId');
|
expect(scenario.result[0].text).toBe('InstanceId');
|
||||||
expect(scenario.request.queries[0].type).toBe('metricFindQuery');
|
expect(scenario.request.queries[0].type).toBe('metricFindQuery');
|
||||||
expect(scenario.request.queries[0].subtype).toBe('dimension_keys');
|
expect(scenario.request.queries[0].subtype).toBe('dimension_keys');
|
||||||
|
Loading…
Reference in New Issue
Block a user