{"version":3,"file":"AwsBeanstalkDetector.js","sourceRoot":"","sources":["../../../src/detectors/AwsBeanstalkDetector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAOtD,OAAO,EACL,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,0CAA0C,GAC3C,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B;;;;;;;GAOG;AAEH,MAAM,2BAA2B,GAC/B,6CAA6C,CAAC;AAChD,MAAM,0BAA0B,GAC9B,mDAAmD,CAAC;AAEtD,MAAa,oBAAoB;IACxB,mBAAmB,CAAS;IAC3B,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAE3D;QACE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;YAChC,IAAI,CAAC,mBAAmB,GAAG,0BAA0B,CAAC;SACvD;aAAM;YACL,IAAI,CAAC,mBAAmB,GAAG,2BAA2B,CAAC;SACxD;IACH,CAAC;IAEM,MAAM;QACX,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CACvE,IAAI,CAAC,WAAW,EAAE,CACnB,CAAC;QAEF,MAAM,SAAS,GAAG;YAChB,mBAAmB;YACnB,mBAAmB;YACnB,iBAAiB;YACjB,sBAAsB;YACtB,oBAAoB;YACpB,wBAAwB;SACzB,CAAC;QAEF,MAAM,UAAU,GAAG,EAAgC,CAAC;QACpD,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,yEAAyE;YACzE,UAAU,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,UAAU,EAAE,CAAC;IACxB,CAAC;IACD;;OAEG;IACK,KAAK,CAAC,WAAW;QACvB,IAAI;YACF,MAAM,oBAAoB,CAAC,eAAe,CACxC,IAAI,CAAC,mBAAmB,EACxB,EAAE,CAAC,SAAS,CAAC,IAAI,CAClB,CAAC;YAEF,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,aAAa,CACtD,IAAI,CAAC,mBAAmB,EACxB,MAAM,CACP,CAAC;YACF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEvC,OAAO;gBACL,CAAC,mBAAmB,CAAC,EAAE,wBAAwB;gBAC/C,CAAC,mBAAmB,CAAC,EAAE,0CAA0C;gBACjE,CAAC,iBAAiB,CAAC,EAAE,0CAA0C;gBAC/D,CAAC,sBAAsB,CAAC,EAAE,UAAU,CAAC,gBAAgB;gBACrD,CAAC,oBAAoB,CAAC,EAAE,UAAU,CAAC,aAAa;gBAChD,CAAC,wBAAwB,CAAC,EAAE,UAAU,CAAC,aAAa;aACrD,CAAC;SACH;QAAC,OAAO,CAAM,EAAE;YACf,IAAI,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1E,OAAO,EAAE,CAAC;SACX;IACH,CAAC;;SA/DU,oBAAoB;AAkEjC,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,EAAE,CAAC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { context, diag } from '@opentelemetry/api';\nimport { suppressTracing } from '@opentelemetry/core';\n\nimport {\n  ResourceDetector,\n  DetectedResource,\n  DetectedResourceAttributes,\n} from '@opentelemetry/resources';\nimport {\n  ATTR_SERVICE_NAME,\n  ATTR_SERVICE_VERSION,\n} from '@opentelemetry/semantic-conventions';\nimport {\n  ATTR_CLOUD_PROVIDER,\n  ATTR_CLOUD_PLATFORM,\n  ATTR_SERVICE_NAMESPACE,\n  ATTR_SERVICE_INSTANCE_ID,\n  CLOUD_PROVIDER_VALUE_AWS,\n  CLOUD_PLATFORM_VALUE_AWS_ELASTIC_BEANSTALK,\n} from '../semconv';\nimport * as fs from 'fs';\nimport * as util from 'util';\n\n/**\n * The AwsBeanstalkDetector can be used to detect if a process is running in AWS Elastic\n * Beanstalk and return a {@link Resource} populated with data about the beanstalk\n * plugins of AWS X-Ray. Returns an empty Resource if detection fails.\n *\n * See https://docs.amazonaws.cn/en_us/xray/latest/devguide/xray-guide.pdf\n * for more details about detecting information of Elastic Beanstalk plugins\n */\n\nconst DEFAULT_BEANSTALK_CONF_PATH =\n  '/var/elasticbeanstalk/xray/environment.conf';\nconst WIN_OS_BEANSTALK_CONF_PATH =\n  'C:\\\\Program Files\\\\Amazon\\\\XRay\\\\environment.conf';\n\nexport class AwsBeanstalkDetector implements ResourceDetector {\n  public BEANSTALK_CONF_PATH: string;\n  private static readFileAsync = util.promisify(fs.readFile);\n  private static fileAccessAsync = util.promisify(fs.access);\n\n  constructor() {\n    if (process.platform === 'win32') {\n      this.BEANSTALK_CONF_PATH = WIN_OS_BEANSTALK_CONF_PATH;\n    } else {\n      this.BEANSTALK_CONF_PATH = DEFAULT_BEANSTALK_CONF_PATH;\n    }\n  }\n\n  public detect(): DetectedResource {\n    const dataPromise = context.with(suppressTracing(context.active()), () =>\n      this._gatherData()\n    );\n\n    const attrNames = [\n      ATTR_CLOUD_PROVIDER,\n      ATTR_CLOUD_PLATFORM,\n      ATTR_SERVICE_NAME,\n      ATTR_SERVICE_NAMESPACE,\n      ATTR_SERVICE_VERSION,\n      ATTR_SERVICE_INSTANCE_ID,\n    ];\n\n    const attributes = {} as DetectedResourceAttributes;\n    attrNames.forEach(name => {\n      // Each resource attribute is determined asynchronously in _gatherData().\n      attributes[name] = dataPromise.then(data => data[name]);\n    });\n\n    return { attributes };\n  }\n  /**\n   * Async resource attributes for AWS Beanstalk configuration read from file.\n   */\n  private async _gatherData(): Promise<DetectedResourceAttributes> {\n    try {\n      await AwsBeanstalkDetector.fileAccessAsync(\n        this.BEANSTALK_CONF_PATH,\n        fs.constants.R_OK\n      );\n\n      const rawData = await AwsBeanstalkDetector.readFileAsync(\n        this.BEANSTALK_CONF_PATH,\n        'utf8'\n      );\n      const parsedData = JSON.parse(rawData);\n\n      return {\n        [ATTR_CLOUD_PROVIDER]: CLOUD_PROVIDER_VALUE_AWS,\n        [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_AWS_ELASTIC_BEANSTALK,\n        [ATTR_SERVICE_NAME]: CLOUD_PLATFORM_VALUE_AWS_ELASTIC_BEANSTALK,\n        [ATTR_SERVICE_NAMESPACE]: parsedData.environment_name,\n        [ATTR_SERVICE_VERSION]: parsedData.version_label,\n        [ATTR_SERVICE_INSTANCE_ID]: parsedData.deployment_id,\n      };\n    } catch (e: any) {\n      diag.debug(`AwsBeanstalkDetector: did not detect resource: ${e.message}`);\n      return {};\n    }\n  }\n}\n\nexport const awsBeanstalkDetector = new AwsBeanstalkDetector();\n"]}