Enable "Event Generating Elements Should Be Instrumented" ESLint rule for more O11y Apps (#165647)

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
Coen Warmer 2023-09-05 21:48:03 +02:00 committed by GitHub
parent 33dcda7b70
commit 772bc0c598
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
80 changed files with 172 additions and 20 deletions

View file

@ -909,11 +909,15 @@ module.exports = {
{ {
files: [ files: [
'x-pack/plugins/apm/**/*.{js,mjs,ts,tsx}', 'x-pack/plugins/apm/**/*.{js,mjs,ts,tsx}',
'x-pack/plugins/observability/**/*.{js,mjs,ts,tsx}',
'x-pack/plugins/exploratory_view/**/*.{js,mjs,ts,tsx}', 'x-pack/plugins/exploratory_view/**/*.{js,mjs,ts,tsx}',
'x-pack/plugins/ux/**/*.{js,mjs,ts,tsx}',
'x-pack/plugins/synthetics/**/*.{js,mjs,ts,tsx}',
'x-pack/plugins/infra/**/*.{js,mjs,ts,tsx}', 'x-pack/plugins/infra/**/*.{js,mjs,ts,tsx}',
'x-pack/plugins/observability/**/*.{js,mjs,ts,tsx}',
'x-pack/plugins/observability_ai_assistant/**/*.{js,mjs,ts,tsx}',
'x-pack/plugins/observability_onboarding/**/*.{js,mjs,ts,tsx}',
'x-pack/plugins/observability_shared/**/*.{js,mjs,ts,tsx}',
'x-pack/plugins/profiling/**/*.{js,mjs,ts,tsx}',
'x-pack/plugins/synthetics/**/*.{js,mjs,ts,tsx}',
'x-pack/plugins/ux/**/*.{js,mjs,ts,tsx}',
], ],
rules: { rules: {
'@kbn/telemetry/event_generating_elements_should_be_instrumented': 'error', '@kbn/telemetry/event_generating_elements_should_be_instrumented': 'error',

View file

@ -37,7 +37,7 @@ export function checkNodeForExistingDataTestSubjProp(
const variable = getScope().variables.find((v) => v.name === name); // the variable definition of the spreaded variable const variable = getScope().variables.find((v) => v.name === name); // the variable definition of the spreaded variable
return variable && variable.defs.length > 0 return variable && variable.defs.length > 0
? variable.defs[0].node.init.properties.find((property: TSESTree.Property) => { ? variable.defs[0].node.init?.properties.find((property: TSESTree.Property) => {
if ('value' in property.key) { if ('value' in property.key) {
return property.key.value === 'data-test-subj'; return property.key.value === 'data-test-subj';
} }

View file

@ -63,7 +63,8 @@ for (const [name, tester] of [tsTester, babelTester]) {
], ],
output: `<${element} data-test-subj="Value${element output: `<${element} data-test-subj="Value${element
.replace('Eui', '') .replace('Eui', '')
.replace('Empty', '')}">Value</${element}>`, .replace('Empty', '')
.replace('Icon', '')}">Value</${element}>`,
})), })),
} }
); );

View file

@ -17,6 +17,7 @@ import { getFunctionName } from '../helpers/get_function_name';
export const EVENT_GENERATING_ELEMENTS = [ export const EVENT_GENERATING_ELEMENTS = [
'EuiButton', 'EuiButton',
'EuiButtonEmpty', 'EuiButtonEmpty',
'EuiButtonIcon',
'EuiLink', 'EuiLink',
'EuiFieldText', 'EuiFieldText',
'EuiFieldSearch', 'EuiFieldSearch',
@ -74,7 +75,7 @@ export const EventGeneratingElementsShouldBeInstrumented: Rule.RuleModule = {
const intent = getIntentFromNode(parent); const intent = getIntentFromNode(parent);
// 4. The element name that generates the events // 4. The element name that generates the events
const element = name.replace('Eui', '').replace('Empty', ''); const element = name.replace('Eui', '').replace('Empty', '').replace('Icon', '');
const suggestion = `${appName}${componentName}${intent}${element}`; // 'o11yHeaderActionsSubmitButton' const suggestion = `${appName}${componentName}${intent}${element}`; // 'o11yHeaderActionsSubmitButton'

View file

@ -51,6 +51,7 @@ export function HelpPopoverButton({
return ( return (
<EuiButtonIcon <EuiButtonIcon
data-test-subj="apmHelpPopoverButtonButton"
className="apmHelpPopover__buttonIcon" className="apmHelpPopover__buttonIcon"
size="s" size="s"
iconType="help" iconType="help"

View file

@ -53,6 +53,7 @@ function ConfigurationValueColumn({
</EuiText> </EuiText>
{value && ( {value && (
<EuiButtonIcon <EuiButtonIcon
data-test-subj="apmConfigurationValueColumnButton"
aria-label={i18n.translate( aria-label={i18n.translate(
'xpack.apm.onboarding.column.value.copyIconText', 'xpack.apm.onboarding.column.value.copyIconText',
{ {

View file

@ -152,6 +152,7 @@ function ConfigurationValueColumn({
</EuiText> </EuiText>
{value && ( {value && (
<EuiButtonIcon <EuiButtonIcon
data-test-subj="apmConfigurationValueColumnButton"
aria-label={i18n.translate( aria-label={i18n.translate(
'xpack.apm.onboarding.otel.column.value.copyIconText', 'xpack.apm.onboarding.otel.column.value.copyIconText',
{ {

View file

@ -202,6 +202,7 @@ export function AgentConfigurationList({
name: '', name: '',
render: (config: Config) => ( render: (config: Config) => (
<EuiButtonIcon <EuiButtonIcon
data-test-subj="apmColumnsButton"
aria-label="Edit" aria-label="Edit"
iconType="pencil" iconType="pencil"
href={apmRouter.link('/settings/agent-configuration/edit', { href={apmRouter.link('/settings/agent-configuration/edit', {
@ -218,6 +219,7 @@ export function AgentConfigurationList({
name: '', name: '',
render: (config: Config) => ( render: (config: Config) => (
<EuiButtonIcon <EuiButtonIcon
data-test-subj="apmColumnsButton"
aria-label="Delete" aria-label="Delete"
iconType="trash" iconType="trash"
onClick={() => setConfigToBeDeleted(config)} onClick={() => setConfigToBeDeleted(config)}

View file

@ -58,6 +58,7 @@ export function AgentKeyCallOut({ name, token }: Props) {
<EuiCopy textToCopy={token}> <EuiCopy textToCopy={token}>
{(copy) => ( {(copy) => (
<EuiButtonIcon <EuiButtonIcon
data-test-subj="apmAgentKeyCallOutButton"
iconType="copyClipboard" iconType="copyClipboard"
onClick={copy} onClick={copy}
color="success" color="success"

View file

@ -99,6 +99,7 @@ export function DiscoveryRule({
<EuiFlexGroup> <EuiFlexGroup>
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="apmDiscoveryRuleButton"
iconType="pencil" iconType="pencil"
color="primary" color="primary"
onClick={() => { onClick={() => {
@ -108,6 +109,7 @@ export function DiscoveryRule({
</EuiFlexItem> </EuiFlexItem>
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="apmDiscoveryRuleButton"
iconType="trash" iconType="trash"
color="danger" color="danger"
onClick={() => { onClick={() => {

View file

@ -28,6 +28,7 @@ export function PopoverTooltip({
closePopover={() => setIsPopoverOpen(false)} closePopover={() => setIsPopoverOpen(false)}
button={ button={
<EuiButtonIcon <EuiButtonIcon
data-test-subj="apmPopoverTooltipButton"
aria-label={ariaLabel} aria-label={ariaLabel}
onClick={(event: React.MouseEvent<HTMLButtonElement>) => { onClick={(event: React.MouseEvent<HTMLButtonElement>) => {
setIsPopoverOpen(!isPopoverOpen); setIsPopoverOpen(!isPopoverOpen);

View file

@ -142,6 +142,7 @@ export function SpanLinksTable({ items }: Props) {
<EuiPopover <EuiPopover
button={ button={
<EuiButtonIcon <EuiButtonIcon
data-test-subj="apmColumnsButton"
aria-label="Edit" aria-label="Edit"
iconType="boxesHorizontal" iconType="boxesHorizontal"
onClick={() => { onClick={() => {

View file

@ -83,6 +83,7 @@ export function OpenTelemetryInstructions({
</EuiText> </EuiText>
{value && ( {value && (
<EuiButtonIcon <EuiButtonIcon
data-test-subj="apmColumnsButton"
aria-label={i18n.translate( aria-label={i18n.translate(
'xpack.apm.tutorial.config_otel.column.value.copyIconText', 'xpack.apm.tutorial.config_otel.column.value.copyIconText',
{ {

View file

@ -136,6 +136,7 @@ export function SelectableUrlList({
</EuiFlexItem> </EuiFlexItem>
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="exploratoryViewPopOverTitleButton"
color="text" color="text"
onClick={() => closePopover()} onClick={() => closePopover()}
aria-label={i18n.translate('xpack.exploratoryView.search.url.close', { aria-label={i18n.translate('xpack.exploratoryView.search.url.close', {

View file

@ -72,6 +72,7 @@ export function SeriesActions({ seriesId, series, seriesConfig, onEditClick }: P
const popoverButton = ( const popoverButton = (
<EuiButtonIcon <EuiButtonIcon
data-test-subj="exploratoryViewSeriesActionsButton"
iconType="boxesHorizontal" iconType="boxesHorizontal"
onClick={changePopoverVisibility} onClick={changePopoverVisibility}
color="text" color="text"

View file

@ -101,6 +101,7 @@ export function SeriesName({ series, seriesId }: Props) {
)} )}
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="exploratoryViewSeriesNameButton"
onClick={() => setIsEditingEnabled(!isEditingEnabled)} onClick={() => setIsEditingEnabled(!isEditingEnabled)}
iconType="pencil" iconType="pencil"
aria-label={i18n.translate('xpack.exploratoryView.expView.seriesEditor.editName', { aria-label={i18n.translate('xpack.exploratoryView.expView.seriesEditor.editName', {

View file

@ -578,6 +578,7 @@ export const ExpressionRow: React.FC<ExpressionRowProps> = (props) => {
<EuiFlexGroup gutterSize="xs"> <EuiFlexGroup gutterSize="xs">
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraExpressionRowButton"
iconType={isExpanded ? 'arrowDown' : 'arrowRight'} iconType={isExpanded ? 'arrowDown' : 'arrowRight'}
onClick={toggle} onClick={toggle}
aria-label={i18n.translate('xpack.infra.metrics.alertFlyout.expandRowLabel', { aria-label={i18n.translate('xpack.infra.metrics.alertFlyout.expandRowLabel', {
@ -629,6 +630,7 @@ export const ExpressionRow: React.FC<ExpressionRowProps> = (props) => {
/> />
</StyledHealth> </StyledHealth>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraExpressionRowButton"
aria-label={i18n.translate( aria-label={i18n.translate(
'xpack.infra.metrics.alertFlyout.removeWarningThreshold', 'xpack.infra.metrics.alertFlyout.removeWarningThreshold',
{ {
@ -668,6 +670,7 @@ export const ExpressionRow: React.FC<ExpressionRowProps> = (props) => {
{canDelete && ( {canDelete && (
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraExpressionRowButton"
aria-label={i18n.translate('xpack.infra.metrics.alertFlyout.removeCondition', { aria-label={i18n.translate('xpack.infra.metrics.alertFlyout.removeCondition', {
defaultMessage: 'Remove condition', defaultMessage: 'Remove condition',
})} })}

View file

@ -330,6 +330,7 @@ export const ClosablePopoverTitle = ({ children, onClose }: ClosablePopoverTitle
<EuiFlexItem>{children}</EuiFlexItem> <EuiFlexItem>{children}</EuiFlexItem>
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraClosablePopoverTitleButton"
iconType="cross" iconType="cross"
color="danger" color="danger"
aria-label={i18n.translate( aria-label={i18n.translate(

View file

@ -98,6 +98,7 @@ export const ClosablePopoverTitle = ({ children, onClose }: ClosablePopoverTitle
<EuiFlexItem>{children}</EuiFlexItem> <EuiFlexItem>{children}</EuiFlexItem>
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraClosablePopoverTitleButton"
iconType="cross" iconType="cross"
color="danger" color="danger"
aria-label={i18n.translate( aria-label={i18n.translate(

View file

@ -295,6 +295,7 @@ export const Criterion: React.FC<Props> = ({
{canDelete && ( {canDelete && (
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraCriterionButton"
aria-label={i18n.translate('xpack.infra.logs.alertFlyout.removeCondition', { aria-label={i18n.translate('xpack.infra.logs.alertFlyout.removeCondition', {
defaultMessage: 'Remove condition', defaultMessage: 'Remove condition',
})} })}

View file

@ -100,6 +100,7 @@ export const ClosablePopoverTitle = ({ children, onClose }: ClosablePopoverTitle
<EuiFlexItem>{children}</EuiFlexItem> <EuiFlexItem>{children}</EuiFlexItem>
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraClosablePopoverTitleButton"
iconType="cross" iconType="cross"
color="danger" color="danger"
aria-label={i18n.translate( aria-label={i18n.translate(

View file

@ -123,6 +123,7 @@ export const ClosablePopoverTitle = ({ children, onClose }: ClosablePopoverTitle
<EuiFlexItem>{children}</EuiFlexItem> <EuiFlexItem>{children}</EuiFlexItem>
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraClosablePopoverTitleButton"
iconType="cross" iconType="cross"
color="danger" color="danger"
aria-label={i18n.translate( aria-label={i18n.translate(

View file

@ -18,6 +18,7 @@ export const MetricRowControls = ({ onDelete, disableDelete }: MetricRowControlP
<> <>
<EuiFlexItem grow={0}> <EuiFlexItem grow={0}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraMetricRowControlsButton"
iconType="trash" iconType="trash"
color="danger" color="danger"
style={{ marginBottom: '0.2em' }} style={{ marginBottom: '0.2em' }}

View file

@ -316,6 +316,7 @@ export const ExpressionRow: React.FC<ExpressionRowProps> = (props) => {
/> />
</StyledHealth> </StyledHealth>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraExpressionRowButton"
aria-label={i18n.translate( aria-label={i18n.translate(
'xpack.infra.metrics.alertFlyout.removeWarningThreshold', 'xpack.infra.metrics.alertFlyout.removeWarningThreshold',
{ {
@ -350,6 +351,7 @@ export const ExpressionRow: React.FC<ExpressionRowProps> = (props) => {
{canDelete && ( {canDelete && (
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraExpressionRowButton"
aria-label={i18n.translate('xpack.infra.metrics.alertFlyout.removeCondition', { aria-label={i18n.translate('xpack.infra.metrics.alertFlyout.removeCondition', {
defaultMessage: 'Remove condition', defaultMessage: 'Remove condition',
})} })}

View file

@ -27,6 +27,7 @@ export const RowExpansionButton = <Item extends any>({
return ( return (
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraRowExpansionButtonButton"
onClick={handleClick} onClick={handleClick}
aria-label={isExpanded ? collapseAriaLabel : expandAriaLabel} aria-label={isExpanded ? collapseAriaLabel : expandAriaLabel}
iconType={isExpanded ? 'arrowUp' : 'arrowDown'} iconType={isExpanded ? 'arrowUp' : 'arrowDown'}

View file

@ -114,6 +114,7 @@ export const LogHighlightsMenu: React.FC<LogHighlightsMenuProps> = ({
</EuiFlexItem> </EuiFlexItem>
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraLogHighlightsMenuButton"
aria-label={goToPreviousHighlightLabel} aria-label={goToPreviousHighlightLabel}
iconType="arrowUp" iconType="arrowUp"
onClick={goToPreviousHighlight} onClick={goToPreviousHighlight}
@ -123,6 +124,7 @@ export const LogHighlightsMenu: React.FC<LogHighlightsMenuProps> = ({
</EuiFlexItem> </EuiFlexItem>
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraLogHighlightsMenuButton"
aria-label={goToNextHighlightLabel} aria-label={goToNextHighlightLabel}
iconType="arrowDown" iconType="arrowDown"
onClick={goToNextHighlight} onClick={goToNextHighlight}
@ -132,6 +134,7 @@ export const LogHighlightsMenu: React.FC<LogHighlightsMenuProps> = ({
</EuiFlexItem> </EuiFlexItem>
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraLogHighlightsMenuButton"
aria-label={clearTermsButtonLabel} aria-label={clearTermsButtonLabel}
color="danger" color="danger"
isDisabled={highlightTerm === ''} isDisabled={highlightTerm === ''}

View file

@ -39,6 +39,7 @@ function HideableReactQueryDevTools() {
return !isHidden ? ( return !isHidden ? (
<div> <div>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraHideableReactQueryDevToolsButton"
iconType="cross" iconType="cross"
color="primary" color="primary"
style={{ zIndex: 99999, position: 'fixed', bottom: '40px', left: '40px' }} style={{ zIndex: 99999, position: 'fixed', bottom: '40px', left: '40px' }}

View file

@ -299,6 +299,7 @@ const PaginationControls = ({
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiFlexGroup> <EuiFlexGroup>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraPaginationControlsButton"
iconType="arrowLeft" iconType="arrowLeft"
isDisabled={!fetchPreviousPage || isLoading} isDisabled={!fetchPreviousPage || isLoading}
onClick={fetchPreviousPage} onClick={fetchPreviousPage}
@ -308,6 +309,7 @@ const PaginationControls = ({
<strong>{page}</strong> <strong>{page}</strong>
</span> </span>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraPaginationControlsButton"
iconType="arrowRight" iconType="arrowRight"
isDisabled={!fetchNextPage || isLoading} isDisabled={!fetchNextPage || isLoading}
onClick={fetchNextPage} onClick={fetchNextPage}

View file

@ -146,6 +146,7 @@ const AnomalyActionMenu = ({
panelPaddingSize="none" panelPaddingSize="none"
button={ button={
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraAnomalyActionMenuButton"
iconType="boxesHorizontal" iconType="boxesHorizontal"
onClick={handleToggleMenu} onClick={handleToggleMenu}
aria-label={i18n.translate('xpack.infra.ml.anomalyFlyout.actions.openActionMenu', { aria-label={i18n.translate('xpack.infra.ml.anomalyFlyout.actions.openActionMenu', {

View file

@ -36,6 +36,7 @@ export const PaginationControls = ({
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiFlexGroup> <EuiFlexGroup>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraPaginationControlsButton"
iconType="arrowLeft" iconType="arrowLeft"
isDisabled={!fetchPreviousPage || isLoading} isDisabled={!fetchPreviousPage || isLoading}
onClick={fetchPreviousPage} onClick={fetchPreviousPage}
@ -45,6 +46,7 @@ export const PaginationControls = ({
<strong>{page}</strong> <strong>{page}</strong>
</span> </span>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraPaginationControlsButton"
iconType="arrowRight" iconType="arrowRight"
isDisabled={!fetchNextPage || isLoading} isDisabled={!fetchNextPage || isLoading}
onClick={fetchNextPage} onClick={fetchNextPage}

View file

@ -148,7 +148,12 @@ export const NodeContextPopover = ({
</EuiButtonEmpty> </EuiButtonEmpty>
</EuiFlexItem> </EuiFlexItem>
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon size="s" onClick={onClose} iconType="cross" /> <EuiButtonIcon
data-test-subj="infraNodeContextPopoverButton"
size="s"
onClick={onClose}
iconType="cross"
/>
</EuiFlexItem> </EuiFlexItem>
</EuiFlexGroup> </EuiFlexGroup>
</EuiFlexItem> </EuiFlexItem>

View file

@ -65,6 +65,7 @@ export const Table = (props: Props) => {
)} )}
> >
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraColumnsButton"
color="text" color="text"
size="s" size="s"
iconType="filter" iconType="filter"

View file

@ -39,6 +39,7 @@ export const MetricsEditMode = withTheme(
> >
<EuiFlexItem grow={false} style={{ width: ICON_WIDTH }}> <EuiFlexItem grow={false} style={{ width: ICON_WIDTH }}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraMetricsEditModeButton"
iconType="pencil" iconType="pencil"
onClick={() => onEdit(metric)} onClick={() => onEdit(metric)}
aria-label={i18n.translate( aria-label={i18n.translate(
@ -55,6 +56,7 @@ export const MetricsEditMode = withTheme(
</EuiFlexItem> </EuiFlexItem>
<EuiFlexItem grow={false} style={{ width: ICON_WIDTH, textAlign: 'right' }}> <EuiFlexItem grow={false} style={{ width: ICON_WIDTH, textAlign: 'right' }}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraMetricsEditModeButton"
iconType="trash" iconType="trash"
color="danger" color="danger"
onClick={() => onDelete(metric)} onClick={() => onDelete(metric)}

View file

@ -142,6 +142,7 @@ export const MetadataDetails = (props: Props) => {
{filteredFields.length > NUMBER_OF_COLUMNS ? ( {filteredFields.length > NUMBER_OF_COLUMNS ? (
<Controls> <Controls>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="infraMetadataDetailsButton"
iconType={isOpen ? 'arrowUp' : 'arrowDown'} iconType={isOpen ? 'arrowUp' : 'arrowDown'}
onClick={toggleIsOpen} onClick={toggleIsOpen}
aria-label={i18n.translate('xpack.infra.nodeDetails.labels.showMoreDetails', { aria-label={i18n.translate('xpack.infra.nodeDetails.labels.showMoreDetails', {

View file

@ -21,6 +21,7 @@ export function ClosablePopoverTitle({ children, onClose }: ClosablePopoverTitle
<EuiFlexItem>{children}</EuiFlexItem> <EuiFlexItem>{children}</EuiFlexItem>
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="o11yClosablePopoverTitleButton"
iconType="cross" iconType="cross"
color="danger" color="danger"
aria-label={i18n.translate( aria-label={i18n.translate(

View file

@ -18,6 +18,7 @@ export function MetricRowControls({ onDelete, disableDelete }: MetricRowControlP
<> <>
<EuiFlexItem grow={0}> <EuiFlexItem grow={0}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="o11yMetricRowControlsButton"
aria-label={DELETE_LABEL} aria-label={DELETE_LABEL}
iconType="trash" iconType="trash"
color="danger" color="danger"

View file

@ -173,6 +173,7 @@ export const ExpressionRow: React.FC<ExpressionRowProps> = (props) => {
{canDelete && ( {canDelete && (
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="o11yExpressionRowButton"
aria-label={i18n.translate( aria-label={i18n.translate(
'xpack.observability.threshold.rule.alertFlyout.removeCondition', 'xpack.observability.threshold.rule.alertFlyout.removeCondition',
{ {

View file

@ -216,6 +216,7 @@ export function AlertActions({
})} })}
> >
<EuiButtonIcon <EuiButtonIcon
data-test-subj="o11yAlertActionsButton"
aria-label={i18n.translate('xpack.observability.alertsTable.viewInAppTextLabel', { aria-label={i18n.translate('xpack.observability.alertsTable.viewInAppTextLabel', {
defaultMessage: 'View in app', defaultMessage: 'View in app',
})} })}

View file

@ -62,6 +62,7 @@ export function WebCoreVitalsTitle({
isOpen={isPopoverOpen} isOpen={isPopoverOpen}
button={ button={
<EuiButtonIcon <EuiButtonIcon
data-test-subj="o11yWebCoreVitalsTitleButton"
aria-label={helpAriaLabel} aria-label={helpAriaLabel}
onClick={() => setIsPopoverOpen(true)} onClick={() => setIsPopoverOpen(true)}
color={'text'} color={'text'}
@ -110,6 +111,7 @@ export function WebCoreVitalsTitle({
isOpen={isBrowserPopoverOpen} isOpen={isBrowserPopoverOpen}
button={ button={
<EuiButtonIcon <EuiButtonIcon
data-test-subj="o11yWebCoreVitalsTitleButton"
aria-label={helpAriaLabel} aria-label={helpAriaLabel}
onClick={() => setIsBrowserPopoverOpen(true)} onClick={() => setIsBrowserPopoverOpen(true)}
color={'text'} color={'text'}

View file

@ -213,6 +213,7 @@ export function MetricIndicator({ type, indexFields, isLoadingIndex }: MetricInd
</EuiFlexItem> </EuiFlexItem>
<EuiFlexItem grow={0}> <EuiFlexItem grow={0}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="o11yMetricIndicatorButton"
iconType="trash" iconType="trash"
color="danger" color="danger"
style={{ marginTop: '1.5em' }} style={{ marginTop: '1.5em' }}

View file

@ -178,6 +178,7 @@ export function SloListItem({
anchorPosition="downLeft" anchorPosition="downLeft"
button={ button={
<EuiButtonIcon <EuiButtonIcon
data-test-subj="o11ySloListItemButton"
aria-label={i18n.translate('xpack.observability.slo.item.actions.button', { aria-label={i18n.translate('xpack.observability.slo.item.actions.button', {
defaultMessage: 'Actions', defaultMessage: 'Actions',
})} })}

View file

@ -89,6 +89,7 @@ function Lens({
<EuiFlexGroup direction="row" gutterSize="s" justifyContent="flexEnd"> <EuiFlexGroup direction="row" gutterSize="s" justifyContent="flexEnd">
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButton <EuiButton
data-test-subj="observabilityAiAssistantLensOpenInLensButton"
iconType="lensApp" iconType="lensApp"
onClick={() => { onClick={() => {
lens.navigateToPrefilledEditor(lensEmbeddableInput); lens.navigateToPrefilledEditor(lensEmbeddableInput);
@ -101,6 +102,7 @@ function Lens({
</EuiFlexItem> </EuiFlexItem>
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButton <EuiButton
data-test-subj="observabilityAiAssistantLensSaveButton"
iconType="save" iconType="save"
onClick={() => { onClick={() => {
setIsSaveModalOpen(() => true); setIsSaveModalOpen(() => true);

View file

@ -93,6 +93,7 @@ export function ApiKeyBanner({
<EuiCopy textToCopy={payload?.apiKeyEncoded ?? ''}> <EuiCopy textToCopy={payload?.apiKeyEncoded ?? ''}>
{(copy) => ( {(copy) => (
<EuiButtonIcon <EuiButtonIcon
data-test-subj="observabilityOnboardingApiKeySuccessCalloutButton"
iconType="copyClipboard" iconType="copyClipboard"
onClick={copy} onClick={copy}
color="success" color="success"

View file

@ -17,6 +17,7 @@ export function BackButton({ onBack }: { onBack: () => void }) {
return ( return (
<EuiButtonEmpty <EuiButtonEmpty
data-test-subj="observabilityOnboardingBackButtonBackButton"
iconType="arrowLeft" iconType="arrowLeft"
color="primary" color="primary"
onClick={onBack} onClick={onBack}

View file

@ -174,6 +174,7 @@ export function ConfigureLogs() {
items={[ items={[
<BackButton onBack={goBack} />, <BackButton onBack={goBack} />,
<EuiButton <EuiButton
data-test-subj="observabilityOnboardingConfigureLogsButton"
color="primary" color="primary"
fill fill
onClick={onContinue} onClick={onContinue}
@ -234,6 +235,7 @@ export function ConfigureLogs() {
<EuiFlexGroup alignItems="center" gutterSize="xs"> <EuiFlexGroup alignItems="center" gutterSize="xs">
<EuiFlexItem> <EuiFlexItem>
<EuiFieldText <EuiFieldText
data-test-subj="observabilityOnboardingConfigureLogsFieldText"
placeholder={i18n.translate( placeholder={i18n.translate(
'xpack.observability_onboarding.configureLogs.logFile.placeholder', 'xpack.observability_onboarding.configureLogs.logFile.placeholder',
{ {
@ -247,6 +249,7 @@ export function ConfigureLogs() {
{index > 0 && ( {index > 0 && (
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="observabilityOnboardingConfigureLogsButton"
iconType="trash" iconType="trash"
aria-label="Delete" aria-label="Delete"
onClick={() => removeLogFilePath(index)} onClick={() => removeLogFilePath(index)}
@ -265,7 +268,11 @@ export function ConfigureLogs() {
gutterSize="xs" gutterSize="xs"
> >
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonEmpty iconType="plusInCircle" onClick={addLogFilePath}> <EuiButtonEmpty
data-test-subj="observabilityOnboardingConfigureLogsAddRowButton"
iconType="plusInCircle"
onClick={addLogFilePath}
>
{i18n.translate( {i18n.translate(
'xpack.observability_onboarding.configureLogs.logFile.addRow', 'xpack.observability_onboarding.configureLogs.logFile.addRow',
{ {
@ -313,6 +320,7 @@ export function ConfigureLogs() {
} }
> >
<EuiFieldText <EuiFieldText
data-test-subj="observabilityOnboardingConfigureLogsFieldText"
placeholder={i18n.translate( placeholder={i18n.translate(
'xpack.observability_onboarding.configureLogs.serviceName.placeholder', 'xpack.observability_onboarding.configureLogs.serviceName.placeholder',
{ {
@ -387,6 +395,7 @@ export function ConfigureLogs() {
values={{ values={{
learnMoreLink: ( learnMoreLink: (
<EuiLink <EuiLink
data-test-subj="observabilityOnboardingConfigureLogsLearnMoreLink"
external external
target="_blank" target="_blank"
href={ href={
@ -406,6 +415,7 @@ export function ConfigureLogs() {
} }
> >
<EuiFieldText <EuiFieldText
data-test-subj="observabilityOnboardingConfigureLogsFieldText"
placeholder={i18n.translate( placeholder={i18n.translate(
'xpack.observability_onboarding.configureLogs.namespace.placeholder', 'xpack.observability_onboarding.configureLogs.namespace.placeholder',
{ {
@ -431,6 +441,7 @@ export function ConfigureLogs() {
values={{ values={{
learnMoreLink: ( learnMoreLink: (
<EuiLink <EuiLink
data-test-subj="observabilityOnboardingConfigureLogsLearnMoreLink"
external external
target="_blank" target="_blank"
href={ href={
@ -450,6 +461,7 @@ export function ConfigureLogs() {
} }
> >
<EuiTextArea <EuiTextArea
data-test-subj="observabilityOnboardingConfigureLogsTextArea"
value={customConfigurations} value={customConfigurations}
onChange={(event) => onChange={(event) =>
setCustomConfigurations(event.target.value) setCustomConfigurations(event.target.value)
@ -514,6 +526,7 @@ export function ConfigureLogs() {
error={integrationNameError} error={integrationNameError}
> >
<EuiFieldText <EuiFieldText
data-test-subj="observabilityOnboardingConfigureLogsFieldText"
placeholder={i18n.translate( placeholder={i18n.translate(
'xpack.observability_onboarding.configureLogs.integration.placeholder', 'xpack.observability_onboarding.configureLogs.integration.placeholder',
{ {
@ -568,6 +581,7 @@ export function ConfigureLogs() {
error={datasetNameError} error={datasetNameError}
> >
<EuiFieldText <EuiFieldText
data-test-subj="observabilityOnboardingConfigureLogsFieldText"
placeholder={i18n.translate( placeholder={i18n.translate(
'xpack.observability_onboarding.configureLogs.dataset.placeholder', 'xpack.observability_onboarding.configureLogs.dataset.placeholder',
{ {

View file

@ -233,7 +233,10 @@ export function InstallElasticAgent() {
<BackButton onBack={goBack} />, <BackButton onBack={goBack} />,
<EuiFlexGroup justifyContent="flexEnd" alignItems="center"> <EuiFlexGroup justifyContent="flexEnd" alignItems="center">
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonEmpty onClick={onInspect}> <EuiButtonEmpty
data-test-subj="observabilityOnboardingInstallElasticAgentInspectButton"
onClick={onInspect}
>
{i18n.translate( {i18n.translate(
'xpack.observability_onboarding.steps.inspect', 'xpack.observability_onboarding.steps.inspect',
{ defaultMessage: 'Inspect' } { defaultMessage: 'Inspect' }
@ -242,6 +245,7 @@ export function InstallElasticAgent() {
</EuiFlexItem> </EuiFlexItem>
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButton <EuiButton
data-test-subj="observabilityOnboardingInstallElasticAgentExploreLogsButton"
color="success" color="success"
fill fill
iconType="magnifyWithPlus" iconType="magnifyWithPlus"

View file

@ -48,7 +48,11 @@ export function SelectLogs() {
panelFooter={ panelFooter={
<StepPanelFooter <StepPanelFooter
items={[ items={[
<EuiButton color="text" onClick={onBack}> <EuiButton
data-test-subj="observabilityOnboardingSelectLogsBackButton"
color="text"
onClick={onBack}
>
{i18n.translate('xpack.observability_onboarding.steps.back', { {i18n.translate('xpack.observability_onboarding.steps.back', {
defaultMessage: 'Back', defaultMessage: 'Back',
})} })}
@ -183,6 +187,7 @@ export function SelectLogs() {
</EuiFlexGroup> </EuiFlexGroup>
<EuiSpacer size="m" /> <EuiSpacer size="m" />
<EuiLink <EuiLink
data-test-subj="observabilityOnboardingSelectLogsExploreOtherIntegrationsLink"
href="#" href="#"
target="_blank" target="_blank"
onClick={(event: MouseEvent) => { onClick={(event: MouseEvent) => {

View file

@ -334,6 +334,7 @@ export function Home() {
</StyledItem> </StyledItem>
<StyledItem> <StyledItem>
<EuiLink <EuiLink
data-test-subj="observabilityOnboardingHomeAwsFirehoseLink"
href="https://www.elastic.co/guide/en/kinesis/current/aws-firehose-setup-guide.html" href="https://www.elastic.co/guide/en/kinesis/current/aws-firehose-setup-guide.html"
target="_blank" target="_blank"
external external

View file

@ -194,7 +194,11 @@ export function InstallElasticAgent() {
panelFooter={ panelFooter={
<StepPanelFooter <StepPanelFooter
items={[ items={[
<EuiButton color="text" onClick={onBack}> <EuiButton
data-test-subj="observabilityOnboardingInstallElasticAgentBackButton"
color="text"
onClick={onBack}
>
{i18n.translate( {i18n.translate(
'xpack.observability_onboarding.systemLogs.back', 'xpack.observability_onboarding.systemLogs.back',
{ defaultMessage: 'Back' } { defaultMessage: 'Back' }

View file

@ -221,6 +221,7 @@ export function InstallElasticAgentSteps<PlatformId extends string>({
values={{ values={{
hostRequirementsLink: ( hostRequirementsLink: (
<EuiLink <EuiLink
data-test-subj="observabilityOnboardingInstallElasticAgentStepsHostRequirementsAndOtherInstallationOptionsLink"
external external
href="https://www.elastic.co/guide/en/fleet/8.7/elastic-agent-installation.html" href="https://www.elastic.co/guide/en/fleet/8.7/elastic-agent-installation.html"
> >

View file

@ -13,6 +13,7 @@ export function TroubleshootingLink() {
return ( return (
<EuiFlexGroup alignItems="center" justifyContent="center"> <EuiFlexGroup alignItems="center" justifyContent="center">
<EuiButtonEmpty <EuiButtonEmpty
data-test-subj="observabilityOnboardingTroubleshootingLinkTroubleshootingButton"
iconType="help" iconType="help"
color="primary" color="primary"
href="https://www.elastic.co/guide/en/observability/current/logs-troubleshooting.html" href="https://www.elastic.co/guide/en/observability/current/logs-troubleshooting.html"

View file

@ -130,6 +130,7 @@ export function CheckSetup({ children }: { children: React.ReactElement }) {
values={{ values={{
dataRetentionLink: ( dataRetentionLink: (
<EuiLink <EuiLink
data-test-subj="profilingCheckSetupControllingDataRetentionLink"
href={`${docLinks.ELASTIC_WEBSITE_URL}/guide/en/elasticsearch/reference/${docLinks.DOC_LINK_VERSION}/set-up-lifecycle-policy.html`} href={`${docLinks.ELASTIC_WEBSITE_URL}/guide/en/elasticsearch/reference/${docLinks.DOC_LINK_VERSION}/set-up-lifecycle-policy.html`}
target="_blank" target="_blank"
> >
@ -152,6 +153,7 @@ export function CheckSetup({ children }: { children: React.ReactElement }) {
}, },
button: ( button: (
<EuiButton <EuiButton
data-test-subj="profilingCheckSetupButton"
disabled={postSetupLoading} disabled={postSetupLoading}
onClick={(event) => { onClick={(event) => {
event.preventDefault(); event.preventDefault();

View file

@ -160,7 +160,12 @@ export function FlameGraphTooltip({
style={{ background: theme.euiTheme.border.color }} style={{ background: theme.euiTheme.border.color }}
/> />
<EuiFlexItem> <EuiFlexItem>
<EuiButtonEmpty size="s" iconType="inspect" onClick={onShowMoreClick}> <EuiButtonEmpty
data-test-subj="profilingFlameGraphTooltipButton"
size="s"
iconType="inspect"
onClick={onShowMoreClick}
>
<EuiText size="xs"> <EuiText size="xs">
{i18n.translate('xpack.profiling.flameGraphTooltip.showMoreButton', { {i18n.translate('xpack.profiling.flameGraphTooltip.showMoreButton', {
defaultMessage: `Show more information`, defaultMessage: `Show more information`,

View file

@ -41,6 +41,7 @@ export function MissingSymbolsCallout({ frameType }: Props) {
values={{ values={{
readMore: ( readMore: (
<EuiLink <EuiLink
data-test-subj="profilingMissingSymbolsCalloutReadMoreLink"
href={`${docLinks.ELASTIC_WEBSITE_URL}/guide/en/observability/${docLinks.DOC_LINK_VERSION}/profiling-add-symbols.html`} href={`${docLinks.ELASTIC_WEBSITE_URL}/guide/en/observability/${docLinks.DOC_LINK_VERSION}/profiling-add-symbols.html`}
target="_blank" target="_blank"
> >
@ -54,6 +55,7 @@ export function MissingSymbolsCallout({ frameType }: Props) {
/> />
</p> </p>
<EuiButton <EuiButton
data-test-subj="profilingMissingSymbolsCalloutUploadSymbolsButton"
href={router.link('/add-data-instructions', { href={router.link('/add-data-instructions', {
query: { selectedTab: AddDataTabs.Symbols }, query: { selectedTab: AddDataTabs.Symbols },
})} })}
@ -83,7 +85,12 @@ export function MissingSymbolsCallout({ frameType }: Props) {
'Symbols are not available because of an error in the unwinder for this language or an unknown error with the interpreter.', 'Symbols are not available because of an error in the unwinder for this language or an unknown error with the interpreter.',
})} })}
</p> </p>
<EuiButton href={PROFILING_FEEDBACK_LINK} target="_blank" color="warning"> <EuiButton
data-test-subj="profilingMissingSymbolsCalloutReportAProblemButton"
href={PROFILING_FEEDBACK_LINK}
target="_blank"
color="warning"
>
{i18n.translate( {i18n.translate(
'xpack.profiling.frameInformationWindow.missingSymbols.interpreted.reportProblem', 'xpack.profiling.frameInformationWindow.missingSymbols.interpreted.reportProblem',
{ defaultMessage: 'Report a problem' } { defaultMessage: 'Report a problem' }

View file

@ -38,7 +38,11 @@ export function LicensePrompt() {
</p> </p>
} }
actions={[ actions={[
<EuiButton href={manageLicenseURL} fill> <EuiButton
data-test-subj="profilingLicensePromptUpgradeSubscriptionButton"
href={manageLicenseURL}
fill
>
{i18n.translate('xpack.profiling.invalidLicense.subscriptionManagementLink', { {i18n.translate('xpack.profiling.invalidLicense.subscriptionManagementLink', {
defaultMessage: 'Upgrade subscription', defaultMessage: 'Upgrade subscription',
})} })}

View file

@ -95,6 +95,7 @@ export function NormalizationMenu(props: Props) {
prepend={NORMALIZE_BY_LABEL} prepend={NORMALIZE_BY_LABEL}
append={ append={
<EuiButtonIcon <EuiButtonIcon
data-test-subj="profilingNormalizationMenuButton"
iconType="arrowDown" iconType="arrowDown"
aria-label={i18n.translate( aria-label={i18n.translate(
'xpack.profiling.normalizationMenu.menuPopoverButtonAriaLabel', 'xpack.profiling.normalizationMenu.menuPopoverButtonAriaLabel',
@ -191,6 +192,7 @@ export function NormalizationMenu(props: Props) {
prepend={<EuiFormLabel htmlFor={baselineScaleFactorInputId}>{SCALE_LABEL}</EuiFormLabel>} prepend={<EuiFormLabel htmlFor={baselineScaleFactorInputId}>{SCALE_LABEL}</EuiFormLabel>}
> >
<EuiFieldNumber <EuiFieldNumber
data-test-subj="profilingNormalizationMenuFieldNumber"
controlOnly controlOnly
id={baselineScaleFactorInputId} id={baselineScaleFactorInputId}
value={baseline} value={baseline}
@ -219,6 +221,7 @@ export function NormalizationMenu(props: Props) {
prepend={<EuiFormLabel htmlFor={comparisonScaleFactorInputId}>{SCALE_LABEL}</EuiFormLabel>} prepend={<EuiFormLabel htmlFor={comparisonScaleFactorInputId}>{SCALE_LABEL}</EuiFormLabel>}
> >
<EuiFieldNumber <EuiFieldNumber
data-test-subj="profilingNormalizationMenuFieldNumber"
controlOnly controlOnly
id={comparisonScaleFactorInputId} id={comparisonScaleFactorInputId}
value={comparison} value={comparison}
@ -235,6 +238,7 @@ export function NormalizationMenu(props: Props) {
</EuiFormControlLayout> </EuiFormControlLayout>
<EuiSpacer size="m" /> <EuiSpacer size="m" />
<EuiButton <EuiButton
data-test-subj="profilingNormalizationMenuApplyChangesButton"
onClick={() => { onClick={() => {
props.onChange(mode, options); props.onChange(mode, options);
setIsPopoverOpen(false); setIsPopoverOpen(false);

View file

@ -91,6 +91,7 @@ export function PrimaryAndComparisonSearchBar() {
<EuiFlexItem grow={false} style={{ padding: '0 8px' }}> <EuiFlexItem grow={false} style={{ padding: '0 8px' }}>
<EuiToolTip position="top" content="Swap sides"> <EuiToolTip position="top" content="Swap sides">
<EuiButtonIcon <EuiButtonIcon
data-test-subj="profilingPrimaryAndComparisonSearchBarButton"
iconType="merge" iconType="merge"
size="m" size="m"
onClick={() => { onClick={() => {

View file

@ -70,6 +70,7 @@ export function ProfilingAppPageTemplate({
'data-test-subj': 'profilingPageTemplate', 'data-test-subj': 'profilingPageTemplate',
rightSideItems: [ rightSideItems: [
<EuiButton <EuiButton
data-test-subj="profilingProfilingAppPageTemplateGiveFeedbackButton"
href={PROFILING_FEEDBACK_LINK} href={PROFILING_FEEDBACK_LINK}
target="_blank" target="_blank"
color="warning" color="warning"
@ -134,6 +135,7 @@ export function ProfilingAppPageTemplate({
})} })}
</p> </p>
<EuiButton <EuiButton
data-test-subj="profilingProfilingAppPageTemplateDismissButton"
onClick={() => { onClick={() => {
setPrivilegesWarningDismissed(true); setPrivilegesWarningDismissed(true);
}} }}

View file

@ -39,7 +39,7 @@ export function StackFrameSummary({ frame, onFrameClick }: Props) {
<EuiFlexItem> <EuiFlexItem>
<div> <div>
{onFrameClick ? ( {onFrameClick ? (
<EuiLink onClick={handleOnClick}> <EuiLink data-test-subj="profilingStackFrameSummaryLink" onClick={handleOnClick}>
<CalleeFunctionText calleeFunctionName={calleeFunctionName} /> <CalleeFunctionText calleeFunctionName={calleeFunctionName} />
</EuiLink> </EuiLink>
) : ( ) : (

View file

@ -135,7 +135,7 @@ export function SubChart({
</EuiFlexGroup> </EuiFlexGroup>
{hasMoreFrames && !!onShowMoreClick && ( {hasMoreFrames && !!onShowMoreClick && (
<EuiButton onClick={onShowMoreClick}> <EuiButton data-test-subj="profilingSubChartShowMoreButton" onClick={onShowMoreClick}>
{i18n.translate('xpack.profiling.stackTracesView.showMoreTracesButton', { {i18n.translate('xpack.profiling.stackTracesView.showMoreTracesButton', {
defaultMessage: 'Show more', defaultMessage: 'Show more',
})} })}
@ -185,13 +185,13 @@ export function SubChart({
</EuiFlexItem> </EuiFlexItem>
<EuiFlexItem grow style={{ alignItems: 'flex-start' }}> <EuiFlexItem grow style={{ alignItems: 'flex-start' }}>
{showFrames ? ( {showFrames ? (
<EuiLink onClick={() => onShowMoreClick?.()}> <EuiLink data-test-subj="profilingSubChartLink" onClick={() => onShowMoreClick?.()}>
<EuiText size="s">{label}</EuiText> <EuiText size="s">{label}</EuiText>
</EuiLink> </EuiLink>
) : category === OTHER_BUCKET_LABEL ? ( ) : category === OTHER_BUCKET_LABEL ? (
<EuiText size="s">{label}</EuiText> <EuiText size="s">{label}</EuiText>
) : ( ) : (
<EuiLink href={href}> <EuiLink data-test-subj="profilingSubChartLink" href={href}>
<EuiText size="s">{label}</EuiText> <EuiText size="s">{label}</EuiText>
</EuiLink> </EuiLink>
)} )}

View file

@ -227,6 +227,7 @@ export const TopNFunctionsGrid = forwardRef(
} }
return ( return (
<EuiButtonIcon <EuiButtonIcon
data-test-subj="profilingTopNFunctionsGridButton"
aria-label="Show actions" aria-label="Show actions"
iconType="expand" iconType="expand"
color="text" color="text"

View file

@ -345,6 +345,7 @@ EOF`}
}), }),
content: ( content: (
<EuiButton <EuiButton
data-test-subj="profilingAddDataViewManageUniversalProfilingAgentInFleetButton"
iconType="gear" iconType="gear"
fill fill
href={`${core.http.basePath.prepend( href={`${core.http.basePath.prepend(
@ -392,6 +393,7 @@ EOF`}
content: ( content: (
<EuiText> <EuiText>
<EuiLink <EuiLink
data-test-subj="profilingAddDataViewInstructionsHereLink"
target="_blank" target="_blank"
href={`https://www.elastic.co/guide/en/kibana/master/api-keys.html`} href={`https://www.elastic.co/guide/en/kibana/master/api-keys.html`}
> >
@ -430,6 +432,7 @@ EOF`}
values={{ values={{
link: ( link: (
<EuiLink <EuiLink
data-test-subj="profilingAddDataViewTheCorrespondingDocumentationPageLink"
target="_blank" target="_blank"
href={`${core.docLinks.ELASTIC_WEBSITE_URL}/guide/en/observability/${core.docLinks.DOC_LINK_VERSION}/profiling-add-symbols.html`} href={`${core.docLinks.ELASTIC_WEBSITE_URL}/guide/en/observability/${core.docLinks.DOC_LINK_VERSION}/profiling-add-symbols.html`}
> >
@ -493,6 +496,7 @@ EOF`}
versionTo: <strong>6.4</strong>, versionTo: <strong>6.4</strong>,
linuxLink: ( linuxLink: (
<EuiLink <EuiLink
data-test-subj="profilingAddDataViewLinuxKernelBugLink"
target="_blank" target="_blank"
href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d319f344561de23e810515d109c7278919bff7b0" href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d319f344561de23e810515d109c7278919bff7b0"
> >
@ -503,6 +507,7 @@ EOF`}
), ),
debianLink: ( debianLink: (
<EuiLink <EuiLink
data-test-subj="profilingAddDataViewDebianLink"
target="_blank" target="_blank"
href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1033398" href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1033398"
> >
@ -513,6 +518,7 @@ EOF`}
), ),
fedoraLink: ( fedoraLink: (
<EuiLink <EuiLink
data-test-subj="profilingAddDataViewFedoraCentOsLink"
target="_blank" target="_blank"
href="https://bugzilla.redhat.com/show_bug.cgi?id=2211455" href="https://bugzilla.redhat.com/show_bug.cgi?id=2211455"
> >
@ -523,6 +529,7 @@ EOF`}
), ),
advancedLink: ( advancedLink: (
<EuiLink <EuiLink
data-test-subj="profilingAddDataViewAdvancedConfigurationLink"
target="_blank" target="_blank"
href={`${core.docLinks.ELASTIC_WEBSITE_URL}/guide/en/observability/${core.docLinks.DOC_LINK_VERSION}/profiling-advanced-configuration.html`} href={`${core.docLinks.ELASTIC_WEBSITE_URL}/guide/en/observability/${core.docLinks.DOC_LINK_VERSION}/profiling-advanced-configuration.html`}
> >

View file

@ -28,6 +28,7 @@ export function DeleteDataView() {
footer={ footer={
<div> <div>
<EuiLink <EuiLink
data-test-subj="profilingDeleteDataViewDeleteExistingProfilingDataLink"
href={`${docLinks.ELASTIC_WEBSITE_URL}/guide/en/observability/${docLinks.DOC_LINK_VERSION}/profiling-upgrade.html#profiling-delete-data`} href={`${docLinks.ELASTIC_WEBSITE_URL}/guide/en/observability/${docLinks.DOC_LINK_VERSION}/profiling-upgrade.html#profiling-delete-data`}
target="_blank" target="_blank"
> >

View file

@ -170,6 +170,7 @@ export function StackTracesView() {
{(data?.charts.length ?? 0) > limit && ( {(data?.charts.length ?? 0) > limit && (
<EuiFlexItem> <EuiFlexItem>
<EuiButton <EuiButton
data-test-subj="profilingStackTracesViewShowMoreButton"
onClick={() => { onClick={() => {
profilingRouter.push(routePath, { profilingRouter.push(routePath, {
path, path,

View file

@ -43,6 +43,7 @@ export function DistinctProbabilisticValuesWarning({
</EuiText> </EuiText>
<EuiSpacer /> <EuiSpacer />
<EuiButton <EuiButton
data-test-subj="profilingDistinctProbabilisticValuesWarningLearnHowButton"
href={`${docLinks.ELASTIC_WEBSITE_URL}/guide/en/observability/${docLinks.DOC_LINK_VERSION}/profiling-probabilistic-profiling.html`} href={`${docLinks.ELASTIC_WEBSITE_URL}/guide/en/observability/${docLinks.DOC_LINK_VERSION}/profiling-probabilistic-profiling.html`}
color="warning" color="warning"
target="_blank" target="_blank"

View file

@ -121,6 +121,7 @@ export function Summary({ data, isLoading }: Props) {
<EuiFlexGroup direction="column"> <EuiFlexGroup direction="column">
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiLink <EuiLink
data-test-subj="profilingSummaryGoToUniversalProfilingLink"
href={profilingRouter.link('/stacktraces/{topNType}', { href={profilingRouter.link('/stacktraces/{topNType}', {
path: { topNType: TopNType.Hosts }, path: { topNType: TopNType.Hosts },
query: { query: {
@ -139,6 +140,7 @@ export function Summary({ data, isLoading }: Props) {
</EuiFlexItem> </EuiFlexItem>
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiLink <EuiLink
data-test-subj="profilingSummaryGoToIndexManagementLink"
href={core.http.basePath.prepend( href={core.http.basePath.prepend(
'/app/management/data/index_management/data_streams' '/app/management/data/index_management/data_streams'
)} )}

View file

@ -31,6 +31,7 @@ export const FingerprintCol: React.FC<Props> = ({ cert }) => {
<EuiCopy textToCopy={val ?? ''}> <EuiCopy textToCopy={val ?? ''}>
{(copy) => ( {(copy) => (
<EuiButtonIcon <EuiButtonIcon
data-test-subj="syntheticsShaComponentButton"
aria-label={COPY_FINGERPRINT} aria-label={COPY_FINGERPRINT}
onClick={copy} onClick={copy}
iconType="copy" iconType="copy"

View file

@ -50,6 +50,7 @@ export const StepDetailsLinkIcon = ({
return ( return (
<EuiButtonIcon <EuiButtonIcon
data-test-subj="syntheticsStepDetailsLinkIconButton"
{...commonProps} {...commonProps}
aria-label={VIEW_DETAILS} aria-label={VIEW_DETAILS}
title={VIEW_DETAILS} title={VIEW_DETAILS}

View file

@ -15,7 +15,12 @@ export const AlertsLink = () => {
return ( return (
<EuiToolTip content={VIEW_ALERTS}> <EuiToolTip content={VIEW_ALERTS}>
<EuiButtonIcon aria-label={VIEW_ALERTS} href={alertUrl} iconType="inspect" /> <EuiButtonIcon
data-test-subj="syntheticsAlertsLinkButton"
aria-label={VIEW_ALERTS}
href={alertUrl}
iconType="inspect"
/>
</EuiToolTip> </EuiToolTip>
); );
}; };

View file

@ -16,6 +16,7 @@ export const ErrorsLink = ({ disabled }: { disabled?: boolean }) => {
return ( return (
<EuiToolTip content={VIEW_ERRORS}> <EuiToolTip content={VIEW_ERRORS}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="syntheticsErrorsLinkButton"
aria-label={VIEW_ERRORS} aria-label={VIEW_ERRORS}
href={`${basePath}/app/synthetics/errors`} href={`${basePath}/app/synthetics/errors`}
iconType="inspect" iconType="inspect"

View file

@ -148,6 +148,7 @@ export const BrowserStepsList = ({
isExpander: true, isExpander: true,
render: (item: JourneyStep) => ( render: (item: JourneyStep) => (
<EuiButtonIcon <EuiButtonIcon
data-test-subj="syntheticsColumnsButton"
onClick={() => toggleDetails(item)} onClick={() => toggleDetails(item)}
aria-label={expandedMap[item._id] ? 'Collapse' : 'Expand'} aria-label={expandedMap[item._id] ? 'Collapse' : 'Expand'}
iconType={expandedMap[item._id] ? 'arrowDown' : 'arrowRight'} iconType={expandedMap[item._id] ? 'arrowDown' : 'arrowRight'}

View file

@ -156,6 +156,7 @@ export const KeyValuePairsField = ({
append={ append={
<EuiFormLabel> <EuiFormLabel>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="syntheticsKeyValuePairsFieldButton"
iconType="trash" iconType="trash"
aria-label={i18n.translate( aria-label={i18n.translate(
'xpack.synthetics.keyValuePairsField.deleteItem.label', 'xpack.synthetics.keyValuePairsField.deleteItem.label',

View file

@ -23,6 +23,7 @@ export const MonitorSelector = () => {
const button = ( const button = (
<EuiButtonIcon <EuiButtonIcon
data-test-subj="syntheticsMonitorSelectorButton"
size="s" size="s"
iconType="arrowDown" iconType="arrowDown"
onClick={onButtonClick} onClick={onButtonClick}

View file

@ -240,6 +240,7 @@ export function useMonitorListColumns({
render: () => ( render: () => (
<NoPermissionsTooltip canEditSynthetics={canEditSynthetics}> <NoPermissionsTooltip canEditSynthetics={canEditSynthetics}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="syntheticsUseMonitorListColumnsButton"
iconType="boxesHorizontal" iconType="boxesHorizontal"
isDisabled={true} isDisabled={true}
aria-label={CANNOT_PERFORM_ACTION_SYNTHETICS} aria-label={CANNOT_PERFORM_ACTION_SYNTHETICS}

View file

@ -244,6 +244,7 @@ export function ActionsPopover({
button={ button={
<IconPanel hasPanel={iconHasPanel}> <IconPanel hasPanel={iconHasPanel}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="syntheticsActionsPopoverButton"
aria-label={openActionsMenuAria} aria-label={openActionsMenuAria}
iconType="boxesHorizontal" iconType="boxesHorizontal"
color="primary" color="primary"

View file

@ -99,6 +99,7 @@ export const GroupGridItem = ({
<EuiFlexGroup alignItems="center" gutterSize="s"> <EuiFlexGroup alignItems="center" gutterSize="s">
<EuiFlexItem> <EuiFlexItem>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="syntheticsGroupGridItemButton"
isDisabled={groupMonitors.length === 0} isDisabled={groupMonitors.length === 0}
className="fullScreenButton" className="fullScreenButton"
iconType="fullScreen" iconType="fullScreen"

View file

@ -120,6 +120,7 @@ export const MetricItemIcon = ({
}} }}
> >
<EuiButtonIcon <EuiButtonIcon
data-test-subj="syntheticsMetricItemIconButton"
iconType="warning" iconType="warning"
color="danger" color="danger"
size="m" size="m"
@ -138,7 +139,11 @@ export const MetricItemIcon = ({
<EuiFlexGroup> <EuiFlexGroup>
<EuiFlexItem grow>{testTime}</EuiFlexItem> <EuiFlexItem grow>{testTime}</EuiFlexItem>
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon iconType="cross" onClick={closePopover} /> <EuiButtonIcon
data-test-subj="syntheticsMetricItemIconButton"
iconType="cross"
onClick={closePopover}
/>
</EuiFlexItem> </EuiFlexItem>
</EuiFlexGroup> </EuiFlexGroup>
</EuiPopoverTitle> </EuiPopoverTitle>

View file

@ -16,6 +16,7 @@ export const ParamsText = ({ text }: { text: string }) => {
<EuiFlexGroup gutterSize="s" justifyContent="flexStart"> <EuiFlexGroup gutterSize="s" justifyContent="flexStart">
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="syntheticsParamsTextButton"
iconType={!isViewing ? 'eye' : 'eyeClosed'} iconType={!isViewing ? 'eye' : 'eyeClosed'}
aria-label={i18n.translate('xpack.synthetics.settingsRoute.viewParam', { aria-label={i18n.translate('xpack.synthetics.settingsRoute.viewParam', {
defaultMessage: 'View parameter value', defaultMessage: 'View parameter value',

View file

@ -36,6 +36,7 @@ export function WaterfallMarkerIcon({ field, label }: { field: string; label: st
css={{ top: 4 }} css={{ top: 4 }}
button={ button={
<EuiButtonIcon <EuiButtonIcon
data-test-subj="syntheticsWaterfallMarkerIconButton"
css={{ color: euiTheme.colors.mediumShade }} css={{ color: euiTheme.colors.mediumShade }}
aria-label={i18n.translate( aria-label={i18n.translate(
'xpack.synthetics.synthetics.markers.openEmbeddableButton.label', 'xpack.synthetics.synthetics.markers.openEmbeddableButton.label',

View file

@ -33,6 +33,7 @@ export function ResetPercentileZoom({
<EuiFlexItem grow={false}> <EuiFlexItem grow={false}>
<EuiShowFor sizes={['xs']}> <EuiShowFor sizes={['xs']}>
<EuiButtonIcon <EuiButtonIcon
data-test-subj="uxResetPercentileZoomButton"
iconType="inspect" iconType="inspect"
size="s" size="s"
aria-label={I18LABELS.resetZoom} aria-label={I18LABELS.resetZoom}