Skip to content

Commit

Permalink
[Lens] Make field stats work for index patterns without time fields (#…
Browse files Browse the repository at this point in the history
…56759)

* Fix field stats not loaded without time field

* Add integration test for API

* Add unit test for API call

* Correct typo in comment
  • Loading branch information
Tim Roes authored Feb 6, 2020
1 parent ea7c78d commit ed2bac3
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,24 @@ describe('IndexPattern Field Item', () => {
} as unknown) as FieldFormatsStart;
});

it('should request field stats without a time field, if the index pattern has none', async () => {
indexPattern.timeFieldName = undefined;
core.http.post.mockImplementationOnce(() => {
return Promise.resolve({});
});
const wrapper = mountWithIntl(<FieldItem {...defaultProps} />);
wrapper.find('[data-test-subj="lnsFieldListPanelField-bytes"]').simulate('click');

expect(core.http.post).toHaveBeenCalledWith(
'/api/lens/index_stats/my-fake-index-pattern/field',
expect.anything()
);
// Function argument types not detected correctly (https://github.com/microsoft/TypeScript/issues/26591)
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const { body } = (core.http.post.mock.calls[0] as any)[1];
expect(JSON.parse(body)).not.toHaveProperty('timeFieldName');
});

it('should request field stats every time the button is clicked', async () => {
let resolveFunction: (arg: unknown) => void;

Expand Down
14 changes: 9 additions & 5 deletions x-pack/plugins/lens/server/routes/field_stats.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export async function initFieldsRoute(setup: CoreSetup) {
dslQuery: schema.object({}, { allowUnknowns: true }),
fromDate: schema.string(),
toDate: schema.string(),
timeFieldName: schema.string(),
timeFieldName: schema.maybe(schema.string()),
field: schema.object(
{
name: schema.string(),
Expand All @@ -46,9 +46,8 @@ export async function initFieldsRoute(setup: CoreSetup) {
const { fromDate, toDate, timeFieldName, field, dslQuery } = req.body;

try {
const query = {
bool: {
filter: [
const filter = timeFieldName
? [
{
range: {
[timeFieldName]: {
Expand All @@ -58,7 +57,12 @@ export async function initFieldsRoute(setup: CoreSetup) {
},
},
dslQuery,
],
]
: [dslQuery];

const query = {
bool: {
filter,
},
};

Expand Down
18 changes: 18 additions & 0 deletions x-pack/test/api_integration/apis/lens/field_stats.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,24 @@ export default ({ getService }: FtrProviderContext) => {
.expect(404);
});

it('should also work without specifying a time field', async () => {
const { body } = await supertest
.post('/api/lens/index_stats/logstash-2015.09.22/field')
.set(COMMON_HEADERS)
.send({
dslQuery: { match_all: {} },
fromDate: TEST_START_TIME,
toDate: TEST_END_TIME,
field: {
name: 'bytes',
type: 'number',
},
})
.expect(200);

expect(body).to.have.property('totalDocuments', 4633);
});

it('should return an auto histogram for numbers and top values', async () => {
const { body } = await supertest
.post('/api/lens/index_stats/logstash-2015.09.22/field')
Expand Down

0 comments on commit ed2bac3

Please sign in to comment.