Skip to content

Commit 12c7c1d

Browse files
committed
[Vega][Inspector] Request panel should show correct names for requests
1 parent 1cb177f commit 12c7c1d

File tree

5 files changed

+60
-31
lines changed

5 files changed

+60
-31
lines changed

src/plugins/vis_type_vega/public/data_model/ems_file_parser.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { i18n } from '@kbn/i18n';
2121
// @ts-ignore
2222
import { bypassExternalUrlCheck } from '../vega_view/vega_base_view';
2323
import { IServiceSettings, FileLayer } from '../../../maps_legacy/public';
24-
import { Data, UrlObject, Requests } from './types';
24+
import { Data, UrlObject, EmsQueryRequest } from './types';
2525

2626
/**
2727
* This class processes all Vega spec customizations,
@@ -53,6 +53,7 @@ export class EmsFileParser {
5353
})
5454
);
5555
}
56+
5657
// Optimization: so initiate remote request as early as we know that we will need it
5758
if (!this._fileLayersP) {
5859
this._fileLayersP = this._serviceSettings.getFileLayers();
@@ -65,7 +66,7 @@ export class EmsFileParser {
6566
* @param {object[]} requests each object is generated by parseUrl()
6667
* @returns {Promise<void>}
6768
*/
68-
async populateData(requests: Requests[]) {
69+
async populateData(requests: EmsQueryRequest[]) {
6970
if (requests.length === 0) return;
7071

7172
const layers = await this._fileLayersP;

src/plugins/vis_type_vega/public/data_model/es_query_parser.ts

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,16 @@ import { cloneDeep, isPlainObject } from 'lodash';
2323
import { SearchParams } from 'elasticsearch';
2424
import { TimeCache } from './time_cache';
2525
import { SearchAPI } from './search_api';
26-
import { Opts, Type, Data, UrlObject, Bool, Requests, Query, ContextVarsObject } from './types';
26+
import {
27+
Opts,
28+
Type,
29+
Data,
30+
UrlObject,
31+
Bool,
32+
EsQueryRequest,
33+
Query,
34+
ContextVarsObject,
35+
} from './types';
2736

2837
const TIMEFILTER: string = '%timefilter%';
2938
const AUTOINTERVAL: string = '%autointerval%';
@@ -36,6 +45,13 @@ const LEGACY_CONTEXT: string = '%context_query%';
3645
const CONTEXT: string = '%context%';
3746
const TIMEFIELD: string = '%timefield%';
3847

48+
const getRequestName = (request: EsQueryRequest, index: number) =>
49+
request.dataObject.name ||
50+
i18n.translate('visTypeVega.esQueryParser.unnamedRequest', {
51+
defaultMessage: 'Unnamed request #{index}',
52+
values: { index },
53+
});
54+
3955
/**
4056
* This class parses ES requests specified in the data.url objects.
4157
*/
@@ -196,14 +212,22 @@ export class EsQueryParser {
196212
* @param {object[]} requests each object is generated by parseUrl()
197213
* @returns {Promise<void>}
198214
*/
199-
async populateData(requests: Requests[]) {
200-
const esSearches = requests.map((r: Requests) => r.url);
215+
async populateData(requests: EsQueryRequest[]) {
216+
const esSearches = requests.map((r: EsQueryRequest, index: number) => ({
217+
...r.url,
218+
name: getRequestName(r, index),
219+
}));
220+
201221
const data$ = this._searchAPI.search(esSearches);
202222

203223
const results = await data$.toPromise();
204224

205-
results.forEach((data) => {
206-
requests[data.id].dataObject.values = data.rawResponse;
225+
results.forEach((data, index) => {
226+
const requestObject = requests.find((item) => getRequestName(item, index) === data.name);
227+
228+
if (requestObject) {
229+
requestObject.dataObject.values = data.rawResponse;
230+
}
207231
});
208232
}
209233

src/plugins/vis_type_vega/public/data_model/search_api.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,25 +48,22 @@ export class SearchAPI {
4848
const requestResponders: any = {};
4949

5050
return combineLatest(
51-
searchRequests.map((request, index) => {
52-
const requestId: number = index;
51+
searchRequests.map((request) => {
52+
const requestId = request.name;
5353
const params = getSearchParamsFromRequest(request, {
5454
uiSettings: this.dependencies.uiSettings,
5555
injectedMetadata: this.dependencies.injectedMetadata,
5656
});
5757

5858
if (this.inspectorAdapters) {
59-
requestResponders[requestId] = this.inspectorAdapters.requests.start(
60-
`#${requestId}`,
61-
request
62-
);
59+
requestResponders[requestId] = this.inspectorAdapters.requests.start(requestId, request);
6360
requestResponders[requestId].json(params.body);
6461
}
6562

6663
return search({ params }, { signal: this.abortSignal }).pipe(
6764
tap((data) => this.inspectSearchResult(data, requestResponders[requestId])),
6865
map((data) => ({
69-
id: requestId,
66+
name: requestId,
7067
rawResponse: data.rawResponse,
7168
}))
7269
);

src/plugins/vis_type_vega/public/data_model/types.ts

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919

2020
import { SearchResponse, SearchParams } from 'elasticsearch';
21+
2122
import { Filter } from 'src/plugins/data/public';
2223
import { DslQuery } from 'src/plugins/data/common';
2324
import { EsQueryParser } from './es_query_parser';
@@ -75,13 +76,10 @@ interface Projection {
7576
}
7677

7778
interface RequestDataObject {
79+
name?: string;
7880
values: SearchResponse<unknown>;
7981
}
8082

81-
interface RequestObject {
82-
url: string;
83-
}
84-
8583
type ContextVarsObjectProps =
8684
| string
8785
| {
@@ -176,22 +174,22 @@ export interface Data {
176174
source?: unknown;
177175
}
178176

179-
export interface CacheOptions {
180-
max: number;
181-
maxAge: number;
182-
}
183-
184177
export interface CacheBounds {
185178
min: number;
186179
max: number;
187180
}
188181

189-
export interface Requests extends RequestObject {
190-
obj: RequestObject;
182+
interface Requests<TUrlData = UrlObject, TRequestDataObject = RequestDataObject> {
183+
url: TUrlData;
191184
name: string;
192-
dataObject: RequestDataObject;
185+
dataObject: TRequestDataObject;
193186
}
194187

188+
export type EsQueryRequest = Requests;
189+
export type EmsQueryRequest = Requests & {
190+
obj: UrlObject;
191+
};
192+
195193
export interface ContextVarsObject {
196194
[index: string]: any;
197195
prop: ContextVarsObjectProps;

src/plugins/vis_type_vega/public/data_model/vega_parser.test.js

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ describe('VegaParser._resolveEsQueries', () => {
8787
let searchApiStub;
8888
const data = [
8989
{
90-
id: 0,
90+
name: 'requestId',
9191
rawResponse: [42],
9292
},
9393
];
@@ -119,16 +119,25 @@ describe('VegaParser._resolveEsQueries', () => {
119119
test('no data', check({}, {}));
120120
test('no data2', check({ a: 1 }, { a: 1 }));
121121
test('non-es data', check({ data: { a: 10 } }, { data: { a: 10 } }));
122-
test('es', check({ data: { url: { index: 'a' }, x: 1 } }, { data: { values: [42], x: 1 } }));
122+
test(
123+
'es',
124+
check(
125+
{ data: { name: 'requestId', url: { index: 'a' }, x: 1 } },
126+
{ data: { name: 'requestId', values: [42], x: 1 } }
127+
)
128+
);
123129
test(
124130
'es 2',
125-
check({ data: { url: { '%type%': 'elasticsearch', index: 'a' } } }, { data: { values: [42] } })
131+
check(
132+
{ data: { name: 'requestId', url: { '%type%': 'elasticsearch', index: 'a' } } },
133+
{ data: { name: 'requestId', values: [42] } }
134+
)
126135
);
127136
test(
128137
'es arr',
129138
check(
130-
{ arr: [{ data: { url: { index: 'a' }, x: 1 } }] },
131-
{ arr: [{ data: { values: [42], x: 1 } }] }
139+
{ arr: [{ data: { name: 'requestId', url: { index: 'a' }, x: 1 } }] },
140+
{ arr: [{ data: { name: 'requestId', values: [42], x: 1 } }] }
132141
)
133142
);
134143
test(

0 commit comments

Comments
 (0)