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: [
'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/ux/**/*.{js,mjs,ts,tsx}',
'x-pack/plugins/synthetics/**/*.{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: {
'@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
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) {
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
.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 = [
'EuiButton',
'EuiButtonEmpty',
'EuiButtonIcon',
'EuiLink',
'EuiFieldText',
'EuiFieldSearch',
@ -74,7 +75,7 @@ export const EventGeneratingElementsShouldBeInstrumented: Rule.RuleModule = {
const intent = getIntentFromNode(parent);
// 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'

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -136,6 +136,7 @@ export function SelectableUrlList({
</EuiFlexItem>
<EuiFlexItem grow={false}>
<EuiButtonIcon
data-test-subj="exploratoryViewPopOverTitleButton"
color="text"
onClick={() => closePopover()}
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 = (
<EuiButtonIcon
data-test-subj="exploratoryViewSeriesActionsButton"
iconType="boxesHorizontal"
onClick={changePopoverVisibility}
color="text"

View file

@ -101,6 +101,7 @@ export function SeriesName({ series, seriesId }: Props) {
)}
<EuiFlexItem grow={false}>
<EuiButtonIcon
data-test-subj="exploratoryViewSeriesNameButton"
onClick={() => setIsEditingEnabled(!isEditingEnabled)}
iconType="pencil"
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">
<EuiFlexItem grow={false}>
<EuiButtonIcon
data-test-subj="infraExpressionRowButton"
iconType={isExpanded ? 'arrowDown' : 'arrowRight'}
onClick={toggle}
aria-label={i18n.translate('xpack.infra.metrics.alertFlyout.expandRowLabel', {
@ -629,6 +630,7 @@ export const ExpressionRow: React.FC<ExpressionRowProps> = (props) => {
/>
</StyledHealth>
<EuiButtonIcon
data-test-subj="infraExpressionRowButton"
aria-label={i18n.translate(
'xpack.infra.metrics.alertFlyout.removeWarningThreshold',
{
@ -668,6 +670,7 @@ export const ExpressionRow: React.FC<ExpressionRowProps> = (props) => {
{canDelete && (
<EuiFlexItem grow={false}>
<EuiButtonIcon
data-test-subj="infraExpressionRowButton"
aria-label={i18n.translate('xpack.infra.metrics.alertFlyout.removeCondition', {
defaultMessage: 'Remove condition',
})}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -142,6 +142,7 @@ export const MetadataDetails = (props: Props) => {
{filteredFields.length > NUMBER_OF_COLUMNS ? (
<Controls>
<EuiButtonIcon
data-test-subj="infraMetadataDetailsButton"
iconType={isOpen ? 'arrowUp' : 'arrowDown'}
onClick={toggleIsOpen}
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 grow={false}>
<EuiButtonIcon
data-test-subj="o11yClosablePopoverTitleButton"
iconType="cross"
color="danger"
aria-label={i18n.translate(

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -13,6 +13,7 @@ export function TroubleshootingLink() {
return (
<EuiFlexGroup alignItems="center" justifyContent="center">
<EuiButtonEmpty
data-test-subj="observabilityOnboardingTroubleshootingLinkTroubleshootingButton"
iconType="help"
color="primary"
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={{
dataRetentionLink: (
<EuiLink
data-test-subj="profilingCheckSetupControllingDataRetentionLink"
href={`${docLinks.ELASTIC_WEBSITE_URL}/guide/en/elasticsearch/reference/${docLinks.DOC_LINK_VERSION}/set-up-lifecycle-policy.html`}
target="_blank"
>
@ -152,6 +153,7 @@ export function CheckSetup({ children }: { children: React.ReactElement }) {
},
button: (
<EuiButton
data-test-subj="profilingCheckSetupButton"
disabled={postSetupLoading}
onClick={(event) => {
event.preventDefault();

View file

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

View file

@ -41,6 +41,7 @@ export function MissingSymbolsCallout({ frameType }: Props) {
values={{
readMore: (
<EuiLink
data-test-subj="profilingMissingSymbolsCalloutReadMoreLink"
href={`${docLinks.ELASTIC_WEBSITE_URL}/guide/en/observability/${docLinks.DOC_LINK_VERSION}/profiling-add-symbols.html`}
target="_blank"
>
@ -54,6 +55,7 @@ export function MissingSymbolsCallout({ frameType }: Props) {
/>
</p>
<EuiButton
data-test-subj="profilingMissingSymbolsCalloutUploadSymbolsButton"
href={router.link('/add-data-instructions', {
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.',
})}
</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(
'xpack.profiling.frameInformationWindow.missingSymbols.interpreted.reportProblem',
{ defaultMessage: 'Report a problem' }

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -15,7 +15,12 @@ export const AlertsLink = () => {
return (
<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>
);
};

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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