kibana/x-pack/test/alerting_api_integration/observability/helpers/syntrace.ts
Faisal Kanout 2b45cf628f
[AO] Add integration test for the Threshold Rule (#160633)
## Summary
It fixes #160510 by:
- Adding integration tests for the Threshold Rule.
- Update the consumer value. 
- Update the action group.
2023-06-30 16:11:58 +02:00

159 lines
4.7 KiB
TypeScript

/*
* 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 { Client } from '@elastic/elasticsearch';
import {
ApmSynthtraceEsClient,
ApmSynthtraceKibanaClient,
createLogger,
LogLevel,
} from '@kbn/apm-synthtrace';
import { apm, timerange } from '@kbn/apm-synthtrace-client';
export const getSyntraceClient = async ({
kibanaUrl,
esClient,
}: {
kibanaUrl: string;
esClient: Client;
}) => {
const kibanaClient = new ApmSynthtraceKibanaClient({
logger: createLogger(LogLevel.info),
target: kibanaUrl,
});
const packageVersion = await kibanaClient.fetchLatestApmPackageVersion();
return new ApmSynthtraceEsClient({
client: esClient,
logger: createLogger(LogLevel.info),
refreshAfterIndex: true,
version: packageVersion,
});
};
export const dataConfig = {
rate: 10,
transaction: {
name: 'GET /data',
duration: 1000,
},
service: {
name: 'lambda-python-dev-hello',
version: '$LATEST',
runtime: {
name: 'AWS_Lambda_python3.8',
version: '3.8.11',
},
framework: 'AWS Lambda',
agent: {
name: 'python',
version: '6.6.0',
},
},
containerOs: 'linux',
serverless: {
firstFunctionName: 'my-function-1',
secondFunctionName: 'my-function-2',
faasTriggerType: 'other',
},
cloud: {
provider: 'aws',
availabilityZone: 'us-central1-c',
region: 'us-east-1',
machineType: 'e2-standard-4',
projectName: 'elastic-observability',
serviceName: 'lambda',
},
};
export async function generateData({
synthtraceEsClient,
start,
end,
}: {
synthtraceEsClient: ApmSynthtraceEsClient;
start: number;
end: number;
}) {
const { rate, service, containerOs, serverless, cloud, transaction } = dataConfig;
const {
provider,
availabilityZone,
region,
machineType,
projectName,
serviceName: cloudServiceName,
} = cloud;
const { faasTriggerType, firstFunctionName, secondFunctionName } = serverless;
const { version, runtime, framework, agent, name: serviceName } = service;
const { name: serviceRunTimeName, version: serviceRunTimeVersion } = runtime;
const { name: agentName, version: agentVersion } = agent;
const instance = apm
.service({ name: serviceName, environment: 'production', agentName })
.instance('instance-a');
const traceEvents = [
timerange(start, end)
.interval('30s')
.rate(rate)
.generator((timestamp) =>
instance
.containerId('instance-a')
.transaction({ transactionName: transaction.name })
.timestamp(timestamp)
.defaults({
'cloud.provider': provider,
'cloud.project.name': projectName,
'cloud.service.name': cloudServiceName,
'cloud.availability_zone': availabilityZone,
'cloud.machine.type': machineType,
'cloud.region': region,
'faas.id': `arn:aws:lambda:us-west-2:123456789012:function:${firstFunctionName}`,
'faas.trigger.type': faasTriggerType,
'host.os.platform': containerOs,
'kubernetes.pod.uid': '48f4c5a5-0625-4bea-9d94-77ee94a17e70',
'service.version': version,
'service.runtime.name': serviceRunTimeName,
'service.runtime.version': serviceRunTimeVersion,
'service.framework.name': framework,
'agent.version': agentVersion,
})
.duration(transaction.duration)
.success()
),
timerange(start, end)
.interval('30s')
.rate(rate)
.generator((timestamp) =>
instance
.transaction({ transactionName: transaction.name })
.timestamp(timestamp)
.defaults({
'cloud.provider': provider,
'cloud.project.name': projectName,
'cloud.service.name': cloudServiceName,
'cloud.availability_zone': availabilityZone,
'cloud.machine.type': machineType,
'cloud.region': region,
'faas.id': `arn:aws:lambda:us-west-2:123456789012:function:${secondFunctionName}`,
'faas.trigger.type': faasTriggerType,
'host.os.platform': containerOs,
'kubernetes.pod.uid': '48f4c5a5-0625-4bea-9d94-77ee94a17e70',
'service.version': version,
'service.runtime.name': serviceRunTimeName,
'service.runtime.version': serviceRunTimeVersion,
'service.framework.name': framework,
'agent.version': agentVersion,
})
.duration(transaction.duration)
.success()
),
];
await synthtraceEsClient.index(traceEvents);
}