Skip to content

Commit

Permalink
Add SLO create callout to service overview, transactions page and tra…
Browse files Browse the repository at this point in the history
…nsactions details (#159958)

We split the work for #157484
into this PR and another one that will add the links to create SLOs from
the Alerts and Rules dropdown in APM. Also, the design for the callout
was simplified and we will iterate again in 8.10

### What was done
Added callout with links to create SLOs in service overview,
transactions overview and transaction details.


https://github.com/elastic/kibana/assets/31922082/00f55477-d1ae-4e42-bf7d-2f0af5a5307b

---------

Co-authored-by: kibanamachine <[email protected]>
  • Loading branch information
MiriamAparicio and kibanamachine authored Jun 20, 2023
1 parent 45a9274 commit ea0935f
Show file tree
Hide file tree
Showing 5 changed files with 170 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
EuiFlexItem,
EuiLink,
EuiPanel,
EuiSpacer,
} from '@elastic/eui';
import {
isRumAgentName,
Expand All @@ -36,6 +37,8 @@ import { ServiceOverviewDependenciesTable } from './service_overview_dependencie
import { ServiceOverviewErrorsTable } from './service_overview_errors_table';
import { ServiceOverviewInstancesChartAndTable } from './service_overview_instances_chart_and_table';
import { ServiceOverviewThroughputChart } from './service_overview_throughput_chart';
import { SloCallout } from '../../shared/slo_callout';
import { useLocalStorage } from '../../../hooks/use_local_storage';
/**
* The height a chart should be if it's next to a table with 5 rows and a title.
* Add the height of the pagination row.
Expand All @@ -49,7 +52,7 @@ export function ServiceOverview() {

const {
query,
query: { kuery, environment, rangeFrom, rangeTo },
query: { kuery, environment, rangeFrom, rangeTo, transactionType },
} = useApmParams('/services/{serviceName}/overview');

const { start, end } = useTimeRange({ rangeFrom, rangeTo });
Expand All @@ -76,13 +79,29 @@ export function ServiceOverview() {
? 'column'
: 'row';

const [sloCalloutDismissed, setSloCalloutDismissed] = useLocalStorage(
'apm.sloCalloutDismissed',
false
);

return (
<AnnotationsContextProvider
serviceName={serviceName}
environment={environment}
start={start}
end={end}
>
{!sloCalloutDismissed && (
<SloCallout
dismissCallout={() => {
setSloCalloutDismissed(true);
}}
serviceName={serviceName}
environment={environment}
transactionType={transactionType}
/>
)}
<EuiSpacer />
<ChartPointerEventContextProvider>
<EuiFlexGroup direction="column" gutterSize="s">
{fallbackToTransactions && (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ import { TransactionCharts } from '../../shared/charts/transaction_charts';
import { replace } from '../../shared/links/url_helpers';
import { TransactionDetailsTabs } from './transaction_details_tabs';
import { isServerlessAgent } from '../../../../common/agent_name';
import { useLocalStorage } from '../../../hooks/use_local_storage';
import { SloCallout } from '../../shared/slo_callout';

export function TransactionDetails() {
const { path, query } = useAnyOfApmParams(
Expand All @@ -32,6 +34,7 @@ export function TransactionDetails() {
transactionType: transactionTypeFromUrl,
comparisonEnabled,
offset,
environment,
} = query;
const { start, end } = useTimeRange({ rangeFrom, rangeTo });
const apmRouter = useApmRouter();
Expand Down Expand Up @@ -61,9 +64,24 @@ export function TransactionDetails() {
);

const isServerless = isServerlessAgent(serverlessType);
const [sloCalloutDismissed, setSloCalloutDismissed] = useLocalStorage(
'apm.sloCalloutDismissed',
false
);

return (
<>
{!sloCalloutDismissed && (
<SloCallout
dismissCallout={() => {
setSloCalloutDismissed(true);
}}
serviceName={serviceName}
environment={environment}
transactionType={transactionType}
transactionName={transactionName}
/>
)}
{fallbackToTransactions && <AggregatedTransactionsBadge />}
<EuiSpacer size="s" />

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@ import { useHistory } from 'react-router-dom';
import { isServerlessAgent } from '../../../../common/agent_name';
import { useApmServiceContext } from '../../../context/apm_service/use_apm_service_context';
import { useApmParams } from '../../../hooks/use_apm_params';
import { useLocalStorage } from '../../../hooks/use_local_storage';
import { useTimeRange } from '../../../hooks/use_time_range';
import { AggregatedTransactionsBadge } from '../../shared/aggregated_transactions_badge';
import { TransactionCharts } from '../../shared/charts/transaction_charts';
import { replace } from '../../shared/links/url_helpers';
import { SloCallout } from '../../shared/slo_callout';
import { TransactionsTable } from '../../shared/transactions_table';

export function TransactionOverview() {
Expand Down Expand Up @@ -48,8 +50,23 @@ export function TransactionOverview() {

const isServerless = isServerlessAgent(serverlessType);

const [sloCalloutDismissed, setSloCalloutDismissed] = useLocalStorage(
'apm.sloCalloutDismissed',
false
);

return (
<>
{!sloCalloutDismissed && (
<SloCallout
dismissCallout={() => {
setSloCalloutDismissed(true);
}}
serviceName={serviceName}
environment={environment}
transactionType={transactionType}
/>
)}
{fallbackToTransactions && (
<>
<EuiFlexGroup>
Expand Down
114 changes: 114 additions & 0 deletions x-pack/plugins/apm/public/components/shared/slo_callout/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import {
EuiButton,
EuiCallOut,
EuiFlexGroup,
EuiFlexItem,
EuiLink,
} from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import { CreateSLOInput } from '@kbn/slo-schema';
import { encode } from '@kbn/rison';
import React from 'react';
import { FormattedMessage } from '@kbn/i18n-react';
import { useApmPluginContext } from '../../../context/apm_plugin/use_apm_plugin_context';

interface Props {
dismissCallout: () => void;
serviceName: string;
environment: string;
transactionType?: string;
transactionName?: string;
}
type RecursivePartial<T> = {
[P in keyof T]?: T[P] extends Array<infer U>
? Array<RecursivePartial<U>>
: T[P] extends object | undefined
? RecursivePartial<T[P]>
: T[P];
};

export function SloCallout({
dismissCallout,
serviceName,
environment,
transactionType,
transactionName,
}: Props) {
const { core } = useApmPluginContext();
const { basePath } = core.http;

const sloInput: RecursivePartial<CreateSLOInput> = {
indicator: {
type: 'sli.apm.transactionErrorRate',
params: {
service: serviceName,
environment,
transactionName: transactionName ?? '',
transactionType: transactionType ?? '',
},
},
};
const sloParams = `?_a=${encode(sloInput)}`;

return (
<EuiCallOut
title={i18n.translate('xpack.apm.slo.callout.title', {
defaultMessage: 'Respond quicker with SLOs',
})}
iconType="lock"
>
<EuiFlexGroup direction="row" gutterSize="s" alignItems="center">
<EuiFlexItem>
<p>
<FormattedMessage
id="xpack.apm.slo.callout.description"
defaultMessage="How quickly will you respond if the service goes down? Keep the performance, speed and user experience high with a SLO"
/>
</p>
</EuiFlexItem>
<EuiFlexItem grow={false}>
<EuiFlexGroup>
<EuiFlexItem>
<EuiLink
data-test-subj="apmCreateSloLink"
href={basePath.prepend(
`/app/observability/slos/create${sloParams}`
)}
>
<EuiButton
data-test-subj="apmSloCalloutCreateSloButton"
onClick={() => {
dismissCallout();
}}
>
{i18n.translate('xpack.apm.slo.callout.createButton', {
defaultMessage: 'Create SLO',
})}
</EuiButton>
</EuiLink>
</EuiFlexItem>
<EuiFlexItem>
<EuiButton
color="text"
data-test-subj="apmSloDismissButton"
onClick={() => {
dismissCallout();
}}
>
{i18n.translate('xpack.apm.slo.callout.dimissButton', {
defaultMessage: 'Hide this',
})}
</EuiButton>
</EuiFlexItem>
</EuiFlexGroup>
</EuiFlexItem>
</EuiFlexGroup>
</EuiCallOut>
);
}
1 change: 1 addition & 0 deletions x-pack/plugins/apm/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@
"@kbn/dashboard-plugin",
"@kbn/controls-plugin",
"@kbn/core-http-server",
"@kbn/slo-schema",
],
"exclude": [
"target/**/*",
Expand Down

0 comments on commit ea0935f

Please sign in to comment.