kibana/x-pack/plugins/apm/server/projections/transaction_groups.ts
Søren Louv-Jansen 4ddcd1d2a6
[APM] Fix anomalies not showing up on transaction charts (#76930)
* [APM] Fix anomalies not showing up on transaction charts

* Added API tests to check transaction groups charts for anomaly data

* Improve test names and assertions from PR feedback

* Updated the transaction groups chart API to make `environment` a
required param while making `uiFilters` optional

* updates the basic API tests for transaction_groups/charts with the
required `environment` param

* makes uiFIltersES default to [] on core setup and removes SetupUIFilters type

* fixes vertical shade

* - replaces uiFiltersES with esFilter & uiFilters and cleans up related code around these
- deduplicates the required environment in the transaction_groups/charts API

* updates basic apm_api_integration tests

* pr feedback

* updates api test snapshots with correct anomaly data

* removed environment query param from useTransactionCharts and ensures
it's included in uiFilters returned from useUrlParams

Co-authored-by: Oliver Gupte <olivergupte@gmail.com>
2020-10-02 00:45:50 -07:00

60 lines
1.6 KiB
TypeScript

/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import { omit } from 'lodash';
import { Setup, SetupTimeRange } from '../../server/lib/helpers/setup_request';
import {
TRANSACTION_NAME,
PARENT_ID,
TRANSACTION_ROOT,
} from '../../common/elasticsearch_fieldnames';
import { Options } from '../../server/lib/transaction_groups/fetcher';
import { getTransactionsProjection } from './transactions';
import { mergeProjection } from './util/merge_projection';
export function getTransactionGroupsProjection({
setup,
options,
}: {
setup: Setup & SetupTimeRange;
options: Options;
}) {
const transactionsProjection = getTransactionsProjection({
setup,
...(omit(options, 'type') as Omit<typeof options, 'type'>),
});
if (options.type === 'top_traces') {
if (options.searchAggregatedTransactions) {
transactionsProjection.body.query.bool.filter.push({
term: {
[TRANSACTION_ROOT]: true,
},
});
} else {
// @ts-expect-error: Property 'must_not' does not exist on type '{ filter: ESFilter[]; }'.
transactionsProjection.body.query.bool.must_not = [
{
exists: {
field: PARENT_ID,
},
},
];
}
}
return mergeProjection(transactionsProjection, {
body: {
aggs: {
transactions: {
terms: {
field: TRANSACTION_NAME,
},
},
},
},
});
}