Skip to content

Commit

Permalink
Merge branch '192749-refactor-the-normalize-function-into-per-data-st…
Browse files Browse the repository at this point in the history
…ructure-serialization-logic' into bryce-192749-refactor-the-normalize-function-into-per-data-structure-serialization-logic

# Conflicts:
#	x-pack/plugins/observability_solution/apm/server/utils/es_fields_mappings.ts
  • Loading branch information
miloszmarcinkowski committed Sep 30, 2024
2 parents 004f587 + aebea67 commit 3f99bae
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 106 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,7 @@
import { merge } from 'lodash';
import { rangeQuery } from '@kbn/observability-plugin/server';
import { ProcessorEvent } from '@kbn/observability-plugin/common';
import {
metadataAppMetricMapping,
metadataAppTransactionEventMapping,
metaDataAppTransactionMetricMapping,
} from '../../utils/es_fields_mappings';
import { serviceInstanceMetadataDetailsMapping } from '../../utils/es_fields_mappings';
import { METRICSET_NAME, SERVICE_NAME, SERVICE_NODE_NAME } from '../../../common/es_fields/apm';
import { maybe } from '../../../common/utils/maybe';
import {
Expand Down Expand Up @@ -76,7 +72,7 @@ export async function getServiceInstanceMetadataDetails({
}
);

return maybe(metadataAppMetricMapping(response.hits.hits[0]?.fields));
return maybe(serviceInstanceMetadataDetailsMapping(response.hits.hits[0]?.fields));
}

async function getTransactionEventSample() {
Expand All @@ -96,7 +92,7 @@ export async function getServiceInstanceMetadataDetails({
}
);

return maybe(metadataAppTransactionEventMapping(response.hits.hits[0]?.fields));
return maybe(serviceInstanceMetadataDetailsMapping(response.hits.hits[0]?.fields));
}

async function getTransactionMetricSample() {
Expand All @@ -119,7 +115,7 @@ export async function getServiceInstanceMetadataDetails({
},
}
);
return maybe(metaDataAppTransactionMetricMapping(response.hits.hits[0]?.fields));
return maybe(serviceInstanceMetadataDetailsMapping(response.hits.hits[0]?.fields));
}

// we can expect the most detail of application metrics,
Expand All @@ -138,7 +134,6 @@ export async function getServiceInstanceMetadataDetails({
applicationMetricSample
);

// todo: find scenarios for container and cloud then add to mappings
const { agent, service, container, kubernetes, host, cloud } = sample;

return {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -730,7 +730,7 @@ export const serviceMetadataIconsMapping = (
};
};

// todo(milosz): test it
// todo: check https://github.com/jennypavlova/kibana/pull/6#discussion_r1771611817
export const serviceVersionMapping = (
fields: Partial<Record<string, unknown[]>>
): Pick<Transaction | Span | APMError, 'observer'> | undefined => {
Expand All @@ -744,61 +744,48 @@ export const serviceVersionMapping = (
};
};

export const metadataAppMetricMapping = (fields: Partial<Record<string, unknown[]>>) => {
// todo: missing `container` and `could` mappings
export const serviceInstanceMetadataDetailsMapping = (
fields: Partial<Record<string, unknown[]>> = {}
) => {
if (!fields) return undefined;

return {
'@timestamp': normalizeValue<string>(fields[AT_TIMESTAMP]),
agent: {
name: normalizeValue<AgentName>(fields[AGENT_NAME]),
name: normalizeValue<string>(fields[AGENT_NAME]),
version: normalizeValue<string>(fields[AGENT_VERSION]),
activation_method: normalizeValue<string>(fields[AGENT_ACTIVATION_METHOD]),
},
host: {
architecture: normalizeValue<string>(fields[HOST_ARCHITECTURE]),
hostname: normalizeValue<string>(fields[HOST_HOSTNAME]),
ip: normalizeValue<string>(fields[HOST_IP]),
name: normalizeValue<string>(fields[HOST_NAME]),
ip: normalizeValue<string>(fields[HOST_IP]),
os: {
platform: normalizeValue<string>(fields[HOST_OS_PLATFORM]),
},
},
kubernetes: {
namespace: normalizeValue<string>(fields[KUBERNETES_NAMESPACE]),
node: {
name: normalizeValue<string>(fields[KUBERNETES_NODE_NAME]),
},
pod: {
name: normalizeValue<string>(fields[KUBERNETES_POD_NAME]),
uid: normalizeValue<string>(fields[KUBERNETES_POD_UID]),
},
},
service: {
name: normalizeValue<string>(fields[SERVICE_NAME]),
environment: normalizeValue<string>(fields[SERVICE_ENVIRONMENT]),
framework: {
name: normalizeValue<string>(fields[SERVICE_FRAMEWORK_NAME]),
versions: normalizeValue<string>(fields[SERVICE_FRAMEWORK_VERSION]),
},
language: {
name: normalizeValue<string>(fields[SERVICE_LANGUAGE_NAME]),
},
node: {
name: normalizeValue<string>(fields[SERVICE_NODE_NAME]),
},
runtime: {
name: normalizeValue<string>(fields[SERVICE_RUNTIME_NAME]),
version: normalizeValue<string>(fields[SERVICE_RUNTIME_VERSION]),
},
language: {
name: normalizeValue<string>(fields[SERVICE_LANGUAGE_NAME]),
version: normalizeValue<string>(fields[SERVICE_LANGUAGE_VERSION]),
},
version: normalizeValue<string>(fields[SERVICE_VERSION]),
},
};
};

export const metadataAppTransactionEventMapping = (fields: Partial<Record<string, unknown[]>>) => {
if (!fields) return undefined;

return {
kubernetes: {
namespace: normalizeValue<string>(fields[KUBERNETES_NAMESPACE]),
node: {
Expand All @@ -809,82 +796,10 @@ export const metadataAppTransactionEventMapping = (fields: Partial<Record<string
uid: normalizeValue<string>(fields[KUBERNETES_POD_UID]),
},
},
agent: {
name: normalizeValue<AgentName>(fields[AGENT_NAME]),
version: normalizeValue<string>(fields[AGENT_VERSION]),
activation_method: normalizeValue<string>(fields[AGENT_ACTIVATION_METHOD]),
},
'@timestamp': normalizeValue<string>(fields[AT_TIMESTAMP]),
service: {
name: normalizeValue<string>(fields[SERVICE_NAME]),
environment: normalizeValue<string>(fields[SERVICE_ENVIRONMENT]),
framework: {
name: normalizeValue<string>(fields[SERVICE_FRAMEWORK_NAME]),
versions: normalizeValue<string>(fields[SERVICE_FRAMEWORK_VERSION]),
},
language: {
name: normalizeValue<string>(fields[SERVICE_LANGUAGE_NAME]),
},
node: {
name: normalizeValue<string>(fields[SERVICE_NODE_NAME]),
},
runtime: {
name: normalizeValue<string>(fields[SERVICE_RUNTIME_NAME]),
version: normalizeValue<string>(fields[SERVICE_RUNTIME_VERSION]),
},
version: normalizeValue<string>(fields[SERVICE_VERSION]),
},
host: {
architecture: normalizeValue<string>(fields[HOST_ARCHITECTURE]),
hostname: normalizeValue<string>(fields[HOST_HOSTNAME]),
ip: fields[HOST_IP] as string[] | undefined,
name: normalizeValue<string>(fields[HOST_NAME]),
os: {
platform: normalizeValue<string>(fields[HOST_OS_PLATFORM]),
},
},
};
};

export const metaDataAppTransactionMetricMapping = (fields: Partial<Record<string, unknown[]>>) => {
if (!fields) return undefined;

return {
'@timestamp': normalizeValue<string>(fields[AT_TIMESTAMP]),
agent: {
name: normalizeValue<AgentName>(fields[AGENT_NAME]),
},
host: {
hostname: normalizeValue<string>(fields[HOST_HOSTNAME]),
name: normalizeValue<string>(fields[HOST_NAME]),
os: {
platform: normalizeValue<string>(fields[HOST_OS_PLATFORM]),
},
},
kubernetes: {
pod: {
name: normalizeValue<string>(fields[KUBERNETES_POD_NAME]),
},
},
service: {
name: normalizeValue<string>(fields[SERVICE_NAME]),
environment: normalizeValue<string>(fields[SERVICE_ENVIRONMENT]),
language: {
name: normalizeValue<string>(fields[SERVICE_LANGUAGE_NAME]),
},
node: {
name: normalizeValue<string>(fields[SERVICE_NODE_NAME]),
},
runtime: {
name: normalizeValue<string>(fields[SERVICE_RUNTIME_NAME]),
version: normalizeValue<string>(fields[SERVICE_RUNTIME_VERSION]),
},
version: normalizeValue<string>(fields[SERVICE_VERSION]),
},
};
};

// todo: missing cloud and service properties
// todo: missing `cloud` and `service` properties
export const serviceAgentNameMapping = (fields: Partial<Record<string, unknown[]>>) => {
if (!fields) return undefined;

Expand Down

0 comments on commit 3f99bae

Please sign in to comment.