Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[APM] Fix transaction action menu for trace explorer and dependency operations #162213

Merged
merged 6 commits into from Jul 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -0,0 +1,49 @@
/*
* 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 url from 'url';
import { synthtrace } from '../../../../synthtrace';
import { opbeans } from '../../../fixtures/synthtrace/opbeans';

const start = '2021-10-10T00:00:00.000Z';
const end = '2021-10-10T00:15:00.000Z';
Comment on lines +12 to +13
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

General comment: Almost every test generates 15min of data. I wonder if we should reduce it to 1 min, and only increase the time range where needed.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you think that this will reduce the execution time?


const dependencyOperationHref = url.format({
pathname: '/app/apm/dependencies/operation',
query: {
dependencyName: 'postgresql',
spanName: 'SELECT * FROM product',
environment: 'ENVIRONMENT_ALL',
rangeFrom: start,
rangeTo: end,
},
});

describe('Dependency operation', () => {
before(() => {
synthtrace.index(
opbeans({
from: new Date(start).getTime(),
to: new Date(end).getTime(),
})
);
});

after(() => {
synthtrace.clean();
});

beforeEach(() => {
cy.loginAsViewerUser();
});

it('opens the action menu popup when clicking the investigate button', () => {
cy.visitKibana(dependencyOperationHref);
cy.getByTestSubj('apmActionMenuButtonInvestigateButton').click();
cy.getByTestSubj('apmActionMenuInvestigateButtonPopup');
});
});
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the test!

@@ -0,0 +1,47 @@
/*
* 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 url from 'url';
import { synthtrace } from '../../../../synthtrace';
import { generateMobileData } from './generate_data';

const start = '2021-10-10T00:00:00.000Z';
const end = '2021-10-10T00:15:00.000Z';

const mobileTransactionDetailsPageHref = url.format({
pathname: '/app/apm/mobile-services/synth-android/transactions/view',
query: {
rangeFrom: start,
rangeTo: end,
transactionName: 'Start View - View Appearing',
},
});

describe('Mobile transaction details page', () => {
before(() => {
synthtrace.index(
generateMobileData({
from: new Date(start).getTime(),
to: new Date(end).getTime(),
})
);
});

beforeEach(() => {
cy.loginAsViewerUser();
});

after(() => {
synthtrace.clean();
});

it('opens the action menu popup when clicking the investigate button', () => {
cy.visitKibana(mobileTransactionDetailsPageHref);
cy.getByTestSubj('apmActionMenuButtonInvestigateButton').click();
cy.getByTestSubj('apmActionMenuInvestigateButtonPopup');
});
});
@@ -0,0 +1,51 @@
/*
* 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 url from 'url';
import { synthtrace } from '../../../../synthtrace';
import { opbeans } from '../../../fixtures/synthtrace/opbeans';

const start = '2021-10-10T00:00:00.000Z';
const end = '2021-10-10T00:15:00.000Z';

const traceExplorerHref = url.format({
pathname: '/app/apm/traces/explorer',
query: {
environment: 'ENVIRONMENT_ALL',
rangeFrom: start,
rangeTo: end,
},
});

describe('Trace Explorer', () => {
before(() => {
synthtrace.index(
opbeans({
from: new Date(start).getTime(),
to: new Date(end).getTime(),
})
);

cy.updateAdvancedSettings({
'observability:apmTraceExplorerTab': true,
});
});

after(() => {
synthtrace.clean();
});

beforeEach(() => {
cy.loginAsViewerUser();
});

it('opens the action menu popup when clicking the investigate button', () => {
cy.visitKibana(traceExplorerHref);
cy.getByTestSubj('apmActionMenuButtonInvestigateButton').click();
cy.getByTestSubj('apmActionMenuInvestigateButtonPopup');
});
});
Expand Up @@ -62,6 +62,9 @@ describe('Transaction action menu', () => {
apmRouter,
infraLocators,
infraLinksAvailable: false,
rangeFrom: 'now-24h',
rangeTo: 'now',
environment: 'ENVIRONMENT_ALL',
})
).toEqual([
[
Expand Down Expand Up @@ -124,6 +127,9 @@ describe('Transaction action menu', () => {
apmRouter,
infraLocators,
infraLinksAvailable: true,
rangeFrom: 'now-24h',
rangeTo: 'now',
environment: 'ENVIRONMENT_ALL',
})
).toEqual([
[
Expand Down Expand Up @@ -205,6 +211,9 @@ describe('Transaction action menu', () => {
apmRouter,
infraLocators,
infraLinksAvailable: true,
rangeFrom: 'now-24h',
rangeTo: 'now',
environment: 'ENVIRONMENT_ALL',
})
).toEqual([
[
Expand Down
Expand Up @@ -13,6 +13,7 @@ import moment from 'moment';
import url from 'url';
import type { InfraLocators } from '@kbn/infra-plugin/common/locators';
import type { ProfilingLocators } from '@kbn/profiling-plugin/public';
import { Environment } from '../../../../common/environment_rt';
import type { Transaction } from '../../../../typings/es_schemas/ui/transaction';
import { getDiscoverHref } from '../links/discover_links/discover_link';
import { getDiscoverQuery } from '../links/discover_links/discover_transaction_link';
Expand Down Expand Up @@ -40,6 +41,9 @@ export const getSections = ({
infraLocators,
infraLinksAvailable,
profilingLocators,
rangeFrom,
rangeTo,
environment,
}: {
transaction?: Transaction;
basePath: IBasePath;
Expand All @@ -48,6 +52,9 @@ export const getSections = ({
infraLocators: InfraLocators;
infraLinksAvailable: boolean;
profilingLocators?: ProfilingLocators;
rangeFrom: string;
rangeTo: string;
environment: Environment;
}) => {
if (!transaction) return [];
const hostName = transaction.host?.hostname;
Expand All @@ -58,12 +65,6 @@ export const getSections = ({
const time = Math.round(transaction.timestamp.us / 1000);
const infraMetricsQuery = getInfraMetricsQuery(transaction);

const routeParams = apmRouter.getParams(
'/services/{serviceName}/transactions/view',
location
);
const { rangeFrom, rangeTo, environment } = routeParams.query;

const uptimeLink = url.format({
pathname: basePath.prepend('/app/uptime'),
search: `?${fromQuery(
Expand Down
Expand Up @@ -22,6 +22,7 @@ import { ProfilingLocators } from '@kbn/profiling-plugin/public';
import React, { useState } from 'react';
import { useLocation } from 'react-router-dom';
import useAsync from 'react-use/lib/useAsync';
import { useAnyOfApmParams } from '../../../hooks/use_apm_params';
import { ApmFeatureFlagName } from '../../../../common/apm_feature_flags';
import { Transaction } from '../../../../typings/es_schemas/ui/transaction';
import { useApmPluginContext } from '../../../context/apm_plugin/use_apm_plugin_context';
Expand Down Expand Up @@ -115,6 +116,15 @@ function ActionMenuSections({
ApmFeatureFlagName.InfraUiAvailable
);

const {
query: { rangeFrom, rangeTo, environment },
} = useAnyOfApmParams(
'/services/{serviceName}/transactions/view',
'/mobile-services/{serviceName}/transactions/view',
'/traces/explorer/waterfall',
'/dependencies/operation'
);

const sections = getSections({
transaction,
basePath: core.http.basePath,
Expand All @@ -123,6 +133,9 @@ function ActionMenuSections({
infraLocators: locators,
infraLinksAvailable,
profilingLocators,
rangeFrom,
rangeTo,
environment,
});

const externalMenuItems = useAsync(() => {
Expand Down Expand Up @@ -153,7 +166,7 @@ function ActionMenuSections({
}

return (
<div>
<div data-test-subj="apmActionMenuInvestigateButtonPopup">
{sections.map((section, idx) => {
const isLastSection = idx !== sections.length - 1;
return (
Expand Down