Skip to content

Commit 85fbabb

Browse files
[TSVB] Fields dropdowns are not populated if one of the indices is missing (#77363)
* Fields dropdowns are not populated if one of the indices is missing * Fix tests and accept api changes * Add indexPatternsService to get default index pattern * Replace simple error message string with i18n translation * Remove unnecessary displaying error code Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
1 parent 30896ac commit 85fbabb

File tree

10 files changed

+44
-17
lines changed

10 files changed

+44
-17
lines changed

docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpatternsfetcher.getfieldsforwildcard.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,17 @@ Get a list of field objects for an index pattern that may contain wildcards
1212
getFieldsForWildcard(options: {
1313
pattern: string | string[];
1414
metaFields?: string[];
15+
fieldCapsOptions?: {
16+
allowNoIndices: boolean;
17+
};
1518
}): Promise<FieldDescriptor[]>;
1619
```
1720

1821
## Parameters
1922

2023
| Parameter | Type | Description |
2124
| --- | --- | --- |
22-
| options | <code>{</code><br/><code> pattern: string &#124; string[];</code><br/><code> metaFields?: string[];</code><br/><code> }</code> | |
25+
| options | <code>{</code><br/><code> pattern: string &#124; string[];</code><br/><code> metaFields?: string[];</code><br/><code> fieldCapsOptions?: {</code><br/><code> allowNoIndices: boolean;</code><br/><code> };</code><br/><code> }</code> | |
2326

2427
<b>Returns:</b>
2528

src/plugins/data/server/index_patterns/fetcher/index_patterns_fetcher.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,10 @@ export class IndexPatternsFetcher {
5555
async getFieldsForWildcard(options: {
5656
pattern: string | string[];
5757
metaFields?: string[];
58+
fieldCapsOptions?: { allowNoIndices: boolean };
5859
}): Promise<FieldDescriptor[]> {
59-
const { pattern, metaFields } = options;
60-
return await getFieldCapabilities(this._callDataCluster, pattern, metaFields);
60+
const { pattern, metaFields, fieldCapsOptions } = options;
61+
return await getFieldCapabilities(this._callDataCluster, pattern, metaFields, fieldCapsOptions);
6162
}
6263

6364
/**

src/plugins/data/server/index_patterns/fetcher/lib/es_api.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,20 @@ export async function callIndexAliasApi(
6969
*
7070
* @param {Function} callCluster bound function for accessing an es client
7171
* @param {Array<String>|String} indices
72+
* @param {Object} fieldCapsOptions
7273
* @return {Promise<FieldCapsResponse>}
7374
*/
74-
export async function callFieldCapsApi(callCluster: LegacyAPICaller, indices: string[] | string) {
75+
export async function callFieldCapsApi(
76+
callCluster: LegacyAPICaller,
77+
indices: string[] | string,
78+
fieldCapsOptions: { allowNoIndices: boolean } = { allowNoIndices: false }
79+
) {
7580
try {
7681
return (await callCluster('fieldCaps', {
7782
index: indices,
7883
fields: '*',
7984
ignoreUnavailable: true,
80-
allowNoIndices: false,
85+
...fieldCapsOptions,
8186
})) as FieldCapsResponse;
8287
} catch (error) {
8388
throw convertEsError(indices, error);

src/plugins/data/server/index_patterns/fetcher/lib/field_capabilities/field_capabilities.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ describe('index_patterns/field_capabilities/field_capabilities', () => {
6161

6262
await getFieldCapabilities(footballs[0], footballs[1]);
6363
sinon.assert.calledOnce(callFieldCapsApi);
64-
calledWithExactly(callFieldCapsApi, [footballs[0], footballs[1]]);
64+
calledWithExactly(callFieldCapsApi, [footballs[0], footballs[1], undefined]);
6565
});
6666
});
6767

src/plugins/data/server/index_patterns/fetcher/lib/field_capabilities/field_capabilities.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,20 @@ import { FieldDescriptor } from '../../index_patterns_fetcher';
3232
* @param {Function} callCluster bound function for accessing an es client
3333
* @param {Array} [indices=[]] the list of indexes to check
3434
* @param {Array} [metaFields=[]] the list of internal fields to include
35+
* @param {Object} fieldCapsOptions
3536
* @return {Promise<Array<FieldDescriptor>>}
3637
*/
3738
export async function getFieldCapabilities(
3839
callCluster: LegacyAPICaller,
3940
indices: string | string[] = [],
40-
metaFields: string[] = []
41+
metaFields: string[] = [],
42+
fieldCapsOptions?: { allowNoIndices: boolean }
4143
) {
42-
const esFieldCaps: FieldCapsResponse = await callFieldCapsApi(callCluster, indices);
44+
const esFieldCaps: FieldCapsResponse = await callFieldCapsApi(
45+
callCluster,
46+
indices,
47+
fieldCapsOptions
48+
);
4349
const fieldsFromFieldCapsByName = keyBy(readFieldCapsResponse(esFieldCaps), 'name');
4450

4551
const allFieldsUnsorted = Object.keys(fieldsFromFieldCapsByName)

src/plugins/data/server/server.api.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -689,6 +689,9 @@ export class IndexPatternsFetcher {
689689
getFieldsForWildcard(options: {
690690
pattern: string | string[];
691691
metaFields?: string[];
692+
fieldCapsOptions?: {
693+
allowNoIndices: boolean;
694+
};
692695
}): Promise<IndexPatternFieldDescriptor[]>;
693696
}
694697

src/plugins/vis_type_timeseries/server/lib/get_fields.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,16 @@
1616
* specific language governing permissions and limitations
1717
* under the License.
1818
*/
19-
import { uniqBy } from 'lodash';
19+
import { uniqBy, get } from 'lodash';
2020
import { first, map } from 'rxjs/operators';
2121
import { KibanaRequest, RequestHandlerContext } from 'kibana/server';
2222

23-
// @ts-ignore
24-
import { getIndexPatternObject } from './vis_data/helpers/get_index_pattern';
25-
import { indexPatterns } from '../../../data/server';
2623
import { Framework } from '../plugin';
27-
import { IndexPatternFieldDescriptor, IndexPatternsFetcher } from '../../../data/server';
24+
import {
25+
indexPatterns,
26+
IndexPatternFieldDescriptor,
27+
IndexPatternsFetcher,
28+
} from '../../../data/server';
2829
import { ReqFacade } from './search_strategies/strategies/abstract_search_strategy';
2930

3031
export async function getFields(
@@ -58,7 +59,15 @@ export async function getFields(
5859
.toPromise();
5960
},
6061
};
61-
const { indexPatternString } = await getIndexPatternObject(reqFacade, indexPattern);
62+
let indexPatternString = indexPattern;
63+
64+
if (!indexPatternString) {
65+
const [, { data }] = await framework.core.getStartServices();
66+
const indexPatternsService = await data.indexPatterns.indexPatternsServiceFactory(request);
67+
const defaultIndexPattern = await indexPatternsService.getDefault();
68+
indexPatternString = get(defaultIndexPattern, 'title', '');
69+
}
70+
6271
const {
6372
searchStrategy,
6473
capabilities,

src/plugins/vis_type_timeseries/server/lib/search_strategies/strategies/abstract_search_strategy.test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ describe('AbstractSearchStrategy', () => {
4949
expect(fields).toBe(mockedFields);
5050
expect(req.pre.indexPatternsService.getFieldsForWildcard).toHaveBeenCalledWith({
5151
pattern: indexPattern,
52+
fieldCapsOptions: { allowNoIndices: true },
5253
});
5354
});
5455

src/plugins/vis_type_timeseries/server/lib/search_strategies/strategies/abstract_search_strategy.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ export class AbstractSearchStrategy {
8484

8585
return await indexPatternsService!.getFieldsForWildcard({
8686
pattern: indexPattern,
87+
fieldCapsOptions: { allowNoIndices: true },
8788
});
8889
}
8990

src/plugins/vis_type_timeseries/server/lib/vis_data/get_interval_and_timefield.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,10 @@
1717
* under the License.
1818
*/
1919

20-
import { get } from 'lodash';
21-
2220
const DEFAULT_TIME_FIELD = '@timestamp';
2321

2422
export function getIntervalAndTimefield(panel, series = {}, indexPatternObject) {
25-
const getDefaultTimeField = () => get(indexPatternObject, 'timeFieldName', DEFAULT_TIME_FIELD);
23+
const getDefaultTimeField = () => indexPatternObject?.timeFieldName ?? DEFAULT_TIME_FIELD;
2624

2725
const timeField =
2826
(series.override_index_pattern && series.series_time_field) ||

0 commit comments

Comments
 (0)