mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 17:59:23 -04:00
[APM] Use apm_8.0.0 archive where possible (#77450)
This commit is contained in:
parent
ba4d4a9fc2
commit
d190a2a2e3
22 changed files with 6826 additions and 8371 deletions
|
@ -10,6 +10,8 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
const supertest = getService('supertest');
|
||||
const esArchiver = getService('esArchiver');
|
||||
|
||||
const archiveName = 'apm_8.0.0';
|
||||
|
||||
describe('Has data', () => {
|
||||
describe('when data is not loaded', () => {
|
||||
it('returns false when there is no data', async () => {
|
||||
|
@ -28,8 +30,8 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
});
|
||||
});
|
||||
describe('when data is loaded', () => {
|
||||
before(() => esArchiver.load('8.0.0'));
|
||||
after(() => esArchiver.unload('8.0.0'));
|
||||
before(() => esArchiver.load(archiveName));
|
||||
after(() => esArchiver.unload(archiveName));
|
||||
|
||||
it('returns true when there is at least one document on transaction, error or metrics indices', async () => {
|
||||
const response = await supertest.get('/api/apm/observability_overview/has_data');
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
import expect from '@kbn/expect';
|
||||
import archives_metadata from '../../../common/archives_metadata';
|
||||
import { expectSnapshot } from '../../../common/match_snapshot';
|
||||
import { FtrProviderContext } from '../../../common/ftr_provider_context';
|
||||
|
||||
|
@ -11,9 +12,12 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
const supertest = getService('supertest');
|
||||
const esArchiver = getService('esArchiver');
|
||||
|
||||
const archiveName = 'apm_8.0.0';
|
||||
const metadata = archives_metadata[archiveName];
|
||||
|
||||
// url parameters
|
||||
const start = encodeURIComponent('2020-06-29T06:00:00.000Z');
|
||||
const end = encodeURIComponent('2020-06-29T10:00:00.000Z');
|
||||
const start = encodeURIComponent(metadata.start);
|
||||
const end = encodeURIComponent(metadata.end);
|
||||
const bucketSize = '60s';
|
||||
|
||||
describe('Observability overview', () => {
|
||||
|
@ -23,37 +27,58 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
`/api/apm/observability_overview?start=${start}&end=${end}&bucketSize=${bucketSize}`
|
||||
);
|
||||
expect(response.status).to.be(200);
|
||||
expectSnapshot(response.body).toMatchInline(`
|
||||
Object {
|
||||
"serviceCount": 0,
|
||||
"transactionCoordinates": Array [],
|
||||
}
|
||||
`);
|
||||
|
||||
expect(response.body.serviceCount).to.be(0);
|
||||
expect(response.body.transactionCoordinates.length).to.be(0);
|
||||
});
|
||||
});
|
||||
describe('when data is loaded', () => {
|
||||
before(() => esArchiver.load('8.0.0'));
|
||||
after(() => esArchiver.unload('8.0.0'));
|
||||
before(() => esArchiver.load(archiveName));
|
||||
after(() => esArchiver.unload(archiveName));
|
||||
|
||||
it('returns the service count and transaction coordinates', async () => {
|
||||
const response = await supertest.get(
|
||||
`/api/apm/observability_overview?start=${start}&end=${end}&bucketSize=${bucketSize}`
|
||||
);
|
||||
expect(response.status).to.be(200);
|
||||
expectSnapshot(response.body).toMatchInline(`
|
||||
Object {
|
||||
"serviceCount": 3,
|
||||
"transactionCoordinates": Array [
|
||||
Object {
|
||||
"x": 1593413220000,
|
||||
"y": 0.016666666666666666,
|
||||
},
|
||||
Object {
|
||||
"x": 1593413280000,
|
||||
"y": 1.0458333333333334,
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
expect(response.body.serviceCount).to.be.greaterThan(0);
|
||||
expect(response.body.transactionCoordinates.length).to.be.greaterThan(0);
|
||||
|
||||
expectSnapshot(response.body.serviceCount).toMatchInline(`7`);
|
||||
|
||||
expectSnapshot(response.body.transactionCoordinates.length).toMatchInline(`60`);
|
||||
|
||||
expectSnapshot(
|
||||
response.body.transactionCoordinates
|
||||
.slice(0, 5)
|
||||
.map(({ x, y }: { x: number; y: number }) => ({
|
||||
x: new Date(x).toISOString(),
|
||||
y,
|
||||
}))
|
||||
).toMatchInline(`
|
||||
Array [
|
||||
Object {
|
||||
"x": "2020-09-10T06:00:00.000Z",
|
||||
"y": 1.2166666666666666,
|
||||
},
|
||||
Object {
|
||||
"x": "2020-09-10T06:01:00.000Z",
|
||||
"y": 0.5,
|
||||
},
|
||||
Object {
|
||||
"x": "2020-09-10T06:02:00.000Z",
|
||||
"y": 1.0333333333333334,
|
||||
},
|
||||
Object {
|
||||
"x": "2020-09-10T06:03:00.000Z",
|
||||
"y": 0.55,
|
||||
},
|
||||
Object {
|
||||
"x": "2020-09-10T06:04:00.000Z",
|
||||
"y": 1.15,
|
||||
},
|
||||
]
|
||||
`);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -5,22 +5,28 @@
|
|||
*/
|
||||
|
||||
import expect from '@kbn/expect';
|
||||
import { expectSnapshot } from '../../../common/match_snapshot';
|
||||
import archives_metadata from '../../../common/archives_metadata';
|
||||
import { FtrProviderContext } from '../../../common/ftr_provider_context';
|
||||
|
||||
export default function serviceMapsApiTests({ getService }: FtrProviderContext) {
|
||||
const supertest = getService('supertest');
|
||||
|
||||
const archiveName = 'apm_8.0.0';
|
||||
const metadata = archives_metadata[archiveName];
|
||||
|
||||
// url parameters
|
||||
const start = encodeURIComponent('2020-06-29T06:45:00.000Z');
|
||||
const end = encodeURIComponent('2020-06-29T06:49:00.000Z');
|
||||
const start = encodeURIComponent(metadata.start);
|
||||
const end = encodeURIComponent(metadata.end);
|
||||
|
||||
describe('Service Maps', () => {
|
||||
it('is only be available to users with Platinum license (or higher)', async () => {
|
||||
const response = await supertest.get(`/api/apm/service-map?start=${start}&end=${end}`);
|
||||
|
||||
expect(response.status).to.be(403);
|
||||
expect(response.body.message).to.be(
|
||||
"In order to access Service Maps, you must be subscribed to an Elastic Platinum license. With it, you'll have the ability to visualize your entire application stack along with your APM data."
|
||||
|
||||
expectSnapshot(response.body.message).toMatchInline(
|
||||
`"In order to access Service Maps, you must be subscribed to an Elastic Platinum license. With it, you'll have the ability to visualize your entire application stack along with your APM data."`
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -39,6 +39,7 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
);
|
||||
|
||||
expect(response.status).to.be(200);
|
||||
|
||||
expect(response.body).to.eql({ agentName: 'nodejs' });
|
||||
});
|
||||
});
|
||||
|
|
|
@ -33,7 +33,9 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
);
|
||||
|
||||
expect(response.status).to.be(200);
|
||||
expect(response.body).to.eql({ hasHistoricalData: false, hasLegacyData: false, items: [] });
|
||||
expect(response.body.hasHistoricalData).to.be(false);
|
||||
expect(response.body.hasLegacyData).to.be(false);
|
||||
expect(response.body.items.length).to.be(0);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
*/
|
||||
|
||||
import expect from '@kbn/expect';
|
||||
import archives_metadata from '../../../common/archives_metadata';
|
||||
import { expectSnapshot } from '../../../common/match_snapshot';
|
||||
import { FtrProviderContext } from '../../../../common/ftr_provider_context';
|
||||
|
||||
|
@ -12,9 +13,12 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
const supertest = getService('supertest');
|
||||
const esArchiver = getService('esArchiver');
|
||||
|
||||
const archiveName = 'apm_8.0.0';
|
||||
const metadata = archives_metadata[archiveName];
|
||||
|
||||
// url parameters
|
||||
const start = encodeURIComponent('2020-06-29T06:45:00.000Z');
|
||||
const end = encodeURIComponent('2020-06-29T06:49:00.000Z');
|
||||
const start = encodeURIComponent(metadata.start);
|
||||
const end = encodeURIComponent(metadata.end);
|
||||
|
||||
describe('Transaction types', () => {
|
||||
describe('when data is not loaded ', () => {
|
||||
|
@ -30,8 +34,8 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
});
|
||||
|
||||
describe('when data is loaded', () => {
|
||||
before(() => esArchiver.load('8.0.0'));
|
||||
after(() => esArchiver.unload('8.0.0'));
|
||||
before(() => esArchiver.load(archiveName));
|
||||
after(() => esArchiver.unload(archiveName));
|
||||
|
||||
it('handles empty state', async () => {
|
||||
const response = await supertest.get(
|
||||
|
@ -39,11 +43,13 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
);
|
||||
|
||||
expect(response.status).to.be(200);
|
||||
expect(response.body.transactionTypes.length).to.be.greaterThan(0);
|
||||
|
||||
expectSnapshot(response.body).toMatchInline(`
|
||||
Object {
|
||||
"transactionTypes": Array [
|
||||
"request",
|
||||
"Worker",
|
||||
"request",
|
||||
],
|
||||
}
|
||||
`);
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
import expect from '@kbn/expect';
|
||||
import { omit, orderBy } from 'lodash';
|
||||
import { expectSnapshot } from '../../../common/match_snapshot';
|
||||
import { AgentConfigurationIntake } from '../../../../../plugins/apm/common/agent_configuration/configuration_types';
|
||||
import { AgentConfigSearchParams } from '../../../../../plugins/apm/server/routes/settings/agent_configuration';
|
||||
import { FtrProviderContext } from '../../../common/ftr_provider_context';
|
||||
|
@ -16,6 +17,8 @@ export default function agentConfigurationTests({ getService }: FtrProviderConte
|
|||
const log = getService('log');
|
||||
const esArchiver = getService('esArchiver');
|
||||
|
||||
const archiveName = 'apm_8.0.0';
|
||||
|
||||
function getServices() {
|
||||
return supertestRead
|
||||
.get(`/api/apm/settings/agent-configuration/services`)
|
||||
|
@ -125,31 +128,46 @@ export default function agentConfigurationTests({ getService }: FtrProviderConte
|
|||
});
|
||||
|
||||
describe('when data is loaded', () => {
|
||||
before(() => esArchiver.load('8.0.0'));
|
||||
after(() => esArchiver.unload('8.0.0'));
|
||||
before(() => esArchiver.load(archiveName));
|
||||
after(() => esArchiver.unload(archiveName));
|
||||
|
||||
it('returns all services', async () => {
|
||||
const { body } = await getServices();
|
||||
expect(body).to.eql([
|
||||
'ALL_OPTION_VALUE',
|
||||
'client',
|
||||
'opbeans-dotnet',
|
||||
'opbeans-go',
|
||||
'opbeans-java',
|
||||
'opbeans-node',
|
||||
'opbeans-python',
|
||||
'opbeans-ruby',
|
||||
'opbeans-rum',
|
||||
]);
|
||||
expectSnapshot(body).toMatchInline(`
|
||||
Array [
|
||||
"ALL_OPTION_VALUE",
|
||||
"opbeans-dotnet",
|
||||
"opbeans-go",
|
||||
"opbeans-java",
|
||||
"opbeans-node",
|
||||
"opbeans-python",
|
||||
"opbeans-ruby",
|
||||
"opbeans-rum",
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
||||
it('returns the environments', async () => {
|
||||
it('returns the environments, all unconfigured', async () => {
|
||||
const { body } = await getEnvironments('opbeans-node');
|
||||
expect(body).to.eql([
|
||||
{ name: 'ALL_OPTION_VALUE', alreadyConfigured: false },
|
||||
{ name: 'testing', alreadyConfigured: false },
|
||||
{ name: 'production', alreadyConfigured: false },
|
||||
]);
|
||||
|
||||
expect(body.map((item: { name: string }) => item.name)).to.contain('ALL_OPTION_VALUE');
|
||||
|
||||
expect(
|
||||
body.every((item: { alreadyConfigured: boolean }) => item.alreadyConfigured === false)
|
||||
).to.be(true);
|
||||
|
||||
expectSnapshot(body).toMatchInline(`
|
||||
Array [
|
||||
Object {
|
||||
"alreadyConfigured": false,
|
||||
"name": "ALL_OPTION_VALUE",
|
||||
},
|
||||
Object {
|
||||
"alreadyConfigured": false,
|
||||
"name": "testing",
|
||||
},
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
||||
it('returns the agent names', async () => {
|
||||
|
|
|
@ -14,6 +14,8 @@ export default function customLinksTests({ getService }: FtrProviderContext) {
|
|||
const log = getService('log');
|
||||
const esArchiver = getService('esArchiver');
|
||||
|
||||
const archiveName = 'apm_8.0.0';
|
||||
|
||||
function searchCustomLinks(filters?: any) {
|
||||
const path = URL.format({
|
||||
pathname: `/api/apm/settings/custom_links`,
|
||||
|
@ -142,8 +144,8 @@ export default function customLinksTests({ getService }: FtrProviderContext) {
|
|||
});
|
||||
|
||||
describe('transaction', () => {
|
||||
before(() => esArchiver.load('8.0.0'));
|
||||
after(() => esArchiver.unload('8.0.0'));
|
||||
before(() => esArchiver.load(archiveName));
|
||||
after(() => esArchiver.unload(archiveName));
|
||||
|
||||
it('fetches a transaction sample', async () => {
|
||||
const response = await supertestRead.get(
|
||||
|
|
|
@ -3,301 +3,598 @@
|
|||
exports[`Top traces when data is loaded returns the correct buckets 1`] = `
|
||||
Array [
|
||||
Object {
|
||||
"averageResponseTime": 2577,
|
||||
"averageResponseTime": 3853,
|
||||
"impact": 0,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /throw-error",
|
||||
"service.name": "opbeans-ruby",
|
||||
"transaction.name": "Api::OrdersController#create",
|
||||
},
|
||||
"transactionsPerMinute": 0.5,
|
||||
"transactionsPerMinute": 0.016666666666666666,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 3147,
|
||||
"impact": 0.06552270160444405,
|
||||
"averageResponseTime": 5420,
|
||||
"impact": 0.0013411780236742999,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#orders",
|
||||
},
|
||||
"transactionsPerMinute": 0.5,
|
||||
"transactionsPerMinute": 0.016666666666666666,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 3392.5,
|
||||
"impact": 0.09374344413758617,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#order",
|
||||
},
|
||||
"transactionsPerMinute": 0.5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 4713.5,
|
||||
"impact": 0.24559517890858723,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#product",
|
||||
},
|
||||
"transactionsPerMinute": 0.5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 4757,
|
||||
"impact": 0.25059559560997896,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/products/:id/customers",
|
||||
},
|
||||
"transactionsPerMinute": 0.5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 6787,
|
||||
"impact": 0.4839483750082622,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#products",
|
||||
},
|
||||
"transactionsPerMinute": 0.5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 4749.666666666667,
|
||||
"impact": 0.5227447114845778,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/orders/:id",
|
||||
},
|
||||
"transactionsPerMinute": 0.75,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 7624.5,
|
||||
"impact": 0.5802207655235637,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/orders",
|
||||
},
|
||||
"transactionsPerMinute": 0.5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 5098,
|
||||
"impact": 0.582807187955318,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/stats",
|
||||
},
|
||||
"transactionsPerMinute": 0.75,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 8181,
|
||||
"impact": 0.6441916136689552,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/types/:id",
|
||||
},
|
||||
"transactionsPerMinute": 0.5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 20011,
|
||||
"impact": 0.853921734857215,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "POST /api",
|
||||
},
|
||||
"transactionsPerMinute": 0.25,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 6583,
|
||||
"impact": 1.2172278724376455,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/products",
|
||||
},
|
||||
"transactionsPerMinute": 1,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 33097,
|
||||
"impact": 1.6060533780113861,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/products/top",
|
||||
},
|
||||
"transactionsPerMinute": 0.25,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 4825,
|
||||
"impact": 1.6450221426498186,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#topProducts",
|
||||
},
|
||||
"transactionsPerMinute": 1.75,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 35846,
|
||||
"impact": 1.7640550505645587,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /log-error",
|
||||
},
|
||||
"transactionsPerMinute": 0.25,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 3742.153846153846,
|
||||
"impact": 2.4998634943716573,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#customerWhoBought",
|
||||
},
|
||||
"transactionsPerMinute": 3.25,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 3492.9285714285716,
|
||||
"impact": 2.5144049360435208,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET static file",
|
||||
},
|
||||
"transactionsPerMinute": 3.5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 26992.5,
|
||||
"impact": 2.8066131947777255,
|
||||
"averageResponseTime": 4135.5,
|
||||
"impact": 0.0037813174911251156,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/types",
|
||||
},
|
||||
"transactionsPerMinute": 0.5,
|
||||
"transactionsPerMinute": 0.03333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 13516.5,
|
||||
"impact": 2.8112687551548836,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/products/:id",
|
||||
},
|
||||
"transactionsPerMinute": 1,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 20092,
|
||||
"impact": 3.168195050736987,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/customers",
|
||||
},
|
||||
"transactionsPerMinute": 0.75,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 15535,
|
||||
"impact": 3.275330415465657,
|
||||
"averageResponseTime": 11058,
|
||||
"impact": 0.006166680064182087,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#stats",
|
||||
"transaction.name": "APIRestController#products",
|
||||
},
|
||||
"transactionsPerMinute": 1,
|
||||
"transactionsPerMinute": 0.016666666666666666,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 32667.5,
|
||||
"impact": 3.458966408120217,
|
||||
"averageResponseTime": 6014,
|
||||
"impact": 0.0069968923698388,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-go",
|
||||
"transaction.name": "POST /api/orders",
|
||||
},
|
||||
"transactionsPerMinute": 0.03333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 13540,
|
||||
"impact": 0.00829099649989339,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-python",
|
||||
"transaction.name": "GET opbeans.views.product",
|
||||
},
|
||||
"transactionsPerMinute": 0.016666666666666666,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 8710,
|
||||
"impact": 0.011611845722520248,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /log-message",
|
||||
"transaction.name": "GET /api/types/:id",
|
||||
},
|
||||
"transactionsPerMinute": 0.5,
|
||||
"transactionsPerMinute": 0.03333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 16690.75,
|
||||
"impact": 3.541042213287889,
|
||||
"averageResponseTime": 10157,
|
||||
"impact": 0.014088788415891928,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#customers",
|
||||
"service.name": "opbeans-python",
|
||||
"transaction.name": "GET opbeans.views.product_type",
|
||||
},
|
||||
"transactionsPerMinute": 1,
|
||||
"transactionsPerMinute": 0.03333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 33500,
|
||||
"impact": 3.5546640380951287,
|
||||
"averageResponseTime": 6944.333333333333,
|
||||
"impact": 0.014532994793867014,
|
||||
"key": Object {
|
||||
"service.name": "client",
|
||||
"transaction.name": "/customers",
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/orders/:id",
|
||||
},
|
||||
"transactionsPerMinute": 0.5,
|
||||
"transactionsPerMinute": 0.05,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 77000,
|
||||
"impact": 4.129424578484989,
|
||||
"key": Object {
|
||||
"service.name": "client",
|
||||
"transaction.name": "/products",
|
||||
},
|
||||
"transactionsPerMinute": 0.25,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 19370.6,
|
||||
"impact": 5.270496679320978,
|
||||
"averageResponseTime": 8438.333333333334,
|
||||
"impact": 0.018369089179385976,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#customer",
|
||||
},
|
||||
"transactionsPerMinute": 1.25,
|
||||
"transactionsPerMinute": 0.05,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 81500,
|
||||
"impact": 9.072365225837785,
|
||||
"averageResponseTime": 13202,
|
||||
"impact": 0.019301152273056246,
|
||||
"key": Object {
|
||||
"service.name": "client",
|
||||
"transaction.name": "/orders",
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#customers",
|
||||
},
|
||||
"transactionsPerMinute": 0.5,
|
||||
"transactionsPerMinute": 0.03333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 14419.42857142857,
|
||||
"impact": 11.30657439844125,
|
||||
"averageResponseTime": 9311,
|
||||
"impact": 0.020609806515684198,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/products/:id",
|
||||
},
|
||||
"transactionsPerMinute": 0.05,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 14019,
|
||||
"impact": 0.020699674858049102,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/customers/:id",
|
||||
},
|
||||
"transactionsPerMinute": 0.03333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 28176,
|
||||
"impact": 0.020817787536585832,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-python",
|
||||
"transaction.name": "POST opbeans.views.post_order",
|
||||
},
|
||||
"transactionsPerMinute": 0.016666666666666666,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 9298.75,
|
||||
"impact": 0.02853705020124346,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/products",
|
||||
},
|
||||
"transactionsPerMinute": 0.06666666666666667,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 7441.6,
|
||||
"impact": 0.028548176757917213,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#order",
|
||||
},
|
||||
"transactionsPerMinute": 0.08333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 6260.166666666667,
|
||||
"impact": 0.028850305566058266,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#topProducts",
|
||||
},
|
||||
"transactionsPerMinute": 0.1,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 7656.2,
|
||||
"impact": 0.029466545627989022,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#customerWhoBought",
|
||||
},
|
||||
"transactionsPerMinute": 0.08333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 7016.5,
|
||||
"impact": 0.032734329734171834,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-ruby",
|
||||
"transaction.name": "Api::OrdersController#show",
|
||||
},
|
||||
"transactionsPerMinute": 0.1,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 21102.5,
|
||||
"impact": 0.03282505396551165,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-python",
|
||||
"transaction.name": "GET opbeans.views.customer",
|
||||
},
|
||||
"transactionsPerMinute": 0.03333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 14443.333333333334,
|
||||
"impact": 0.033787929062278454,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#stats",
|
||||
},
|
||||
"transactionsPerMinute": 0.05,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 2828.0625,
|
||||
"impact": 0.0354303800051189,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "ResourceHttpRequestHandler",
|
||||
},
|
||||
"transactionsPerMinute": 3.5,
|
||||
"transactionsPerMinute": 0.26666666666666666,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 270684,
|
||||
"impact": 15.261616628971955,
|
||||
"averageResponseTime": 9920.8,
|
||||
"impact": 0.03915777649082508,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#product",
|
||||
},
|
||||
"transactionsPerMinute": 0.08333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 16860.333333333332,
|
||||
"impact": 0.03999398001930612,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-python",
|
||||
"transaction.name": "GET opbeans.views.orders",
|
||||
},
|
||||
"transactionsPerMinute": 0.05,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 10264.8,
|
||||
"impact": 0.04062990552765966,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "POST /api/orders",
|
||||
"transaction.name": "GET /api/products/top",
|
||||
},
|
||||
"transactionsPerMinute": 0.08333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 8818.833333333334,
|
||||
"impact": 0.04198991310878184,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-python",
|
||||
"transaction.name": "GET opbeans.views.order",
|
||||
},
|
||||
"transactionsPerMinute": 0.1,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 4649.307692307692,
|
||||
"impact": 0.04843304531185787,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-go",
|
||||
"transaction.name": "GET /api/types/:id",
|
||||
},
|
||||
"transactionsPerMinute": 0.21666666666666667,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 30425,
|
||||
"impact": 0.048783103902593536,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-python",
|
||||
"transaction.name": "GET opbeans.views.products",
|
||||
},
|
||||
"transactionsPerMinute": 0.03333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 4215.2,
|
||||
"impact": 0.05081840788491484,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-go",
|
||||
"transaction.name": "GET /api/types",
|
||||
},
|
||||
"transactionsPerMinute": 0.25,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 36010.53846153846,
|
||||
"impact": 26.61043592713186,
|
||||
"averageResponseTime": 7333.777777777777,
|
||||
"impact": 0.053194355679247865,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "DispatcherServlet#doGet",
|
||||
"service.name": "opbeans-ruby",
|
||||
"transaction.name": "Api::StatsController#index",
|
||||
},
|
||||
"transactionsPerMinute": 3.25,
|
||||
"transactionsPerMinute": 0.15,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 208000,
|
||||
"impact": 35.56882613781033,
|
||||
"averageResponseTime": 7562.111111111111,
|
||||
"impact": 0.05495320752267524,
|
||||
"key": Object {
|
||||
"service.name": "client",
|
||||
"transaction.name": "/dashboard",
|
||||
"service.name": "opbeans-ruby",
|
||||
"transaction.name": "Api::TypesController#index",
|
||||
},
|
||||
"transactionsPerMinute": 0.75,
|
||||
"transactionsPerMinute": 0.15,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 49816.15625,
|
||||
"impact": 91.32732325394932,
|
||||
"averageResponseTime": 5459.307692307692,
|
||||
"impact": 0.057445556217595194,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-go",
|
||||
"transaction.name": "GET /api/products",
|
||||
},
|
||||
"transactionsPerMinute": 0.21666666666666667,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 7248.5,
|
||||
"impact": 0.058741372125599586,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-ruby",
|
||||
"transaction.name": "Api::TypesController#show",
|
||||
},
|
||||
"transactionsPerMinute": 0.16666666666666666,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 87771,
|
||||
"impact": 0.07182449099597951,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-python",
|
||||
"transaction.name": "GET opbeans.views.top_products",
|
||||
},
|
||||
"transactionsPerMinute": 0.016666666666666666,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 6161.2,
|
||||
"impact": 0.0758018070623576,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-go",
|
||||
"transaction.name": "GET /api/orders/:id",
|
||||
},
|
||||
"transactionsPerMinute": 0.25,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 19260.8,
|
||||
"impact": 0.07912779161883388,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-python",
|
||||
"transaction.name": "GET opbeans.views.product_types",
|
||||
},
|
||||
"transactionsPerMinute": 0.08333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 10632.4,
|
||||
"impact": 0.08770379914737025,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-ruby",
|
||||
"transaction.name": "Api::ProductsController#show",
|
||||
},
|
||||
"transactionsPerMinute": 0.16666666666666666,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 54309.5,
|
||||
"impact": 0.08966806434477453,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-python",
|
||||
"transaction.name": "GET opbeans.views.customers",
|
||||
},
|
||||
"transactionsPerMinute": 0.03333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 5046.695652173913,
|
||||
"impact": 0.09604871665268258,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-go",
|
||||
"transaction.name": "GET /api/customers/:id",
|
||||
},
|
||||
"transactionsPerMinute": 0.38333333333333336,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 20346,
|
||||
"impact": 0.10118576228005537,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/stats",
|
||||
},
|
||||
"transactionsPerMinute": 0.1,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 18472.85714285714,
|
||||
"impact": 0.10737726312450965,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-python",
|
||||
"transaction.name": "GET opbeans.views.stats",
|
||||
},
|
||||
"transactionsPerMinute": 0.11666666666666667,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 32662,
|
||||
"impact": 0.10852244257293098,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/customers",
|
||||
},
|
||||
"transactionsPerMinute": 0.06666666666666667,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 13975.7,
|
||||
"impact": 0.11631873524532996,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-ruby",
|
||||
"transaction.name": "Api::ProductsController#index",
|
||||
},
|
||||
"transactionsPerMinute": 0.16666666666666666,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 13373.615384615385,
|
||||
"impact": 0.14550454928955053,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-go",
|
||||
"transaction.name": "GET /api/orders",
|
||||
},
|
||||
"transactionsPerMinute": 0.21666666666666667,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 19675.333333333332,
|
||||
"impact": 0.14826136767771575,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-ruby",
|
||||
"transaction.name": "Api::OrdersController#index",
|
||||
},
|
||||
"transactionsPerMinute": 0.15,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 12946.266666666666,
|
||||
"impact": 0.1629107633721697,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-ruby",
|
||||
"transaction.name": "Api::CustomersController#show",
|
||||
},
|
||||
"transactionsPerMinute": 0.25,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 16506.666666666668,
|
||||
"impact": 0.16623674792864598,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-go",
|
||||
"transaction.name": "GET /api/products/:id/customers",
|
||||
},
|
||||
"transactionsPerMinute": 0.2,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 17101.5,
|
||||
"impact": 0.1723460834315095,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-ruby",
|
||||
"transaction.name": "Api::ProductsController#top",
|
||||
},
|
||||
"transactionsPerMinute": 0.2,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 15871.3125,
|
||||
"impact": 0.21404756195574876,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-go",
|
||||
"transaction.name": "GET /api/stats",
|
||||
},
|
||||
"transactionsPerMinute": 0.26666666666666666,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 11237.785714285714,
|
||||
"impact": 0.26601457284498453,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-ruby",
|
||||
"transaction.name": "Api::CustomersController#index",
|
||||
},
|
||||
"transactionsPerMinute": 0.4666666666666667,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 15403.40909090909,
|
||||
"impact": 0.28674163615023057,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-go",
|
||||
"transaction.name": "GET /api/products/:id",
|
||||
},
|
||||
"transactionsPerMinute": 0.36666666666666664,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 101902.16666666667,
|
||||
"impact": 0.5200039055925703,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-python",
|
||||
"transaction.name": "GET opbeans.views.product_customers",
|
||||
},
|
||||
"transactionsPerMinute": 0.1,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 32236.133333333335,
|
||||
"impact": 0.82441879318559,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api",
|
||||
},
|
||||
"transactionsPerMinute": 8,
|
||||
"transactionsPerMinute": 0.5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 1745009,
|
||||
"impact": 100,
|
||||
"averageResponseTime": 94012.11111111111,
|
||||
"impact": 1.445052989113503,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-go",
|
||||
"transaction.name": "GET /api/customers",
|
||||
},
|
||||
"transactionsPerMinute": 0.3,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 32260.39837398374,
|
||||
"impact": 3.3928945329783606,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-ruby",
|
||||
"transaction.name": "Rack",
|
||||
},
|
||||
"transactionsPerMinute": 2.05,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 34207.61666666667,
|
||||
"impact": 3.5100528953080716,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-python",
|
||||
"transaction.name": "opbeans.tasks.sync_orders",
|
||||
},
|
||||
"transactionsPerMinute": 2,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 638040,
|
||||
"impact": 13.648987298470669,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-rum",
|
||||
"transaction.name": "/customers",
|
||||
},
|
||||
"transactionsPerMinute": 0.4166666666666667,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 2061418.6666666667,
|
||||
"impact": 15.875811844928256,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "DispatcherServlet#doGet",
|
||||
},
|
||||
"transactionsPerMinute": 0.15,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 847846.1538461539,
|
||||
"impact": 18.8639188225597,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-rum",
|
||||
"transaction.name": "/orders",
|
||||
},
|
||||
"transactionsPerMinute": 0.43333333333333335,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 1091031.25,
|
||||
"impact": 29.87835404059707,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-rum",
|
||||
"transaction.name": "/products",
|
||||
},
|
||||
"transactionsPerMinute": 0.5333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 924980.3921568628,
|
||||
"impact": 40.37240876189292,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-rum",
|
||||
"transaction.name": "/dashboard",
|
||||
},
|
||||
"transactionsPerMinute": 0.85,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 979844.2117647058,
|
||||
"impact": 71.28092018746297,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "Process completed order",
|
||||
},
|
||||
"transactionsPerMinute": 1.4166666666666667,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 996808.380952381,
|
||||
"impact": 71.66191574108551,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "Process payment",
|
||||
},
|
||||
"transactionsPerMinute": 0.25,
|
||||
"transactionsPerMinute": 1.4,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 1083442.5568181819,
|
||||
"impact": 81.59967772014184,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "Update shipping status",
|
||||
},
|
||||
"transactionsPerMinute": 1.4666666666666666,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 134550.32361111112,
|
||||
"impact": 82.91200201469418,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-python",
|
||||
"transaction.name": "opbeans.tasks.update_stats",
|
||||
},
|
||||
"transactionsPerMinute": 12,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 1600567.6301369863,
|
||||
"impact": 100,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-python",
|
||||
"transaction.name": "opbeans.tasks.sync_customers",
|
||||
},
|
||||
"transactionsPerMinute": 1.2166666666666666,
|
||||
},
|
||||
]
|
||||
`;
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
*/
|
||||
import expect from '@kbn/expect';
|
||||
import { sortBy, omit } from 'lodash';
|
||||
import archives_metadata from '../../../common/archives_metadata';
|
||||
import { expectSnapshot } from '../../../common/match_snapshot';
|
||||
import { FtrProviderContext } from '../../../../common/ftr_provider_context';
|
||||
|
||||
|
@ -12,9 +13,12 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
const supertest = getService('supertest');
|
||||
const esArchiver = getService('esArchiver');
|
||||
|
||||
const archiveName = 'apm_8.0.0';
|
||||
const metadata = archives_metadata[archiveName];
|
||||
|
||||
// url parameters
|
||||
const start = encodeURIComponent('2020-06-29T06:45:00.000Z');
|
||||
const end = encodeURIComponent('2020-06-29T06:49:00.000Z');
|
||||
const start = encodeURIComponent(metadata.start);
|
||||
const end = encodeURIComponent(metadata.end);
|
||||
const uiFilters = encodeURIComponent(JSON.stringify({}));
|
||||
|
||||
describe('Top traces', () => {
|
||||
|
@ -25,32 +29,27 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
);
|
||||
|
||||
expect(response.status).to.be(200);
|
||||
expectSnapshot(response.body).toMatchInline(`
|
||||
Object {
|
||||
"bucketSize": 1000,
|
||||
"isAggregationAccurate": true,
|
||||
"items": Array [],
|
||||
}
|
||||
`);
|
||||
expect(response.body.items.length).to.be(0);
|
||||
expect(response.body.isAggregationAccurate).to.be(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('when data is loaded', () => {
|
||||
let response: any;
|
||||
before(async () => {
|
||||
await esArchiver.load('8.0.0');
|
||||
await esArchiver.load(archiveName);
|
||||
response = await supertest.get(
|
||||
`/api/apm/traces?start=${start}&end=${end}&uiFilters=${uiFilters}`
|
||||
);
|
||||
});
|
||||
after(() => esArchiver.unload('8.0.0'));
|
||||
after(() => esArchiver.unload(archiveName));
|
||||
|
||||
it('returns the correct status code', async () => {
|
||||
expect(response.status).to.be(200);
|
||||
});
|
||||
|
||||
it('returns the correct number of buckets', async () => {
|
||||
expectSnapshot(response.body.items.length).toMatchInline(`33`);
|
||||
expectSnapshot(response.body.items.length).toMatchInline(`66`);
|
||||
});
|
||||
|
||||
it('returns the correct buckets', async () => {
|
||||
|
@ -68,49 +67,49 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
|
||||
expectSnapshot(firstItem).toMatchInline(`
|
||||
Object {
|
||||
"averageResponseTime": 2577,
|
||||
"averageResponseTime": 3853,
|
||||
"impact": 0,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /throw-error",
|
||||
"service.name": "opbeans-ruby",
|
||||
"transaction.name": "Api::OrdersController#create",
|
||||
},
|
||||
"transactionsPerMinute": 0.5,
|
||||
"transactionsPerMinute": 0.016666666666666666,
|
||||
}
|
||||
`);
|
||||
|
||||
expectSnapshot(lastItem).toMatchInline(`
|
||||
Object {
|
||||
"averageResponseTime": 1745009,
|
||||
"averageResponseTime": 1600567.6301369863,
|
||||
"impact": 100,
|
||||
"key": Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "Process payment",
|
||||
"service.name": "opbeans-python",
|
||||
"transaction.name": "opbeans.tasks.sync_customers",
|
||||
},
|
||||
"transactionsPerMinute": 0.25,
|
||||
"transactionsPerMinute": 1.2166666666666666,
|
||||
}
|
||||
`);
|
||||
|
||||
expectSnapshot(groups).toMatchInline(`
|
||||
Array [
|
||||
Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /throw-error",
|
||||
"service.name": "opbeans-ruby",
|
||||
"transaction.name": "Api::OrdersController#create",
|
||||
},
|
||||
Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#orders",
|
||||
},
|
||||
Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#order",
|
||||
},
|
||||
Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#product",
|
||||
},
|
||||
Object {
|
||||
"service.name": "opbeans-node",
|
||||
"transaction.name": "GET /api/products/:id/customers",
|
||||
"transaction.name": "GET /api/types",
|
||||
},
|
||||
Object {
|
||||
"service.name": "opbeans-java",
|
||||
"transaction.name": "APIRestController#products",
|
||||
},
|
||||
Object {
|
||||
"service.name": "opbeans-go",
|
||||
"transaction.name": "POST /api/orders",
|
||||
},
|
||||
]
|
||||
`);
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -3,130 +3,95 @@
|
|||
exports[`Top transaction groups when data is loaded returns the correct buckets (when ignoring samples) 1`] = `
|
||||
Array [
|
||||
Object {
|
||||
"averageResponseTime": 2577,
|
||||
"averageResponseTime": 2612,
|
||||
"impact": 0,
|
||||
"key": "GET /throw-error",
|
||||
"p95": 3224,
|
||||
"transactionsPerMinute": 0.5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 4757,
|
||||
"impact": 0.20830834986820673,
|
||||
"key": "GET /api/products/:id/customers",
|
||||
"p95": 5616,
|
||||
"transactionsPerMinute": 0.5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 4749.666666666667,
|
||||
"impact": 0.43453312891085794,
|
||||
"key": "GET /api/orders/:id",
|
||||
"p95": 7184,
|
||||
"transactionsPerMinute": 0.75,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 8181,
|
||||
"impact": 0.5354862351657939,
|
||||
"key": "GET /api/types/:id",
|
||||
"p95": 10080,
|
||||
"transactionsPerMinute": 0.5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 20011,
|
||||
"impact": 0.7098250353192541,
|
||||
"key": "POST /api",
|
||||
"p95": 19968,
|
||||
"transactionsPerMinute": 0.25,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 35846,
|
||||
"impact": 1.466376117925459,
|
||||
"key": "GET /log-error",
|
||||
"p95": 35840,
|
||||
"transactionsPerMinute": 0.25,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 7105.333333333333,
|
||||
"impact": 1.7905918202662048,
|
||||
"key": "GET /api/stats",
|
||||
"p95": 15136,
|
||||
"transactionsPerMinute": 1.5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 22958.5,
|
||||
"impact": 1.9475397398343375,
|
||||
"key": "GET /api/products/top",
|
||||
"p95": 33216,
|
||||
"transactionsPerMinute": 0.5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 3492.9285714285716,
|
||||
"impact": 2.0901067389184496,
|
||||
"key": "GET static file",
|
||||
"p95": 11900,
|
||||
"transactionsPerMinute": 3.5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 26992.5,
|
||||
"impact": 2.3330057413794503,
|
||||
"key": "GET /api/types",
|
||||
"p95": 45248,
|
||||
"transactionsPerMinute": 0.5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 13516.5,
|
||||
"impact": 2.3368756900811305,
|
||||
"key": "GET /api/products/:id",
|
||||
"p95": 37856,
|
||||
"transactionsPerMinute": 1,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 8585,
|
||||
"impact": 2.624924094061731,
|
||||
"key": "GET /api/products",
|
||||
"p95": 22112,
|
||||
"transactionsPerMinute": 1.75,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 7615.625,
|
||||
"impact": 2.6645791239678345,
|
||||
"key": "GET /api/orders",
|
||||
"p95": 11616,
|
||||
"transactionsPerMinute": 2,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 3262.95,
|
||||
"impact": 2.8716452680799467,
|
||||
"key": "GET /*",
|
||||
"p95": 4472,
|
||||
"transactionsPerMinute": 5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 32667.5,
|
||||
"impact": 2.875276331059301,
|
||||
"key": "GET /log-message",
|
||||
"p95": 38528,
|
||||
"transactionsPerMinute": 0.5,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 16896.8,
|
||||
"impact": 3.790160870423129,
|
||||
"key": "GET /api/customers",
|
||||
"p95": 26432,
|
||||
"transactionsPerMinute": 1.25,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 270684,
|
||||
"impact": 12.686265169840583,
|
||||
"key": "POST /api/orders",
|
||||
"p95": 270336,
|
||||
"transactionsPerMinute": 0.25,
|
||||
"p95": 2608,
|
||||
"transactionsPerMinute": 0.016666666666666666,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 51175.73170731707,
|
||||
"averageResponseTime": 8710,
|
||||
"impact": 0.21594473634705155,
|
||||
"key": "GET /api/types/:id",
|
||||
"p95": 8832,
|
||||
"transactionsPerMinute": 0.03333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 15469,
|
||||
"impact": 0.41307743123761353,
|
||||
"key": "GET /api/products/:id/customers",
|
||||
"p95": 17728,
|
||||
"transactionsPerMinute": 0.03333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 11161.5,
|
||||
"impact": 0.6129808919240927,
|
||||
"key": "GET /api/customers/:id",
|
||||
"p95": 16096,
|
||||
"transactionsPerMinute": 0.06666666666666667,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 8115.166666666667,
|
||||
"impact": 0.6719690374213795,
|
||||
"key": "GET /api/types",
|
||||
"p95": 12336,
|
||||
"transactionsPerMinute": 0.1,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 10863.6,
|
||||
"impact": 0.7540274539141442,
|
||||
"key": "GET /api/orders/:id",
|
||||
"p95": 20192,
|
||||
"transactionsPerMinute": 0.08333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 9906,
|
||||
"impact": 0.8286631346694258,
|
||||
"key": "GET /api/products/:id",
|
||||
"p95": 13280,
|
||||
"transactionsPerMinute": 0.1,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 8524.454545454546,
|
||||
"impact": 1.329340513991638,
|
||||
"key": "GET /api/products",
|
||||
"p95": 14256,
|
||||
"transactionsPerMinute": 0.18333333333333332,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 12947,
|
||||
"impact": 1.472355777994578,
|
||||
"key": "GET /api/orders",
|
||||
"p95": 25584,
|
||||
"transactionsPerMinute": 0.13333333333333333,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 11307.75,
|
||||
"impact": 2.6003199505345393,
|
||||
"key": "GET /api/products/top",
|
||||
"p95": 16304,
|
||||
"transactionsPerMinute": 0.26666666666666666,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 26755.666666666668,
|
||||
"impact": 4.644036801602961,
|
||||
"key": "GET /api/customers",
|
||||
"p95": 39104,
|
||||
"transactionsPerMinute": 0.2,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 17851.384615384617,
|
||||
"impact": 6.730394279972759,
|
||||
"key": "GET /api/stats",
|
||||
"p95": 24416,
|
||||
"transactionsPerMinute": 0.43333333333333335,
|
||||
},
|
||||
Object {
|
||||
"averageResponseTime": 61249.30357142857,
|
||||
"impact": 100,
|
||||
"key": "GET /api",
|
||||
"p95": 259040,
|
||||
"transactionsPerMinute": 10.25,
|
||||
"p95": 162784,
|
||||
"transactionsPerMinute": 1.8666666666666667,
|
||||
},
|
||||
]
|
||||
`;
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -4,6 +4,7 @@
|
|||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
import expect from '@kbn/expect';
|
||||
import archives_metadata from '../../../common/archives_metadata';
|
||||
import { expectSnapshot } from '../../../common/match_snapshot';
|
||||
import { FtrProviderContext } from '../../../common/ftr_provider_context';
|
||||
|
||||
|
@ -11,8 +12,11 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
const supertest = getService('supertest');
|
||||
const esArchiver = getService('esArchiver');
|
||||
|
||||
const start = encodeURIComponent('2020-06-29T06:45:00.000Z');
|
||||
const end = encodeURIComponent('2020-06-29T06:49:00.000Z');
|
||||
const archiveName = 'apm_8.0.0';
|
||||
const metadata = archives_metadata[archiveName];
|
||||
|
||||
const start = encodeURIComponent(metadata.start);
|
||||
const end = encodeURIComponent(metadata.end);
|
||||
const transactionName = '/products';
|
||||
const uiFilters = encodeURIComponent(JSON.stringify({}));
|
||||
|
||||
|
@ -28,23 +32,34 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
});
|
||||
|
||||
describe('when data is loaded', () => {
|
||||
before(() => esArchiver.load('8.0.0'));
|
||||
after(() => esArchiver.unload('8.0.0'));
|
||||
before(() => esArchiver.load(archiveName));
|
||||
after(() => esArchiver.unload(archiveName));
|
||||
|
||||
it('returns the average duration by browser', async () => {
|
||||
const response = await supertest.get(
|
||||
`/api/apm/services/client/transaction_groups/avg_duration_by_browser?start=${start}&end=${end}&uiFilters=${uiFilters}`
|
||||
`/api/apm/services/opbeans-rum/transaction_groups/avg_duration_by_browser?start=${start}&end=${end}&uiFilters=${uiFilters}`
|
||||
);
|
||||
|
||||
expect(response.status).to.be(200);
|
||||
|
||||
expect(response.body.length).to.be.greaterThan(0);
|
||||
|
||||
expectSnapshot(response.body).toMatch();
|
||||
|
||||
expectSnapshot(response.body.length).toMatchInline(`1`);
|
||||
});
|
||||
|
||||
it('returns the average duration by browser filtering by transaction name', async () => {
|
||||
const response = await supertest.get(
|
||||
`/api/apm/services/client/transaction_groups/avg_duration_by_browser?start=${start}&end=${end}&uiFilters=${uiFilters}&transactionName=${transactionName}`
|
||||
`/api/apm/services/opbeans-rum/transaction_groups/avg_duration_by_browser?start=${start}&end=${end}&uiFilters=${uiFilters}&transactionName=${transactionName}`
|
||||
);
|
||||
|
||||
expect(response.status).to.be(200);
|
||||
|
||||
expect(response.body.length).to.be.greaterThan(0);
|
||||
|
||||
expectSnapshot(response.body.length).toMatchInline(`1`);
|
||||
|
||||
expectSnapshot(response.body).toMatch();
|
||||
});
|
||||
});
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
import expect from '@kbn/expect';
|
||||
import archives_metadata from '../../../common/archives_metadata';
|
||||
import { expectSnapshot } from '../../../common/match_snapshot';
|
||||
import { FtrProviderContext } from '../../../common/ftr_provider_context';
|
||||
|
||||
|
@ -11,8 +12,11 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
const supertest = getService('supertest');
|
||||
const esArchiver = getService('esArchiver');
|
||||
|
||||
const start = encodeURIComponent('2020-06-29T06:45:00.000Z');
|
||||
const end = encodeURIComponent('2020-06-29T06:49:00.000Z');
|
||||
const archiveName = 'apm_8.0.0';
|
||||
const metadata = archives_metadata[archiveName];
|
||||
|
||||
const start = encodeURIComponent(metadata.start);
|
||||
const end = encodeURIComponent(metadata.end);
|
||||
const transactionType = 'request';
|
||||
const transactionName = 'GET /api';
|
||||
const uiFilters = encodeURIComponent(JSON.stringify({}));
|
||||
|
@ -29,8 +33,8 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
});
|
||||
|
||||
describe('when data is loaded', () => {
|
||||
before(() => esArchiver.load('8.0.0'));
|
||||
after(() => esArchiver.unload('8.0.0'));
|
||||
before(() => esArchiver.load(archiveName));
|
||||
after(() => esArchiver.unload(archiveName));
|
||||
|
||||
it('returns the transaction breakdown for a service', async () => {
|
||||
const response = await supertest.get(
|
||||
|
@ -46,45 +50,46 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
);
|
||||
|
||||
expect(response.status).to.be(200);
|
||||
|
||||
const { timeseries } = response.body;
|
||||
|
||||
const numberOfSeries = timeseries.length;
|
||||
|
||||
expectSnapshot(numberOfSeries).toMatchInline(`1`);
|
||||
|
||||
const { title, color, type, data, hideLegend, legendValue } = timeseries[0];
|
||||
|
||||
expectSnapshot(data).toMatchInline(`
|
||||
const nonNullDataPoints = data.filter((y: number | null) => y !== null);
|
||||
|
||||
expectSnapshot(nonNullDataPoints.length).toMatchInline(`121`);
|
||||
|
||||
expectSnapshot(
|
||||
data.slice(0, 5).map(({ x, y }: { x: number; y: number | null }) => {
|
||||
return {
|
||||
x: new Date(x ?? NaN).toISOString(),
|
||||
y,
|
||||
};
|
||||
})
|
||||
).toMatchInline(`
|
||||
Array [
|
||||
Object {
|
||||
"x": 1593413100000,
|
||||
"y": null,
|
||||
},
|
||||
Object {
|
||||
"x": 1593413130000,
|
||||
"y": null,
|
||||
},
|
||||
Object {
|
||||
"x": 1593413160000,
|
||||
"y": null,
|
||||
},
|
||||
Object {
|
||||
"x": 1593413190000,
|
||||
"y": null,
|
||||
},
|
||||
Object {
|
||||
"x": 1593413220000,
|
||||
"y": null,
|
||||
},
|
||||
Object {
|
||||
"x": 1593413250000,
|
||||
"y": null,
|
||||
},
|
||||
Object {
|
||||
"x": 1593413280000,
|
||||
"y": null,
|
||||
},
|
||||
Object {
|
||||
"x": 1593413310000,
|
||||
"x": "2020-09-10T06:00:00.000Z",
|
||||
"y": 1,
|
||||
},
|
||||
Object {
|
||||
"x": 1593413340000,
|
||||
"x": "2020-09-10T06:00:30.000Z",
|
||||
"y": 1,
|
||||
},
|
||||
Object {
|
||||
"x": "2020-09-10T06:01:00.000Z",
|
||||
"y": null,
|
||||
},
|
||||
Object {
|
||||
"x": "2020-09-10T06:01:30.000Z",
|
||||
"y": 1,
|
||||
},
|
||||
Object {
|
||||
"x": "2020-09-10T06:02:00.000Z",
|
||||
"y": null,
|
||||
},
|
||||
]
|
||||
|
@ -95,6 +100,8 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
expectSnapshot(type).toMatchInline(`"areaStacked"`);
|
||||
expectSnapshot(hideLegend).toMatchInline(`false`);
|
||||
expectSnapshot(legendValue).toMatchInline(`"100%"`);
|
||||
|
||||
expectSnapshot(data).toMatch();
|
||||
});
|
||||
it('returns the transaction breakdown sorted by name', async () => {
|
||||
const response = await supertest.get(
|
||||
|
@ -108,7 +115,6 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
"app",
|
||||
"http",
|
||||
"postgresql",
|
||||
"redis",
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
*/
|
||||
import expect from '@kbn/expect';
|
||||
import { first, last } from 'lodash';
|
||||
import archives_metadata from '../../../common/archives_metadata';
|
||||
import { expectSnapshot } from '../../../common/match_snapshot';
|
||||
import { FtrProviderContext } from '../../../common/ftr_provider_context';
|
||||
|
||||
|
@ -12,9 +13,12 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
const supertest = getService('supertest');
|
||||
const esArchiver = getService('esArchiver');
|
||||
|
||||
const archiveName = 'apm_8.0.0';
|
||||
const metadata = archives_metadata[archiveName];
|
||||
|
||||
// url parameters
|
||||
const start = encodeURIComponent('2020-08-26T11:00:00.000Z');
|
||||
const end = encodeURIComponent('2020-08-26T11:30:00.000Z');
|
||||
const start = encodeURIComponent(metadata.start);
|
||||
const end = encodeURIComponent(metadata.end);
|
||||
const uiFilters = encodeURIComponent(JSON.stringify({}));
|
||||
|
||||
describe('Error rate', () => {
|
||||
|
@ -24,16 +28,16 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
`/api/apm/services/opbeans-java/transaction_groups/error_rate?start=${start}&end=${end}&uiFilters=${uiFilters}`
|
||||
);
|
||||
expect(response.status).to.be(200);
|
||||
expect(response.body).to.eql({
|
||||
noHits: true,
|
||||
erroneousTransactionsRate: [],
|
||||
average: null,
|
||||
});
|
||||
|
||||
expect(response.body.noHits).to.be(true);
|
||||
|
||||
expect(response.body.erroneousTransactionsRate.length).to.be(0);
|
||||
expect(response.body.average).to.be(null);
|
||||
});
|
||||
});
|
||||
describe('when data is loaded', () => {
|
||||
before(() => esArchiver.load('8.0.0'));
|
||||
after(() => esArchiver.unload('8.0.0'));
|
||||
before(() => esArchiver.load(archiveName));
|
||||
after(() => esArchiver.unload(archiveName));
|
||||
|
||||
describe('returns the transaction error rate', () => {
|
||||
let errorRateResponse: {
|
||||
|
@ -50,26 +54,26 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
it('has the correct start date', () => {
|
||||
expectSnapshot(
|
||||
new Date(first(errorRateResponse.erroneousTransactionsRate)?.x ?? NaN).toISOString()
|
||||
).toMatchInline(`"2020-08-26T11:00:00.000Z"`);
|
||||
).toMatchInline(`"2020-09-10T06:00:00.000Z"`);
|
||||
});
|
||||
|
||||
it('has the correct end date', () => {
|
||||
expectSnapshot(
|
||||
new Date(last(errorRateResponse.erroneousTransactionsRate)?.x ?? NaN).toISOString()
|
||||
).toMatchInline(`"2020-08-26T11:30:00.000Z"`);
|
||||
).toMatchInline(`"2020-09-10T07:00:00.000Z"`);
|
||||
});
|
||||
|
||||
it('has the correct number of buckets', () => {
|
||||
expectSnapshot(errorRateResponse.erroneousTransactionsRate.length).toMatchInline(`61`);
|
||||
expectSnapshot(errorRateResponse.erroneousTransactionsRate.length).toMatchInline(`121`);
|
||||
});
|
||||
|
||||
it('has the correct calculation for average', () => {
|
||||
expectSnapshot(errorRateResponse.average).toMatchInline(`0.18894993894993897`);
|
||||
expectSnapshot(errorRateResponse.average).toMatchInline(`0.16097046413502106`);
|
||||
});
|
||||
|
||||
it('has the correct error rate', () => {
|
||||
expectSnapshot(first(errorRateResponse.erroneousTransactionsRate)?.y).toMatchInline(
|
||||
`0.5`
|
||||
`0.6666666666666666`
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
*/
|
||||
import expect from '@kbn/expect';
|
||||
import { sortBy } from 'lodash';
|
||||
import archives_metadata from '../../../common/archives_metadata';
|
||||
import { expectSnapshot } from '../../../common/match_snapshot';
|
||||
import { FtrProviderContext } from '../../../../common/ftr_provider_context';
|
||||
|
||||
|
@ -20,9 +21,12 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
const supertest = getService('supertest');
|
||||
const esArchiver = getService('esArchiver');
|
||||
|
||||
const archiveName = 'apm_8.0.0';
|
||||
const metadata = archives_metadata[archiveName];
|
||||
|
||||
// url parameters
|
||||
const start = encodeURIComponent('2020-06-29T06:45:00.000Z');
|
||||
const end = encodeURIComponent('2020-06-29T06:49:00.000Z');
|
||||
const start = encodeURIComponent(metadata.start);
|
||||
const end = encodeURIComponent(metadata.end);
|
||||
const uiFilters = encodeURIComponent(JSON.stringify({}));
|
||||
const transactionType = 'request';
|
||||
|
||||
|
@ -34,39 +38,37 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
);
|
||||
|
||||
expect(response.status).to.be(200);
|
||||
expectSnapshot(response.body).toMatchInline(`
|
||||
Object {
|
||||
"bucketSize": 1000,
|
||||
"isAggregationAccurate": true,
|
||||
"items": Array [],
|
||||
}
|
||||
`);
|
||||
|
||||
expect(response.body.isAggregationAccurate).to.be(true);
|
||||
expect(response.body.items.length).to.be(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe('when data is loaded', () => {
|
||||
let response: any;
|
||||
before(async () => {
|
||||
await esArchiver.load('8.0.0');
|
||||
await esArchiver.load(archiveName);
|
||||
response = await supertest.get(
|
||||
`/api/apm/services/opbeans-node/transaction_groups?start=${start}&end=${end}&uiFilters=${uiFilters}&transactionType=${transactionType}`
|
||||
);
|
||||
});
|
||||
after(() => esArchiver.unload('8.0.0'));
|
||||
after(() => esArchiver.unload(archiveName));
|
||||
|
||||
it('returns the correct status code', async () => {
|
||||
it('returns the correct metadata', () => {
|
||||
expect(response.status).to.be(200);
|
||||
expect(response.body.isAggregationAccurate).to.be(true);
|
||||
expect(response.body.items.length).to.be.greaterThan(0);
|
||||
});
|
||||
|
||||
it('returns the correct number of buckets', async () => {
|
||||
expectSnapshot(response.body.items.length).toMatchInline(`18`);
|
||||
it('returns the correct number of buckets', () => {
|
||||
expectSnapshot(response.body.items.length).toMatchInline(`13`);
|
||||
});
|
||||
|
||||
it('returns the correct buckets (when ignoring samples)', async () => {
|
||||
it('returns the correct buckets (when ignoring samples)', () => {
|
||||
expectSnapshot(omitSampleFromTransactionGroups(response.body.items)).toMatch();
|
||||
});
|
||||
|
||||
it('returns the correct buckets and samples', async () => {
|
||||
it('returns the correct buckets and samples', () => {
|
||||
// sample should provide enough information to deeplink to a transaction detail page
|
||||
response.body.items.forEach((item: any) => {
|
||||
expect(item.sample.trace.id).to.be.an('string');
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
import expect from '@kbn/expect';
|
||||
import archives_metadata from '../../../common/archives_metadata';
|
||||
import { PromiseReturnType } from '../../../../../plugins/apm/typings/common';
|
||||
import { expectSnapshot } from '../../../common/match_snapshot';
|
||||
import { FtrProviderContext } from '../../../../common/ftr_provider_context';
|
||||
|
||||
|
@ -11,9 +13,12 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
const supertest = getService('supertest');
|
||||
const esArchiver = getService('esArchiver');
|
||||
|
||||
const archiveName = 'apm_8.0.0';
|
||||
const metadata = archives_metadata[archiveName];
|
||||
|
||||
// url parameters
|
||||
const start = encodeURIComponent('2020-06-29T06:45:00.000Z');
|
||||
const end = encodeURIComponent('2020-06-29T06:49:00.000Z');
|
||||
const start = encodeURIComponent(metadata.start);
|
||||
const end = encodeURIComponent(metadata.end);
|
||||
const uiFilters = encodeURIComponent(JSON.stringify({}));
|
||||
|
||||
describe('Transaction charts', () => {
|
||||
|
@ -24,32 +29,44 @@ export default function ApiTest({ getService }: FtrProviderContext) {
|
|||
);
|
||||
|
||||
expect(response.status).to.be(200);
|
||||
expectSnapshot(response.body).toMatchInline(`
|
||||
Object {
|
||||
"apmTimeseries": Object {
|
||||
"overallAvgDuration": null,
|
||||
"responseTimes": Object {
|
||||
"avg": Array [],
|
||||
"p95": Array [],
|
||||
"p99": Array [],
|
||||
},
|
||||
"tpmBuckets": Array [],
|
||||
},
|
||||
}
|
||||
`);
|
||||
|
||||
expect(response.body.apmTimeseries.overallAvgDuration).to.be(null);
|
||||
expect(response.body.apmTimeseries.responseTimes.avg.length).to.be(0);
|
||||
expect(response.body.apmTimeseries.responseTimes.p95.length).to.be(0);
|
||||
expect(response.body.apmTimeseries.responseTimes.p99.length).to.be(0);
|
||||
expect(response.body.apmTimeseries.tpmBuckets.length).to.be(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe('when data is loaded', () => {
|
||||
before(() => esArchiver.load('8.0.0'));
|
||||
after(() => esArchiver.unload('8.0.0'));
|
||||
before(() => esArchiver.load(archiveName));
|
||||
after(() => esArchiver.unload(archiveName));
|
||||
|
||||
it('returns the transaction charts', async () => {
|
||||
const response = await supertest.get(
|
||||
let response: PromiseReturnType<typeof supertest.get>;
|
||||
|
||||
before(async () => {
|
||||
response = await supertest.get(
|
||||
`/api/apm/services/opbeans-node/transaction_groups/charts?start=${start}&end=${end}&uiFilters=${uiFilters}`
|
||||
);
|
||||
});
|
||||
|
||||
it('returns some data', async () => {
|
||||
expect(response.status).to.be(200);
|
||||
|
||||
expect(response.body.apmTimeseries.overallAvgDuration).not.to.be(null);
|
||||
expect(response.body.apmTimeseries.responseTimes.avg.length).to.be.greaterThan(0);
|
||||
expect(response.body.apmTimeseries.responseTimes.p95.length).to.be.greaterThan(0);
|
||||
expect(response.body.apmTimeseries.responseTimes.p99.length).to.be.greaterThan(0);
|
||||
expect(response.body.apmTimeseries.tpmBuckets.length).to.be.greaterThan(0);
|
||||
});
|
||||
|
||||
it('returns the correct data', () => {
|
||||
expectSnapshot(response.body.apmTimeseries.overallAvgDuration).toMatchInline(
|
||||
`578297.1431623931`
|
||||
);
|
||||
expectSnapshot(response.body.apmTimeseries.responseTimes.avg.length).toMatchInline(`121`);
|
||||
expectSnapshot(response.body.apmTimeseries.tpmBuckets.length).toMatchInline(`4`);
|
||||
|
||||
expectSnapshot(response.body).toMatch();
|
||||
});
|
||||
});
|
||||
|
|
|
@ -12,6 +12,7 @@ import prettier from 'prettier';
|
|||
// @ts-expect-error
|
||||
import babelTraverse from '@babel/traverse';
|
||||
import { Suite, Test } from 'mocha';
|
||||
import { flatten } from 'lodash';
|
||||
|
||||
type ISnapshotState = InstanceType<typeof SnapshotState>;
|
||||
|
||||
|
@ -143,18 +144,24 @@ Error.prepareStackTrace = (error, structuredStackTrace) => {
|
|||
}
|
||||
};
|
||||
|
||||
function recursivelyGetTestsFromSuite(suite: Suite): Test[] {
|
||||
return suite.tests.concat(flatten(suite.suites.map((s) => recursivelyGetTestsFromSuite(s))));
|
||||
}
|
||||
|
||||
function getSnapshotState(file: string, test: Test) {
|
||||
const dirname = path.dirname(file);
|
||||
const filename = path.basename(file);
|
||||
|
||||
let parent = test.parent;
|
||||
const testsInFile: Test[] = [];
|
||||
let parent: Suite | undefined = test.parent;
|
||||
|
||||
while (parent) {
|
||||
testsInFile.push(...parent.tests);
|
||||
while (parent && parent.parent?.file === file) {
|
||||
parent = parent.parent;
|
||||
}
|
||||
|
||||
if (!parent) {
|
||||
throw new Error('Top-level suite not found');
|
||||
}
|
||||
|
||||
const snapshotState = new SnapshotState(
|
||||
path.join(dirname + `/__snapshots__/` + filename.replace(path.extname(filename), '.snap')),
|
||||
{
|
||||
|
@ -164,7 +171,7 @@ function getSnapshotState(file: string, test: Test) {
|
|||
}
|
||||
);
|
||||
|
||||
return { snapshotState, testsInFile };
|
||||
return { snapshotState, testsInFile: recursivelyGetTestsFromSuite(parent) };
|
||||
}
|
||||
|
||||
export function expectSnapshot(received: any) {
|
||||
|
|
1393
x-pack/test/apm_api_integration/trial/tests/service_maps/__snapshots__/service_maps.snap
generated
Normal file
1393
x-pack/test/apm_api_integration/trial/tests/service_maps/__snapshots__/service_maps.snap
generated
Normal file
File diff suppressed because it is too large
Load diff
|
@ -6,7 +6,9 @@
|
|||
|
||||
import querystring from 'querystring';
|
||||
import expect from '@kbn/expect';
|
||||
import { isEmpty } from 'lodash';
|
||||
import { isEmpty, uniq } from 'lodash';
|
||||
import archives_metadata from '../../../common/archives_metadata';
|
||||
import { PromiseReturnType } from '../../../../../plugins/apm/typings/common';
|
||||
import { expectSnapshot } from '../../../common/match_snapshot';
|
||||
import { FtrProviderContext } from '../../../common/ftr_provider_context';
|
||||
|
||||
|
@ -14,13 +16,16 @@ export default function serviceMapsApiTests({ getService }: FtrProviderContext)
|
|||
const supertest = getService('supertest');
|
||||
const esArchiver = getService('esArchiver');
|
||||
|
||||
const archiveName = 'apm_8.0.0';
|
||||
const metadata = archives_metadata[archiveName];
|
||||
const start = encodeURIComponent(metadata.start);
|
||||
const end = encodeURIComponent(metadata.end);
|
||||
|
||||
describe('Service Maps with a trial license', () => {
|
||||
describe('/api/apm/service-map', () => {
|
||||
describe('when there is no data', () => {
|
||||
it('returns empty list', async () => {
|
||||
const response = await supertest.get(
|
||||
'/api/apm/service-map?start=2020-06-28T10%3A24%3A46.055Z&end=2020-06-29T10%3A24%3A46.055Z'
|
||||
);
|
||||
const response = await supertest.get(`/api/apm/service-map?start=${start}&end=${end}`);
|
||||
|
||||
expect(response.status).to.be(200);
|
||||
expect(response.body.elements.length).to.be(0);
|
||||
|
@ -28,239 +33,56 @@ export default function serviceMapsApiTests({ getService }: FtrProviderContext)
|
|||
});
|
||||
|
||||
describe('when there is data', () => {
|
||||
before(() => esArchiver.load('8.0.0'));
|
||||
after(() => esArchiver.unload('8.0.0'));
|
||||
before(() => esArchiver.load(archiveName));
|
||||
after(() => esArchiver.unload(archiveName));
|
||||
|
||||
it('returns service map elements', async () => {
|
||||
const response = await supertest.get(
|
||||
'/api/apm/service-map?start=2020-06-28T10%3A24%3A46.055Z&end=2020-06-29T10%3A24%3A46.055Z'
|
||||
let response: PromiseReturnType<typeof supertest.get>;
|
||||
|
||||
before(async () => {
|
||||
response = await supertest.get(`/api/apm/service-map?start=${start}&end=${end}`);
|
||||
});
|
||||
|
||||
it('returns service map elements', () => {
|
||||
expect(response.status).to.be(200);
|
||||
expect(response.body.elements.length).to.be.greaterThan(0);
|
||||
});
|
||||
|
||||
it('returns the correct data', () => {
|
||||
const elements: Array<{ data: Record<string, any> }> = response.body.elements;
|
||||
|
||||
const serviceNames = uniq(
|
||||
elements
|
||||
.filter((element) => element.data['service.name'] !== undefined)
|
||||
.map((element) => element.data['service.name'])
|
||||
);
|
||||
|
||||
expect(response.status).to.be(200);
|
||||
|
||||
expectSnapshot(response.body).toMatchInline(`
|
||||
Object {
|
||||
"elements": Array [
|
||||
Object {
|
||||
"data": Object {
|
||||
"id": "client~opbeans-node",
|
||||
"source": "client",
|
||||
"sourceData": Object {
|
||||
"agent.name": "rum-js",
|
||||
"id": "client",
|
||||
"service.name": "client",
|
||||
},
|
||||
"target": "opbeans-node",
|
||||
"targetData": Object {
|
||||
"agent.name": "nodejs",
|
||||
"id": "opbeans-node",
|
||||
"service.environment": "production",
|
||||
"service.name": "opbeans-node",
|
||||
},
|
||||
},
|
||||
},
|
||||
Object {
|
||||
"data": Object {
|
||||
"id": "opbeans-java~>opbeans-java:3000",
|
||||
"source": "opbeans-java",
|
||||
"sourceData": Object {
|
||||
"agent.name": "java",
|
||||
"id": "opbeans-java",
|
||||
"service.environment": "production",
|
||||
"service.name": "opbeans-java",
|
||||
},
|
||||
"target": ">opbeans-java:3000",
|
||||
"targetData": Object {
|
||||
"id": ">opbeans-java:3000",
|
||||
"label": "opbeans-java:3000",
|
||||
"span.destination.service.resource": "opbeans-java:3000",
|
||||
"span.subtype": "http",
|
||||
"span.type": "external",
|
||||
},
|
||||
},
|
||||
},
|
||||
Object {
|
||||
"data": Object {
|
||||
"id": "opbeans-java~>postgresql",
|
||||
"source": "opbeans-java",
|
||||
"sourceData": Object {
|
||||
"agent.name": "java",
|
||||
"id": "opbeans-java",
|
||||
"service.environment": "production",
|
||||
"service.name": "opbeans-java",
|
||||
},
|
||||
"target": ">postgresql",
|
||||
"targetData": Object {
|
||||
"id": ">postgresql",
|
||||
"label": "postgresql",
|
||||
"span.destination.service.resource": "postgresql",
|
||||
"span.subtype": "postgresql",
|
||||
"span.type": "db",
|
||||
},
|
||||
},
|
||||
},
|
||||
Object {
|
||||
"data": Object {
|
||||
"bidirectional": true,
|
||||
"id": "opbeans-java~opbeans-node",
|
||||
"source": "opbeans-java",
|
||||
"sourceData": Object {
|
||||
"agent.name": "java",
|
||||
"id": "opbeans-java",
|
||||
"service.environment": "production",
|
||||
"service.name": "opbeans-java",
|
||||
},
|
||||
"target": "opbeans-node",
|
||||
"targetData": Object {
|
||||
"agent.name": "nodejs",
|
||||
"id": "opbeans-node",
|
||||
"service.environment": "production",
|
||||
"service.name": "opbeans-node",
|
||||
},
|
||||
},
|
||||
},
|
||||
Object {
|
||||
"data": Object {
|
||||
"id": "opbeans-node~>93.184.216.34:80",
|
||||
"source": "opbeans-node",
|
||||
"sourceData": Object {
|
||||
"agent.name": "nodejs",
|
||||
"id": "opbeans-node",
|
||||
"service.environment": "production",
|
||||
"service.name": "opbeans-node",
|
||||
},
|
||||
"target": ">93.184.216.34:80",
|
||||
"targetData": Object {
|
||||
"id": ">93.184.216.34:80",
|
||||
"label": "93.184.216.34:80",
|
||||
"span.destination.service.resource": "93.184.216.34:80",
|
||||
"span.subtype": "http",
|
||||
"span.type": "external",
|
||||
},
|
||||
},
|
||||
},
|
||||
Object {
|
||||
"data": Object {
|
||||
"id": "opbeans-node~>postgresql",
|
||||
"source": "opbeans-node",
|
||||
"sourceData": Object {
|
||||
"agent.name": "nodejs",
|
||||
"id": "opbeans-node",
|
||||
"service.environment": "production",
|
||||
"service.name": "opbeans-node",
|
||||
},
|
||||
"target": ">postgresql",
|
||||
"targetData": Object {
|
||||
"id": ">postgresql",
|
||||
"label": "postgresql",
|
||||
"span.destination.service.resource": "postgresql",
|
||||
"span.subtype": "postgresql",
|
||||
"span.type": "db",
|
||||
},
|
||||
},
|
||||
},
|
||||
Object {
|
||||
"data": Object {
|
||||
"id": "opbeans-node~>redis",
|
||||
"source": "opbeans-node",
|
||||
"sourceData": Object {
|
||||
"agent.name": "nodejs",
|
||||
"id": "opbeans-node",
|
||||
"service.environment": "production",
|
||||
"service.name": "opbeans-node",
|
||||
},
|
||||
"target": ">redis",
|
||||
"targetData": Object {
|
||||
"id": ">redis",
|
||||
"label": "redis",
|
||||
"span.destination.service.resource": "redis",
|
||||
"span.subtype": "redis",
|
||||
"span.type": "cache",
|
||||
},
|
||||
},
|
||||
},
|
||||
Object {
|
||||
"data": Object {
|
||||
"id": "opbeans-node~opbeans-java",
|
||||
"isInverseEdge": true,
|
||||
"source": "opbeans-node",
|
||||
"sourceData": Object {
|
||||
"agent.name": "nodejs",
|
||||
"id": "opbeans-node",
|
||||
"service.environment": "production",
|
||||
"service.name": "opbeans-node",
|
||||
},
|
||||
"target": "opbeans-java",
|
||||
"targetData": Object {
|
||||
"agent.name": "java",
|
||||
"id": "opbeans-java",
|
||||
"service.environment": "production",
|
||||
"service.name": "opbeans-java",
|
||||
},
|
||||
},
|
||||
},
|
||||
Object {
|
||||
"data": Object {
|
||||
"agent.name": "java",
|
||||
"id": "opbeans-java",
|
||||
"service.environment": "production",
|
||||
"service.name": "opbeans-java",
|
||||
},
|
||||
},
|
||||
Object {
|
||||
"data": Object {
|
||||
"agent.name": "nodejs",
|
||||
"id": "opbeans-node",
|
||||
"service.environment": "production",
|
||||
"service.name": "opbeans-node",
|
||||
},
|
||||
},
|
||||
Object {
|
||||
"data": Object {
|
||||
"id": ">opbeans-java:3000",
|
||||
"label": "opbeans-java:3000",
|
||||
"span.destination.service.resource": "opbeans-java:3000",
|
||||
"span.subtype": "http",
|
||||
"span.type": "external",
|
||||
},
|
||||
},
|
||||
Object {
|
||||
"data": Object {
|
||||
"agent.name": "rum-js",
|
||||
"id": "client",
|
||||
"service.name": "client",
|
||||
},
|
||||
},
|
||||
Object {
|
||||
"data": Object {
|
||||
"id": ">redis",
|
||||
"label": "redis",
|
||||
"span.destination.service.resource": "redis",
|
||||
"span.subtype": "redis",
|
||||
"span.type": "cache",
|
||||
},
|
||||
},
|
||||
Object {
|
||||
"data": Object {
|
||||
"id": ">postgresql",
|
||||
"label": "postgresql",
|
||||
"span.destination.service.resource": "postgresql",
|
||||
"span.subtype": "postgresql",
|
||||
"span.type": "db",
|
||||
},
|
||||
},
|
||||
Object {
|
||||
"data": Object {
|
||||
"id": ">93.184.216.34:80",
|
||||
"label": "93.184.216.34:80",
|
||||
"span.destination.service.resource": "93.184.216.34:80",
|
||||
"span.subtype": "http",
|
||||
"span.type": "external",
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
expectSnapshot(serviceNames).toMatchInline(`
|
||||
Array [
|
||||
"opbeans-rum",
|
||||
"opbeans-go",
|
||||
"opbeans-node",
|
||||
"opbeans-python",
|
||||
"opbeans-ruby",
|
||||
"opbeans-java",
|
||||
"opbeans-dotnet",
|
||||
]
|
||||
`);
|
||||
|
||||
const externalDestinations = uniq(
|
||||
elements
|
||||
.filter((element) => element.data.target?.startsWith('>'))
|
||||
.map((element) => element.data.target)
|
||||
);
|
||||
|
||||
expectSnapshot(externalDestinations).toMatchInline(`
|
||||
Array [
|
||||
">postgresql",
|
||||
">elasticsearch",
|
||||
">redis",
|
||||
]
|
||||
`);
|
||||
|
||||
expectSnapshot(elements).toMatch();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -269,48 +91,75 @@ export default function serviceMapsApiTests({ getService }: FtrProviderContext)
|
|||
describe('when there is no data', () => {
|
||||
it('returns an object with nulls', async () => {
|
||||
const q = querystring.stringify({
|
||||
start: '2020-06-28T10:24:46.055Z',
|
||||
end: '2020-06-29T10:24:46.055Z',
|
||||
start: metadata.start,
|
||||
end: metadata.end,
|
||||
uiFilters: {},
|
||||
});
|
||||
const response = await supertest.get(`/api/apm/service-map/service/opbeans-node?${q}`);
|
||||
|
||||
expect(response.status).to.be(200);
|
||||
|
||||
expect(response.body).to.eql({
|
||||
avgCpuUsage: null,
|
||||
avgErrorRate: null,
|
||||
avgMemoryUsage: null,
|
||||
transactionStats: {
|
||||
avgRequestsPerMinute: null,
|
||||
avgTransactionDuration: null,
|
||||
},
|
||||
});
|
||||
expect(response.body.avgCpuUsage).to.be(null);
|
||||
expect(response.body.avgErrorRate).to.be(null);
|
||||
expect(response.body.avgMemoryUsage).to.be(null);
|
||||
expect(response.body.transactionStats.avgRequestsPerMinute).to.be(null);
|
||||
expect(response.body.transactionStats.avgTransactionDuration).to.be(null);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('when there is data with anomalies', () => {
|
||||
before(() => esArchiver.load('apm_8.0.0'));
|
||||
after(() => esArchiver.unload('apm_8.0.0'));
|
||||
before(() => esArchiver.load(archiveName));
|
||||
after(() => esArchiver.unload(archiveName));
|
||||
|
||||
it('returns service map elements', async () => {
|
||||
const start = encodeURIComponent('2020-09-10T06:00:00.000Z');
|
||||
const end = encodeURIComponent('2020-09-10T07:00:00.000Z');
|
||||
let response: PromiseReturnType<typeof supertest.get>;
|
||||
|
||||
const response = await supertest.get(`/api/apm/service-map?start=${start}&end=${end}`);
|
||||
before(async () => {
|
||||
response = await supertest.get(`/api/apm/service-map?start=${start}&end=${end}`);
|
||||
});
|
||||
|
||||
it('returns service map elements with anomaly stats', () => {
|
||||
expect(response.status).to.be(200);
|
||||
const dataWithAnomalies = response.body.elements.filter(
|
||||
(el: { data: { serviceAnomalyStats?: {} } }) => !isEmpty(el.data.serviceAnomalyStats)
|
||||
);
|
||||
|
||||
expect(dataWithAnomalies).to.not.empty();
|
||||
|
||||
dataWithAnomalies.forEach(({ data }: any) => {
|
||||
expect(
|
||||
Object.values(data.serviceAnomalyStats).filter((value) => isEmpty(value))
|
||||
).to.not.empty();
|
||||
});
|
||||
});
|
||||
|
||||
it('returns the correct anomaly stats', () => {
|
||||
const dataWithAnomalies = response.body.elements.filter(
|
||||
(el: { data: { serviceAnomalyStats?: {} } }) => !isEmpty(el.data.serviceAnomalyStats)
|
||||
);
|
||||
|
||||
expectSnapshot(dataWithAnomalies.length).toMatchInline(`1`);
|
||||
expectSnapshot(dataWithAnomalies.slice(0, 3)).toMatchInline(`
|
||||
Array [
|
||||
Object {
|
||||
"data": Object {
|
||||
"agent.name": "java",
|
||||
"id": "opbeans-java",
|
||||
"service.environment": "production",
|
||||
"service.name": "opbeans-java",
|
||||
"serviceAnomalyStats": Object {
|
||||
"actualValue": 1707977.2499999995,
|
||||
"anomalyScore": 0.12232533657975532,
|
||||
"jobId": "apm-production-229a-high_mean_transaction_duration",
|
||||
"transactionType": "request",
|
||||
},
|
||||
},
|
||||
},
|
||||
]
|
||||
`);
|
||||
|
||||
expectSnapshot(response.body).toMatch();
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue