Skip to content

Commit 31a5b15

Browse files
authored
[APM] Use asTransactionRate consistently everywhere (#84213)
1 parent d47460d commit 31a5b15

File tree

11 files changed

+29
-122
lines changed

11 files changed

+29
-122
lines changed

x-pack/plugins/apm/common/utils/formatters/formatters.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
* you may not use this file except in compliance with the Elastic License.
55
*/
66
import numeral from '@elastic/numeral';
7-
import { i18n } from '@kbn/i18n';
87
import { Maybe } from '../../../typings/common';
98
import { NOT_AVAILABLE_LABEL } from '../../i18n';
109
import { isFiniteNumber } from '../is_finite_number';
@@ -17,16 +16,6 @@ export function asInteger(value: number) {
1716
return numeral(value).format('0,0');
1817
}
1918

20-
export function tpmUnit(type?: string) {
21-
return type === 'request'
22-
? i18n.translate('xpack.apm.formatters.requestsPerMinLabel', {
23-
defaultMessage: 'rpm',
24-
})
25-
: i18n.translate('xpack.apm.formatters.transactionsPerMinLabel', {
26-
defaultMessage: 'tpm',
27-
});
28-
}
29-
3019
export function asPercent(
3120
numerator: Maybe<number>,
3221
denominator: number | undefined,

x-pack/plugins/apm/public/components/app/ServiceMap/Popover/ServiceStatsList.tsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import styled from 'styled-components';
1111
import {
1212
asDuration,
1313
asPercent,
14-
tpmUnit,
14+
asTransactionRate,
1515
} from '../../../../../common/utils/formatters';
1616
import { ServiceNodeStats } from '../../../../../common/service_map';
1717

@@ -55,11 +55,7 @@ export function ServiceStatsList({
5555
defaultMessage: 'Req. per minute (avg.)',
5656
}
5757
),
58-
description: isNumber(transactionStats.avgRequestsPerMinute)
59-
? `${transactionStats.avgRequestsPerMinute.toFixed(2)} ${tpmUnit(
60-
'request'
61-
)}`
62-
: null,
58+
description: asTransactionRate(transactionStats.avgRequestsPerMinute),
6359
},
6460
{
6561
title: i18n.translate('xpack.apm.serviceMap.errorRatePopoverStat', {

x-pack/plugins/apm/public/components/app/TraceOverview/TraceList.tsx

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ import { EuiIcon, EuiToolTip } from '@elastic/eui';
88
import { i18n } from '@kbn/i18n';
99
import React from 'react';
1010
import styled from 'styled-components';
11-
import { asMillisecondDuration } from '../../../../common/utils/formatters';
11+
import {
12+
asMillisecondDuration,
13+
asTransactionRate,
14+
} from '../../../../common/utils/formatters';
1215
import { fontSizes, truncate } from '../../../style/variables';
1316
import { EmptyMessage } from '../../shared/EmptyMessage';
1417
import { ImpactBar } from '../../shared/ImpactBar';
@@ -78,13 +81,7 @@ const traceListColumns: Array<ITableColumn<TraceGroup>> = [
7881
}),
7982
sortable: true,
8083
dataType: 'number',
81-
render: (value: number) =>
82-
`${value.toLocaleString()} ${i18n.translate(
83-
'xpack.apm.tracesTable.tracesPerMinuteUnitLabel',
84-
{
85-
defaultMessage: 'tpm',
86-
}
87-
)}`,
84+
render: (value: number) => asTransactionRate(value),
8885
},
8986
{
9087
field: 'impact',

x-pack/plugins/apm/public/components/app/TransactionDetails/Distribution/index.tsx

Lines changed: 13 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { EuiIconTip, EuiTitle } from '@elastic/eui';
2222
import { i18n } from '@kbn/i18n';
2323
import d3 from 'd3';
2424
import { isEmpty } from 'lodash';
25-
import React, { useCallback } from 'react';
25+
import React from 'react';
2626
import { ValuesType } from 'utility-types';
2727
import { APIReturnType } from '../../../../services/rest/createCallApmApi';
2828
import { useTheme } from '../../../../../../observability/public';
@@ -70,46 +70,29 @@ export function getFormattedBuckets(
7070
);
7171
}
7272

73-
const getFormatYShort = (transactionType: string | undefined) => (
74-
t: number
75-
) => {
73+
const formatYShort = (t: number) => {
7674
return i18n.translate(
7775
'xpack.apm.transactionDetails.transactionsDurationDistributionChart.unitShortLabel',
76+
{
77+
defaultMessage: '{transCount} trans.',
78+
values: { transCount: t },
79+
}
80+
);
81+
};
82+
83+
const formatYLong = (t: number) => {
84+
return i18n.translate(
85+
'xpack.apm.transactionDetails.transactionsDurationDistributionChart.transactionTypeUnitLongLabel',
7886
{
7987
defaultMessage:
80-
'{transCount} {transType, select, request {req.} other {trans.}}',
88+
'{transCount, plural, =0 {transactions} one {transaction} other {transactions}}',
8189
values: {
8290
transCount: t,
83-
transType: transactionType,
8491
},
8592
}
8693
);
8794
};
8895

89-
const getFormatYLong = (transactionType: string | undefined) => (t: number) => {
90-
return transactionType === 'request'
91-
? i18n.translate(
92-
'xpack.apm.transactionDetails.transactionsDurationDistributionChart.requestTypeUnitLongLabel',
93-
{
94-
defaultMessage:
95-
'{transCount, plural, =0 {request} one {request} other {requests}}',
96-
values: {
97-
transCount: t,
98-
},
99-
}
100-
)
101-
: i18n.translate(
102-
'xpack.apm.transactionDetails.transactionsDurationDistributionChart.transactionTypeUnitLongLabel',
103-
{
104-
defaultMessage:
105-
'{transCount, plural, =0 {transaction} one {transaction} other {transactions}}',
106-
values: {
107-
transCount: t,
108-
},
109-
}
110-
);
111-
};
112-
11396
interface Props {
11497
distribution?: TransactionDistributionAPIResponse;
11598
urlParams: IUrlParams;
@@ -129,16 +112,6 @@ export function TransactionDistribution({
129112
}: Props) {
130113
const theme = useTheme();
131114

132-
/* eslint-disable-next-line react-hooks/exhaustive-deps */
133-
const formatYShort = useCallback(getFormatYShort(transactionType), [
134-
transactionType,
135-
]);
136-
137-
/* eslint-disable-next-line react-hooks/exhaustive-deps */
138-
const formatYLong = useCallback(getFormatYLong(transactionType), [
139-
transactionType,
140-
]);
141-
142115
// no data in response
143116
if (
144117
(!distribution || distribution.noHits) &&

x-pack/plugins/apm/public/components/app/service_inventory/ServiceList/index.tsx

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ import { APIReturnType } from '../../../../services/rest/createCallApmApi';
1414
import { ServiceHealthStatus } from '../../../../../common/service_health_status';
1515
import {
1616
asPercent,
17-
asDecimal,
1817
asMillisecondDuration,
18+
asTransactionRate,
1919
} from '../../../../../common/utils/formatters';
2020
import { NOT_AVAILABLE_LABEL } from '../../../../../common/i18n';
2121
import { fontSizes, px, truncate, unit } from '../../../../style/variables';
@@ -35,16 +35,6 @@ interface Props {
3535
}
3636
type ServiceListItem = ValuesType<Items>;
3737

38-
function formatNumber(value: number) {
39-
if (value === 0) {
40-
return '0';
41-
} else if (value <= 0.1) {
42-
return '< 0.1';
43-
} else {
44-
return asDecimal(value);
45-
}
46-
}
47-
4838
function formatString(value?: string | null) {
4939
return value || NOT_AVAILABLE_LABEL;
5040
}
@@ -154,14 +144,7 @@ export const SERVICE_COLUMNS: Array<ITableColumn<ServiceListItem>> = [
154144
<ServiceListMetric
155145
series={transactionsPerMinute?.timeseries}
156146
color="euiColorVis0"
157-
valueLabel={`${formatNumber(
158-
transactionsPerMinute?.value || 0
159-
)} ${i18n.translate(
160-
'xpack.apm.servicesTable.transactionsPerMinuteUnitLabel',
161-
{
162-
defaultMessage: 'tpm',
163-
}
164-
)}`}
147+
valueLabel={asTransactionRate(transactionsPerMinute?.value)}
165148
/>
166149
),
167150
align: 'left',

x-pack/plugins/apm/public/components/app/transaction_overview/TransactionList/index.tsx

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import React, { useMemo } from 'react';
1010
import styled from 'styled-components';
1111
import { APIReturnType } from '../../../../services/rest/createCallApmApi';
1212
import {
13-
asDecimal,
1413
asMillisecondDuration,
14+
asTransactionRate,
1515
} from '../../../../../common/utils/formatters';
1616
import { fontFamilyCode, truncate } from '../../../../style/variables';
1717
import { ImpactBar } from '../../../shared/ImpactBar';
@@ -103,13 +103,7 @@ export function TransactionList({ items, isLoading }: Props) {
103103
),
104104
sortable: true,
105105
dataType: 'number',
106-
render: (value: number) =>
107-
`${asDecimal(value)} ${i18n.translate(
108-
'xpack.apm.transactionsTable.transactionsPerMinuteUnitLabel',
109-
{
110-
defaultMessage: 'tpm',
111-
}
112-
)}`,
106+
render: (value: number) => asTransactionRate(value),
113107
},
114108
{
115109
field: 'impact',

x-pack/plugins/apm/public/components/shared/charts/transaction_charts/index.tsx

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,17 @@ import {
1414
} from '@elastic/eui';
1515
import { i18n } from '@kbn/i18n';
1616
import React from 'react';
17-
import { NOT_AVAILABLE_LABEL } from '../../../../../common/i18n';
1817
import {
1918
TRANSACTION_PAGE_LOAD,
2019
TRANSACTION_REQUEST,
2120
TRANSACTION_ROUTE_CHANGE,
2221
} from '../../../../../common/transaction_types';
23-
import { asDecimal, tpmUnit } from '../../../../../common/utils/formatters';
24-
import { Coordinate } from '../../../../../typings/timeseries';
22+
import { asTransactionRate } from '../../../../../common/utils/formatters';
2523
import { ChartsSyncContextProvider } from '../../../../context/charts_sync_context';
2624
import { LicenseContext } from '../../../../context/LicenseContext';
2725
import { IUrlParams } from '../../../../context/UrlParamsContext/types';
2826
import { FETCH_STATUS } from '../../../../hooks/useFetcher';
2927
import { ITransactionChartData } from '../../../../selectors/chart_selectors';
30-
import { isValidCoordinateValue } from '../../../../utils/isValidCoordinateValue';
3128
import { TransactionBreakdownChart } from '../transaction_breakdown_chart';
3229
import { TimeseriesChart } from '../timeseries_chart';
3330
import { TransactionErrorRateChart } from '../transaction_error_rate_chart/';
@@ -46,14 +43,6 @@ export function TransactionCharts({
4643
urlParams,
4744
fetchStatus,
4845
}: TransactionChartProps) {
49-
const getTPMFormatter = (t: number) => {
50-
return `${asDecimal(t)} ${tpmUnit(urlParams.transactionType)}`;
51-
};
52-
53-
const getTPMTooltipFormatter = (y: Coordinate['y']) => {
54-
return isValidCoordinateValue(y) ? getTPMFormatter(y) : NOT_AVAILABLE_LABEL;
55-
};
56-
5746
const { transactionType } = urlParams;
5847

5948
const { responseTimeSeries, tpmSeries } = charts;
@@ -104,7 +93,7 @@ export function TransactionCharts({
10493
fetchStatus={fetchStatus}
10594
id="requestPerMinutes"
10695
timeseries={tpmSeries || []}
107-
yLabelFormat={getTPMTooltipFormatter}
96+
yLabelFormat={asTransactionRate}
10897
/>
10998
</EuiPanel>
11099
</EuiFlexItem>

x-pack/plugins/apm/public/selectors/chart_selectors.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ describe('chart selectors', () => {
144144
{
145145
color: errorColor,
146146
data: [{ x: 0, y: 0 }],
147-
legendValue: '0.0 tpm',
147+
legendValue: '0 tpm',
148148
title: 'HTTP 5xx',
149149
type: 'linemark',
150150
},

x-pack/plugins/apm/public/selectors/chart_selectors.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020
import { IUrlParams } from '../context/UrlParamsContext/types';
2121
import { getEmptySeries } from '../components/shared/charts/helper/get_empty_series';
2222
import { httpStatusCodeToColor } from '../utils/httpStatusCodeToColor';
23-
import { asDecimal, asDuration, tpmUnit } from '../../common/utils/formatters';
23+
import { asDuration, asTransactionRate } from '../../common/utils/formatters';
2424

2525
export interface ITpmBucket {
2626
title: string;
@@ -171,7 +171,7 @@ export function getTpmSeries(
171171
return {
172172
title: bucket.key,
173173
data: bucket.dataPoints,
174-
legendValue: `${asDecimal(bucket.avg)} ${tpmUnit(transactionType || '')}`,
174+
legendValue: asTransactionRate(bucket.avg),
175175
type: 'linemark',
176176
color: getColor(bucket.key),
177177
};

x-pack/plugins/translations/translations/ja-JP.json

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4874,9 +4874,7 @@
48744874
"xpack.apm.formatters.microsTimeUnitLabel": "マイクロ秒",
48754875
"xpack.apm.formatters.millisTimeUnitLabel": "ミリ秒",
48764876
"xpack.apm.formatters.minutesTimeUnitLabel": "最低",
4877-
"xpack.apm.formatters.requestsPerMinLabel": "1分あたりリクエスト数",
48784877
"xpack.apm.formatters.secondsTimeUnitLabel": "秒",
4879-
"xpack.apm.formatters.transactionsPerMinLabel": "1分あたりトランザクション数",
48804878
"xpack.apm.header.badge.readOnly.text": "読み込み専用",
48814879
"xpack.apm.header.badge.readOnly.tooltip": "を保存できませんでした",
48824880
"xpack.apm.helpMenu.upgradeAssistantLink": "アップグレードアシスタント",
@@ -5052,7 +5050,6 @@
50525050
"xpack.apm.servicesTable.notFoundLabel": "サービスが見つかりません",
50535051
"xpack.apm.servicesTable.transactionErrorRate": "エラー率%",
50545052
"xpack.apm.servicesTable.transactionsPerMinuteColumnLabel": "1 分あたりのトランザクション",
5055-
"xpack.apm.servicesTable.transactionsPerMinuteUnitLabel": "1分あたりトランザクション数",
50565053
"xpack.apm.servicesTable.UpgradeAssistantLink": "Kibana アップグレードアシスタントで詳細をご覧ください",
50575054
"xpack.apm.settings.agentConfig": "エージェントの編集",
50585055
"xpack.apm.settings.anomaly_detection.legacy_jobs.body": "以前の統合のレガシー機械学習ジョブが見つかりました。これは、APMアプリでは使用されていません。",
@@ -5155,7 +5152,6 @@
51555152
"xpack.apm.tracesTable.notFoundLabel": "このクエリのトレースが見つかりません",
51565153
"xpack.apm.tracesTable.originatingServiceColumnLabel": "発生元サービス",
51575154
"xpack.apm.tracesTable.tracesPerMinuteColumnLabel": "1 分あたりのトレース",
5158-
"xpack.apm.tracesTable.tracesPerMinuteUnitLabel": "1分あたりトランザクション数",
51595155
"xpack.apm.transactionActionMenu.actionsButtonLabel": "アクション",
51605156
"xpack.apm.transactionActionMenu.container.subtitle": "このコンテナーのログとインデックスを表示し、さらに詳細を確認できます。",
51615157
"xpack.apm.transactionActionMenu.container.title": "コンテナーの詳細",
@@ -5206,9 +5202,7 @@
52065202
"xpack.apm.transactionDetails.traceNotFound": "選択されたトレースが見つかりません",
52075203
"xpack.apm.transactionDetails.traceSampleTitle": "トレースのサンプル",
52085204
"xpack.apm.transactionDetails.transactionLabel": "トランザクション",
5209-
"xpack.apm.transactionDetails.transactionsDurationDistributionChart.requestTypeUnitLongLabel": "{transCount, plural, =0 {# request} 1 {# 件のリクエスト} other {# 件のリクエスト}}",
52105205
"xpack.apm.transactionDetails.transactionsDurationDistributionChart.transactionTypeUnitLongLabel": "{transCount, plural, =0 {# transaction} 1 {# 件のトランザクション} other {# 件のトランザクション}}",
5211-
"xpack.apm.transactionDetails.transactionsDurationDistributionChart.unitShortLabel": "{transCount} {transType, select, request {件のリクエスト} other {件のトランザクション}}",
52125206
"xpack.apm.transactionDetails.transactionsDurationDistributionChartTitle": "トラザクション時間の分布",
52135207
"xpack.apm.transactionDetails.transactionsDurationDistributionChartTooltip.samplingDescription": "各バケットはサンプルトランザクションを示します。利用可能なサンプルがない場合、恐らくエージェントの構成で設定されたサンプリング制限が原因です。",
52145208
"xpack.apm.transactionDetails.transactionsDurationDistributionChartTooltip.samplingLabel": "サンプリング",
@@ -5241,7 +5235,6 @@
52415235
"xpack.apm.transactionsTable.nameColumnLabel": "名前",
52425236
"xpack.apm.transactionsTable.notFoundLabel": "トランザクションが見つかりませんでした。",
52435237
"xpack.apm.transactionsTable.transactionsPerMinuteColumnLabel": "1 分あたりのトランザクション",
5244-
"xpack.apm.transactionsTable.transactionsPerMinuteUnitLabel": "1分あたりトランザクション数",
52455238
"xpack.apm.tutorial.apmServer.title": "APM Server",
52465239
"xpack.apm.tutorial.elasticCloud.textPre": "APM Server を有効にするには、[the Elastic Cloud console](https://cloud.elastic.co/deployments?q={cloudId}) に移動し、展開設定で APM を有効にします。有効になったら、このページを更新してください。",
52475240
"xpack.apm.tutorial.elasticCloudInstructions.title": "APM エージェント",

0 commit comments

Comments
 (0)