[APM] Convert AWS lambada duration to microseconds (#142504) (#142766)

(cherry picked from commit db7daf6369)

Co-authored-by: Cauê Marcondes <55978943+cauemarcondes@users.noreply.github.com>
This commit is contained in:
Kibana Machine 2022-10-05 13:32:24 -06:00 committed by GitHub
parent bb2f4eece3
commit ee82096097
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 9 deletions

View file

@ -11,6 +11,7 @@ import { FAAS_COLDSTART_DURATION } from '../../../../../common/elasticsearch_fie
import { Setup } from '../../../../lib/helpers/setup_request';
import { fetchAndTransformMetrics } from '../../fetch_and_transform_metrics';
import { ChartBase } from '../../types';
import { isFiniteNumber } from '../../../../../common/utils/is_finite_number';
const chartBase: ChartBase = {
title: i18n.translate('xpack.apm.agentMetrics.serverless.coldStartDuration', {
@ -37,7 +38,7 @@ const chartBase: ChartBase = {
),
};
export function getColdStartDuration({
export async function getColdStartDuration({
environment,
kuery,
setup,
@ -52,7 +53,7 @@ export function getColdStartDuration({
start: number;
end: number;
}) {
return fetchAndTransformMetrics({
const coldStartDurationMetric = await fetchAndTransformMetrics({
environment,
kuery,
setup,
@ -64,4 +65,24 @@ export function getColdStartDuration({
additionalFilters: [{ exists: { field: FAAS_COLDSTART_DURATION } }],
operationName: 'get_cold_start_duration',
});
const [series] = coldStartDurationMetric.series;
const data = series.data.map(({ x, y }) => ({
x,
// Cold start duration duration is stored in ms, convert it to microseconds so it uses the same unit as the other charts
y: isFiniteNumber(y) ? y * 1000 : y,
}));
return {
...coldStartDurationMetric,
series: [
{
...series,
// Cold start duration duration is stored in ms, convert it to microseconds
overallValue: series.overallValue * 1000,
data,
},
],
};
}

View file

@ -9,6 +9,7 @@ import { i18n } from '@kbn/i18n';
import { euiLightVars as theme } from '@kbn/ui-theme';
import { FAAS_BILLED_DURATION } from '../../../../../common/elasticsearch_fieldnames';
import { LatencyAggregationType } from '../../../../../common/latency_aggregation_types';
import { isFiniteNumber } from '../../../../../common/utils/is_finite_number';
import { getVizColorForIndex } from '../../../../../common/viz_colors';
import { Setup } from '../../../../lib/helpers/setup_request';
import { getLatencyTimeseries } from '../../../transactions/get_latency_charts';
@ -123,8 +124,23 @@ export async function getServerlessFunctionLatency({
getServerlessLantecySeries({ ...options, searchAggregatedTransactions }),
]);
const [series] = billedDurationMetrics.series;
const data = series.data.map(({ x, y }) => ({
x,
// Billed duration is stored in ms, convert it to microseconds so it uses the same unit as the other chart
y: isFiniteNumber(y) ? y * 1000 : y,
}));
return {
...billedDurationMetrics,
series: [...billedDurationMetrics.series, ...serverlessDurationSeries],
series: [
{
...series,
// Billed duration is stored in ms, convert it to microseconds
overallValue: series.overallValue * 1000,
data,
},
...serverlessDurationSeries,
],
};
}

View file

@ -159,7 +159,7 @@ export default function ApiTest({ getService }: FtrProviderContext) {
describe('Avg. Duration', () => {
const transactionDurationInMicroSeconds = TRANSACTION_DURATION * 1000;
[
{ title: 'Billed Duration', expectedValue: BILLED_DURATION_MS },
{ title: 'Billed Duration', expectedValue: BILLED_DURATION_MS * 1000 },
{ title: 'Transaction Duration', expectedValue: transactionDurationInMicroSeconds },
].map(({ title, expectedValue }) =>
it(`returns correct ${title} value`, () => {
@ -186,7 +186,7 @@ export default function ApiTest({ getService }: FtrProviderContext) {
});
it('returns correct overall value', () => {
expect(coldStartDurationMetric?.series[0].overallValue).to.equal(
COLD_START_DURATION_PYTHON
COLD_START_DURATION_PYTHON * 1000
);
});
@ -195,7 +195,7 @@ export default function ApiTest({ getService }: FtrProviderContext) {
coldStartDurationMetric?.series[0]?.data.filter((item) => item.y !== null),
'y'
);
expect(meanValue).to.equal(COLD_START_DURATION_PYTHON);
expect(meanValue).to.equal(COLD_START_DURATION_PYTHON * 1000);
});
});
@ -308,7 +308,7 @@ export default function ApiTest({ getService }: FtrProviderContext) {
describe('Avg. Duration', () => {
const transactionDurationInMicroSeconds = TRANSACTION_DURATION * 1000;
[
{ title: 'Billed Duration', expectedValue: BILLED_DURATION_MS },
{ title: 'Billed Duration', expectedValue: BILLED_DURATION_MS * 1000 },
{ title: 'Transaction Duration', expectedValue: transactionDurationInMicroSeconds },
].map(({ title, expectedValue }) =>
it(`returns correct ${title} value`, () => {
@ -336,7 +336,7 @@ export default function ApiTest({ getService }: FtrProviderContext) {
it('returns 0 overall value', () => {
expect(coldStartDurationMetric?.series[0].overallValue).to.equal(
COLD_START_DURATION_NODE
COLD_START_DURATION_NODE * 1000
);
});
@ -345,7 +345,7 @@ export default function ApiTest({ getService }: FtrProviderContext) {
coldStartDurationMetric?.series[0]?.data.filter((item) => item.y !== null),
'y'
);
expect(meanValue).to.equal(COLD_START_DURATION_NODE);
expect(meanValue).to.equal(COLD_START_DURATION_NODE * 1000);
});
});