function metadataFromConf()

in lib/apm-client/http-apm-client/index.js [1685:1777]


function metadataFromConf(opts, client) {
  var payload = {
    service: {
      name: opts.serviceName,
      environment: opts.environment,
      runtime: {
        name: process.release.name,
        version: process.versions.node,
      },
      language: {
        name: 'javascript',
      },
      agent: {
        name: opts.agentName,
        version: opts.agentVersion,
      },
      framework: undefined,
      version: undefined,
      node: undefined,
    },
    process: {
      pid: process.pid,
      ppid: process.ppid,
      title: process.title,
      argv: process.argv,
    },
    system: {
      architecture: process.arch,
      platform: process.platform,
      container: undefined,
      kubernetes: undefined,
    },
    labels: opts.globalLabels,
  };

  // On `system.*hostname` fields:
  // - `hostname` was deprecated in APM server v7.4, replaced by the next two.
  // - Around Elastic v8.9, ECS changed `host.name` to prefer the FQDN,
  //   hence APM agents now prefer FQDN for `detected_hostname`.
  if (client.supportsConfiguredAndDetectedHostname()) {
    payload.system.detected_hostname = opts.detectedHostname;
    if (opts.configuredHostname) {
      payload.system.configured_hostname = opts.configuredHostname;
    }
  } else {
    payload.system.hostname = opts.configuredHostname || opts.detectedHostname;
  }

  if (opts.agentActivationMethod && client.supportsActivationMethodField()) {
    payload.service.agent.activation_method = opts.agentActivationMethod;
  }

  if (opts.serviceNodeName) {
    payload.service.node = {
      configured_name: opts.serviceNodeName,
    };
  }

  if (opts.serviceVersion) payload.service.version = opts.serviceVersion;

  if (opts.frameworkName || opts.frameworkVersion) {
    payload.service.framework = {
      name: opts.frameworkName,
      version: opts.frameworkVersion,
    };
  }

  if (opts.containerId) {
    payload.system.container = {
      id: opts.containerId,
    };
  }

  if (
    opts.kubernetesNodeName ||
    opts.kubernetesNamespace ||
    opts.kubernetesPodName ||
    opts.kubernetesPodUID
  ) {
    payload.system.kubernetes = {
      namespace: opts.kubernetesNamespace,
      node: opts.kubernetesNodeName
        ? { name: opts.kubernetesNodeName }
        : undefined,
      pod:
        opts.kubernetesPodName || opts.kubernetesPodUID
          ? { name: opts.kubernetesPodName, uid: opts.kubernetesPodUID }
          : undefined,
    };
  }

  return payload;
}