@opentelemetry/resource-detector-gcp 0.43.0 → 0.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -34,7 +34,7 @@ This package uses `@opentelemetry/semantic-conventions` version `1.22+`, which i
|
|
|
34
34
|
### GCP Detector
|
|
35
35
|
|
|
36
36
|
| Resource Attribute | Description |
|
|
37
|
-
|
|
37
|
+
| ----------------------- | ------------------------------------------------------------- |
|
|
38
38
|
| cloud.account.id | Value of `project-id` from GCP Metadata project |
|
|
39
39
|
| cloud.availability_zone | Value of `zone` from GCP Metadata instance |
|
|
40
40
|
| cloud.provider | The cloud provider. In this context, it's always "gcp" |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GcpDetector.js","sourceRoot":"","sources":["../../../src/detectors/GcpDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACL,mCAAmC,EACnC,wCAAwC,EACxC,kCAAkC,EAClC,uCAAuC,EACvC,0CAA0C,EAC1C,wBAAwB,EACxB,qBAAqB,EACrB,4BAA4B,EAC5B,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAGL,aAAa,EAGb,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAE7B,MAAM,eAAe,GAAG;IACtB,mBAAmB;IACnB,4BAA4B;IAC5B,iBAAiB;IACjB,qBAAqB;IACrB,cAAc;IACd,YAAY;IACZ,cAAc;IACd,mBAAmB;IACnB,qBAAqB;IACrB,cAAc;IACd,iBAAiB;IACjB,kBAAkB;CACV,CAAC;AAQX,KAAK,UAAU,MAAM;IACnB,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE;QACnC,OAAO,aAAa,EAAE,CAAC;KACxB;IAED,uFAAuF;IACvF,0FAA0F;IAC1F,IAAI,MAAM,GAAG,CAAC,KAAK,EAAE,EAAE;QACrB,OAAO,MAAM,WAAW,EAAE,CAAC;KAC5B;SAAM,IAAI,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAE;QACxC,OAAO,MAAM,sBAAsB,EAAE,CAAC;KACvC;SAAM,IAAI,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE;QAClC,OAAO,MAAM,gBAAgB,EAAE,CAAC;KACjC;SAAM,IAAI,MAAM,GAAG,CAAC,WAAW,EAAE,EAAE;QAClC,OAAO,MAAM,WAAW,EAAE,CAAC;KAC5B;SAAM,IAAI,MAAM,GAAG,CAAC,KAAK,EAAE,EAAE;QAC5B,OAAO,MAAM,WAAW,EAAE,CAAC;KAC5B;IAED,OAAO,aAAa,EAAE,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,MAAM,CAAC,YAAY,EAAE,cAAc,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/D,GAAG,CAAC,wBAAwB,EAAE;QAC9B,GAAG,CAAC,WAAW,EAAE;QACjB,GAAG,CAAC,MAAM,EAAE;KACb,CAAC,CAAC;IAEH,OAAO,MAAM,YAAY,CAAC;QACxB,CAAC,mBAAmB,CAAC,EAAE,0CAA0C;QACjE,CAAC,YAAY,CAAC,IAAI,KAAK,MAAM;YAC3B,CAAC,CAAC,4BAA4B;YAC9B,CAAC,CAAC,iBAAiB,CAAC,EAAE,YAAY,CAAC,KAAK;QAC1C,CAAC,qBAAqB,CAAC,EAAE,cAAc;QACvC,CAAC,YAAY,CAAC,EAAE,MAAM;KACvB,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC,GAC1D,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,eAAe,EAAE;KACvB,CAAC,CAAC;IAEL,OAAO,MAAM,YAAY,CAAC;QACxB,CAAC,mBAAmB,CAAC,EAAE,kCAAkC;QACzD,CAAC,cAAc,CAAC,EAAE,QAAQ;QAC1B,CAAC,iBAAiB,CAAC,EAAE,WAAW;QAChC,CAAC,kBAAkB,CAAC,EAAE,YAAY;QAClC,CAAC,iBAAiB,CAAC,EAAE,eAAe;KACrC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC,GAC1D,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,eAAe,EAAE;KACvB,CAAC,CAAC;IAEL,OAAO,MAAM,YAAY,CAAC;QACxB,CAAC,mBAAmB,CAAC,EAAE,wCAAwC;QAC/D,CAAC,cAAc,CAAC,EAAE,QAAQ;QAC1B,CAAC,iBAAiB,CAAC,EAAE,WAAW;QAChC,CAAC,kBAAkB,CAAC,EAAE,YAAY;QAClC,CAAC,iBAAiB,CAAC,EAAE,eAAe;KACrC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,IAAI,IAAI,EAAE,MAAM,CAAC;IACjB,IAAI,MAAM,GAAG,CAAC,mBAAmB,EAAE,EAAE;QACnC,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjC,GAAG,CAAC,wBAAwB,EAAE;YAC9B,GAAG,CAAC,mBAAmB,EAAE;SAC1B,CAAC,CAAC;KACJ;SAAM;QACL,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,yBAAyB,EAAE,CAAC,CAAC;KAC5D;IACD,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9D,GAAG,CAAC,WAAW,EAAE;QACjB,GAAG,CAAC,cAAc,EAAE;QACpB,GAAG,CAAC,eAAe,EAAE;KACtB,CAAC,CAAC;IAEH,OAAO,MAAM,YAAY,CAAC;QACxB,CAAC,mBAAmB,CAAC,EAAE,mCAAmC;QAC1D,CAAC,cAAc,CAAC,EAAE,QAAQ;QAC1B,CAAC,iBAAiB,CAAC,EAAE,WAAW;QAChC,CAAC,kBAAkB,CAAC,EAAE,YAAY;QAClC,CAAC,4BAA4B,CAAC,EAAE,IAAI;QACpC,CAAC,iBAAiB,CAAC,EAAE,MAAM;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,MAAM,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpE,GAAG,CAAC,yBAAyB,EAAE;QAC/B,GAAG,CAAC,QAAQ,EAAE;QACd,GAAG,CAAC,MAAM,EAAE;QACZ,GAAG,CAAC,QAAQ,EAAE;KACf,CAAC,CAAC;IAEH,OAAO,MAAM,YAAY,CAAC;QACxB,CAAC,mBAAmB,CAAC,EAAE,uCAAuC;QAC9D,CAAC,4BAA4B,CAAC,EAAE,aAAa,CAAC,IAAI;QAClD,CAAC,iBAAiB,CAAC,EAAE,aAAa,CAAC,MAAM;QACzC,CAAC,cAAc,CAAC,EAAE,QAAQ;QAC1B,CAAC,YAAY,CAAC,EAAE,MAAM;QACtB,CAAC,cAAc,CAAC,EAAE,QAAQ;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,KAA4B;IACtD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAS,YAAY,CAAC,CAAC;IAE7D,OAAO,sBAAsB,CAAC;QAC5B,CAAC,mBAAmB,CAAC,EAAE,wBAAwB;QAC/C,CAAC,qBAAqB,CAAC,EAAE,OAAO;QAChC,GAAG,KAAK;KACuB,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,WAAW;IACd,KAAK,CAAC,gBAAgB;QAC5B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CACjC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EACjC,MAAM,CACP,CAAC;QACF,OAAO,QAAQ,CAAC,UAAU,CAAC;IAC7B,CAAC;IAED,MAAM;QACJ,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,EAAgC,CAAC;QACpD,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC7B,yEAAyE;YACzE,UAAU,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,UAAU,EAAE,CAAC;IACxB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { context } from '@opentelemetry/api';\nimport { suppressTracing } from '@opentelemetry/core';\nimport {\n CLOUD_PLATFORM_VALUE_GCP_APP_ENGINE,\n CLOUD_PLATFORM_VALUE_GCP_CLOUD_FUNCTIONS,\n CLOUD_PLATFORM_VALUE_GCP_CLOUD_RUN,\n CLOUD_PLATFORM_VALUE_GCP_COMPUTE_ENGINE,\n CLOUD_PLATFORM_VALUE_GCP_KUBERNETES_ENGINE,\n CLOUD_PROVIDER_VALUE_GCP,\n ATTR_CLOUD_ACCOUNT_ID,\n ATTR_CLOUD_AVAILABILITY_ZONE,\n ATTR_CLOUD_PLATFORM,\n ATTR_CLOUD_PROVIDER,\n ATTR_CLOUD_REGION,\n ATTR_FAAS_INSTANCE,\n ATTR_FAAS_NAME,\n ATTR_FAAS_VERSION,\n ATTR_HOST_ID,\n ATTR_HOST_NAME,\n ATTR_HOST_TYPE,\n ATTR_K8S_CLUSTER_NAME,\n} from '../semconv';\n\nimport { AttributeValue, Attributes } from '@opentelemetry/api';\nimport {\n DetectedResource,\n DetectedResourceAttributes,\n emptyResource,\n Resource,\n ResourceDetector,\n resourceFromAttributes,\n} from '@opentelemetry/resources';\nimport * as metadata from 'gcp-metadata';\nimport * as faas from './faas';\nimport * as gae from './gae';\nimport * as gce from './gce';\nimport * as gke from './gke';\n\nconst ATTRIBUTE_NAMES = [\n ATTR_CLOUD_PLATFORM,\n ATTR_CLOUD_AVAILABILITY_ZONE,\n ATTR_CLOUD_REGION,\n ATTR_K8S_CLUSTER_NAME,\n ATTR_HOST_TYPE,\n ATTR_HOST_ID,\n ATTR_HOST_NAME,\n ATTR_CLOUD_PROVIDER,\n ATTR_CLOUD_ACCOUNT_ID,\n ATTR_FAAS_NAME,\n ATTR_FAAS_VERSION,\n ATTR_FAAS_INSTANCE,\n] as const;\n\n// Ensure that all resource keys are accounted for in ATTRIBUTE_NAMES\ntype GcpResourceAttributeName = (typeof ATTRIBUTE_NAMES)[number];\ntype GcpResourceAttributes = Partial<\n Record<GcpResourceAttributeName, AttributeValue>\n>;\n\nasync function detect(): Promise<Resource> {\n if (!(await metadata.isAvailable())) {\n return emptyResource();\n }\n\n // Note the order of these if checks is significant with more specific resources coming\n // first. E.g. Cloud Functions gen2 are executed in Cloud Run so it must be checked first.\n if (await gke.onGke()) {\n return await gkeResource();\n } else if (await faas.onCloudFunctions()) {\n return await cloudFunctionsResource();\n } else if (await faas.onCloudRun()) {\n return await cloudRunResource();\n } else if (await gae.onAppEngine()) {\n return await gaeResource();\n } else if (await gce.onGce()) {\n return await gceResource();\n }\n\n return emptyResource();\n}\n\nasync function gkeResource(): Promise<Resource> {\n const [zoneOrRegion, k8sClusterName, hostId] = await Promise.all([\n gke.availabilityZoneOrRegion(),\n gke.clusterName(),\n gke.hostId(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_KUBERNETES_ENGINE,\n [zoneOrRegion.type === 'zone'\n ? ATTR_CLOUD_AVAILABILITY_ZONE\n : ATTR_CLOUD_REGION]: zoneOrRegion.value,\n [ATTR_K8S_CLUSTER_NAME]: k8sClusterName,\n [ATTR_HOST_ID]: hostId,\n });\n}\n\nasync function cloudRunResource(): Promise<Resource> {\n const [faasName, faasVersion, faasInstance, faasCloudRegion] =\n await Promise.all([\n faas.faasName(),\n faas.faasVersion(),\n faas.faasInstance(),\n faas.faasCloudRegion(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_CLOUD_RUN,\n [ATTR_FAAS_NAME]: faasName,\n [ATTR_FAAS_VERSION]: faasVersion,\n [ATTR_FAAS_INSTANCE]: faasInstance,\n [ATTR_CLOUD_REGION]: faasCloudRegion,\n });\n}\n\nasync function cloudFunctionsResource(): Promise<Resource> {\n const [faasName, faasVersion, faasInstance, faasCloudRegion] =\n await Promise.all([\n faas.faasName(),\n faas.faasVersion(),\n faas.faasInstance(),\n faas.faasCloudRegion(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_CLOUD_FUNCTIONS,\n [ATTR_FAAS_NAME]: faasName,\n [ATTR_FAAS_VERSION]: faasVersion,\n [ATTR_FAAS_INSTANCE]: faasInstance,\n [ATTR_CLOUD_REGION]: faasCloudRegion,\n });\n}\n\nasync function gaeResource(): Promise<Resource> {\n let zone, region;\n if (await gae.onAppEngineStandard()) {\n [zone, region] = await Promise.all([\n gae.standardAvailabilityZone(),\n gae.standardCloudRegion(),\n ]);\n } else {\n ({ zone, region } = await gce.availabilityZoneAndRegion());\n }\n const [faasName, faasVersion, faasInstance] = await Promise.all([\n gae.serviceName(),\n gae.serviceVersion(),\n gae.serviceInstance(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_APP_ENGINE,\n [ATTR_FAAS_NAME]: faasName,\n [ATTR_FAAS_VERSION]: faasVersion,\n [ATTR_FAAS_INSTANCE]: faasInstance,\n [ATTR_CLOUD_AVAILABILITY_ZONE]: zone,\n [ATTR_CLOUD_REGION]: region,\n });\n}\n\nasync function gceResource(): Promise<Resource> {\n const [zoneAndRegion, hostType, hostId, hostName] = await Promise.all([\n gce.availabilityZoneAndRegion(),\n gce.hostType(),\n gce.hostId(),\n gce.hostName(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_COMPUTE_ENGINE,\n [ATTR_CLOUD_AVAILABILITY_ZONE]: zoneAndRegion.zone,\n [ATTR_CLOUD_REGION]: zoneAndRegion.region,\n [ATTR_HOST_TYPE]: hostType,\n [ATTR_HOST_ID]: hostId,\n [ATTR_HOST_NAME]: hostName,\n });\n}\n\nasync function makeResource(attrs: GcpResourceAttributes): Promise<Resource> {\n const project = await metadata.project<string>('project-id');\n\n return resourceFromAttributes({\n [ATTR_CLOUD_PROVIDER]: CLOUD_PROVIDER_VALUE_GCP,\n [ATTR_CLOUD_ACCOUNT_ID]: project,\n ...attrs,\n } satisfies GcpResourceAttributes);\n}\n\n/**\n * Google Cloud resource detector which populates attributes based on the environment this\n * process is running in. If not on GCP, returns an empty resource.\n */\nexport class GcpDetector implements ResourceDetector {\n private async _asyncAttributes(): Promise<Attributes> {\n const resource = await context.with(\n suppressTracing(context.active()),\n detect\n );\n return resource.attributes;\n }\n\n detect(): DetectedResource {\n const asyncAttributes = this._asyncAttributes();\n const attributes = {} as DetectedResourceAttributes;\n ATTRIBUTE_NAMES.forEach(name => {\n // Each resource attribute is determined asynchronously in _gatherData().\n attributes[name] = asyncAttributes.then(data => data[name]);\n });\n\n return { attributes };\n }\n}\n\nexport const gcpDetector = new GcpDetector();\n"]}
|
|
1
|
+
{"version":3,"file":"GcpDetector.js","sourceRoot":"","sources":["../../../src/detectors/GcpDetector.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { context } from '@opentelemetry/api';\nimport { suppressTracing } from '@opentelemetry/core';\nimport {\n CLOUD_PLATFORM_VALUE_GCP_APP_ENGINE,\n CLOUD_PLATFORM_VALUE_GCP_CLOUD_FUNCTIONS,\n CLOUD_PLATFORM_VALUE_GCP_CLOUD_RUN,\n CLOUD_PLATFORM_VALUE_GCP_COMPUTE_ENGINE,\n CLOUD_PLATFORM_VALUE_GCP_KUBERNETES_ENGINE,\n CLOUD_PROVIDER_VALUE_GCP,\n ATTR_CLOUD_ACCOUNT_ID,\n ATTR_CLOUD_AVAILABILITY_ZONE,\n ATTR_CLOUD_PLATFORM,\n ATTR_CLOUD_PROVIDER,\n ATTR_CLOUD_REGION,\n ATTR_FAAS_INSTANCE,\n ATTR_FAAS_NAME,\n ATTR_FAAS_VERSION,\n ATTR_HOST_ID,\n ATTR_HOST_NAME,\n ATTR_HOST_TYPE,\n ATTR_K8S_CLUSTER_NAME,\n} from '../semconv';\n\nimport { AttributeValue, Attributes } from '@opentelemetry/api';\nimport {\n DetectedResource,\n DetectedResourceAttributes,\n emptyResource,\n Resource,\n ResourceDetector,\n resourceFromAttributes,\n} from '@opentelemetry/resources';\nimport * as metadata from 'gcp-metadata';\nimport * as faas from './faas';\nimport * as gae from './gae';\nimport * as gce from './gce';\nimport * as gke from './gke';\n\nconst ATTRIBUTE_NAMES = [\n ATTR_CLOUD_PLATFORM,\n ATTR_CLOUD_AVAILABILITY_ZONE,\n ATTR_CLOUD_REGION,\n ATTR_K8S_CLUSTER_NAME,\n ATTR_HOST_TYPE,\n ATTR_HOST_ID,\n ATTR_HOST_NAME,\n ATTR_CLOUD_PROVIDER,\n ATTR_CLOUD_ACCOUNT_ID,\n ATTR_FAAS_NAME,\n ATTR_FAAS_VERSION,\n ATTR_FAAS_INSTANCE,\n] as const;\n\n// Ensure that all resource keys are accounted for in ATTRIBUTE_NAMES\ntype GcpResourceAttributeName = (typeof ATTRIBUTE_NAMES)[number];\ntype GcpResourceAttributes = Partial<\n Record<GcpResourceAttributeName, AttributeValue>\n>;\n\nasync function detect(): Promise<Resource> {\n if (!(await metadata.isAvailable())) {\n return emptyResource();\n }\n\n // Note the order of these if checks is significant with more specific resources coming\n // first. E.g. Cloud Functions gen2 are executed in Cloud Run so it must be checked first.\n if (await gke.onGke()) {\n return await gkeResource();\n } else if (await faas.onCloudFunctions()) {\n return await cloudFunctionsResource();\n } else if (await faas.onCloudRun()) {\n return await cloudRunResource();\n } else if (await gae.onAppEngine()) {\n return await gaeResource();\n } else if (await gce.onGce()) {\n return await gceResource();\n }\n\n return emptyResource();\n}\n\nasync function gkeResource(): Promise<Resource> {\n const [zoneOrRegion, k8sClusterName, hostId] = await Promise.all([\n gke.availabilityZoneOrRegion(),\n gke.clusterName(),\n gke.hostId(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_KUBERNETES_ENGINE,\n [zoneOrRegion.type === 'zone'\n ? ATTR_CLOUD_AVAILABILITY_ZONE\n : ATTR_CLOUD_REGION]: zoneOrRegion.value,\n [ATTR_K8S_CLUSTER_NAME]: k8sClusterName,\n [ATTR_HOST_ID]: hostId,\n });\n}\n\nasync function cloudRunResource(): Promise<Resource> {\n const [faasName, faasVersion, faasInstance, faasCloudRegion] =\n await Promise.all([\n faas.faasName(),\n faas.faasVersion(),\n faas.faasInstance(),\n faas.faasCloudRegion(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_CLOUD_RUN,\n [ATTR_FAAS_NAME]: faasName,\n [ATTR_FAAS_VERSION]: faasVersion,\n [ATTR_FAAS_INSTANCE]: faasInstance,\n [ATTR_CLOUD_REGION]: faasCloudRegion,\n });\n}\n\nasync function cloudFunctionsResource(): Promise<Resource> {\n const [faasName, faasVersion, faasInstance, faasCloudRegion] =\n await Promise.all([\n faas.faasName(),\n faas.faasVersion(),\n faas.faasInstance(),\n faas.faasCloudRegion(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_CLOUD_FUNCTIONS,\n [ATTR_FAAS_NAME]: faasName,\n [ATTR_FAAS_VERSION]: faasVersion,\n [ATTR_FAAS_INSTANCE]: faasInstance,\n [ATTR_CLOUD_REGION]: faasCloudRegion,\n });\n}\n\nasync function gaeResource(): Promise<Resource> {\n let zone, region;\n if (await gae.onAppEngineStandard()) {\n [zone, region] = await Promise.all([\n gae.standardAvailabilityZone(),\n gae.standardCloudRegion(),\n ]);\n } else {\n ({ zone, region } = await gce.availabilityZoneAndRegion());\n }\n const [faasName, faasVersion, faasInstance] = await Promise.all([\n gae.serviceName(),\n gae.serviceVersion(),\n gae.serviceInstance(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_APP_ENGINE,\n [ATTR_FAAS_NAME]: faasName,\n [ATTR_FAAS_VERSION]: faasVersion,\n [ATTR_FAAS_INSTANCE]: faasInstance,\n [ATTR_CLOUD_AVAILABILITY_ZONE]: zone,\n [ATTR_CLOUD_REGION]: region,\n });\n}\n\nasync function gceResource(): Promise<Resource> {\n const [zoneAndRegion, hostType, hostId, hostName] = await Promise.all([\n gce.availabilityZoneAndRegion(),\n gce.hostType(),\n gce.hostId(),\n gce.hostName(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_COMPUTE_ENGINE,\n [ATTR_CLOUD_AVAILABILITY_ZONE]: zoneAndRegion.zone,\n [ATTR_CLOUD_REGION]: zoneAndRegion.region,\n [ATTR_HOST_TYPE]: hostType,\n [ATTR_HOST_ID]: hostId,\n [ATTR_HOST_NAME]: hostName,\n });\n}\n\nasync function makeResource(attrs: GcpResourceAttributes): Promise<Resource> {\n const project = await metadata.project<string>('project-id');\n\n return resourceFromAttributes({\n [ATTR_CLOUD_PROVIDER]: CLOUD_PROVIDER_VALUE_GCP,\n [ATTR_CLOUD_ACCOUNT_ID]: project,\n ...attrs,\n } satisfies GcpResourceAttributes);\n}\n\n/**\n * Google Cloud resource detector which populates attributes based on the environment this\n * process is running in. If not on GCP, returns an empty resource.\n */\nexport class GcpDetector implements ResourceDetector {\n private async _asyncAttributes(): Promise<Attributes> {\n const resource = await context.with(\n suppressTracing(context.active()),\n detect\n );\n return resource.attributes;\n }\n\n public detect(): DetectedResource {\n const asyncAttributes = this._asyncAttributes();\n const attributes = {} as DetectedResourceAttributes;\n ATTRIBUTE_NAMES.forEach(name => {\n // Each resource attribute is determined asynchronously in _gatherData().\n attributes[name] = asyncAttributes.then(data => data[name]);\n });\n\n return { attributes };\n }\n}\n\nexport const gcpDetector = new GcpDetector();\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GcpDetector.js","sourceRoot":"","sources":["../../../src/detectors/GcpDetector.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { context } from '@opentelemetry/api';\nimport { suppressTracing } from '@opentelemetry/core';\nimport {\n CLOUD_PLATFORM_VALUE_GCP_APP_ENGINE,\n CLOUD_PLATFORM_VALUE_GCP_CLOUD_FUNCTIONS,\n CLOUD_PLATFORM_VALUE_GCP_CLOUD_RUN,\n CLOUD_PLATFORM_VALUE_GCP_COMPUTE_ENGINE,\n CLOUD_PLATFORM_VALUE_GCP_KUBERNETES_ENGINE,\n CLOUD_PROVIDER_VALUE_GCP,\n ATTR_CLOUD_ACCOUNT_ID,\n ATTR_CLOUD_AVAILABILITY_ZONE,\n ATTR_CLOUD_PLATFORM,\n ATTR_CLOUD_PROVIDER,\n ATTR_CLOUD_REGION,\n ATTR_FAAS_INSTANCE,\n ATTR_FAAS_NAME,\n ATTR_FAAS_VERSION,\n ATTR_HOST_ID,\n ATTR_HOST_NAME,\n ATTR_HOST_TYPE,\n ATTR_K8S_CLUSTER_NAME,\n} from '../semconv';\n\nimport { AttributeValue, Attributes } from '@opentelemetry/api';\nimport {\n DetectedResource,\n DetectedResourceAttributes,\n emptyResource,\n Resource,\n ResourceDetector,\n resourceFromAttributes,\n} from '@opentelemetry/resources';\nimport * as metadata from 'gcp-metadata';\nimport * as faas from './faas';\nimport * as gae from './gae';\nimport * as gce from './gce';\nimport * as gke from './gke';\n\nconst ATTRIBUTE_NAMES = [\n ATTR_CLOUD_PLATFORM,\n ATTR_CLOUD_AVAILABILITY_ZONE,\n ATTR_CLOUD_REGION,\n ATTR_K8S_CLUSTER_NAME,\n ATTR_HOST_TYPE,\n ATTR_HOST_ID,\n ATTR_HOST_NAME,\n ATTR_CLOUD_PROVIDER,\n ATTR_CLOUD_ACCOUNT_ID,\n ATTR_FAAS_NAME,\n ATTR_FAAS_VERSION,\n ATTR_FAAS_INSTANCE,\n] as const;\n\n// Ensure that all resource keys are accounted for in ATTRIBUTE_NAMES\ntype GcpResourceAttributeName = (typeof ATTRIBUTE_NAMES)[number];\ntype GcpResourceAttributes = Partial<\n Record<GcpResourceAttributeName, AttributeValue>\n>;\n\nasync function detect(): Promise<Resource> {\n if (!(await metadata.isAvailable())) {\n return emptyResource();\n }\n\n // Note the order of these if checks is significant with more specific resources coming\n // first. E.g. Cloud Functions gen2 are executed in Cloud Run so it must be checked first.\n if (await gke.onGke()) {\n return await gkeResource();\n } else if (await faas.onCloudFunctions()) {\n return await cloudFunctionsResource();\n } else if (await faas.onCloudRun()) {\n return await cloudRunResource();\n } else if (await gae.onAppEngine()) {\n return await gaeResource();\n } else if (await gce.onGce()) {\n return await gceResource();\n }\n\n return emptyResource();\n}\n\nasync function gkeResource(): Promise<Resource> {\n const [zoneOrRegion, k8sClusterName, hostId] = await Promise.all([\n gke.availabilityZoneOrRegion(),\n gke.clusterName(),\n gke.hostId(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_KUBERNETES_ENGINE,\n [zoneOrRegion.type === 'zone'\n ? ATTR_CLOUD_AVAILABILITY_ZONE\n : ATTR_CLOUD_REGION]: zoneOrRegion.value,\n [ATTR_K8S_CLUSTER_NAME]: k8sClusterName,\n [ATTR_HOST_ID]: hostId,\n });\n}\n\nasync function cloudRunResource(): Promise<Resource> {\n const [faasName, faasVersion, faasInstance, faasCloudRegion] =\n await Promise.all([\n faas.faasName(),\n faas.faasVersion(),\n faas.faasInstance(),\n faas.faasCloudRegion(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_CLOUD_RUN,\n [ATTR_FAAS_NAME]: faasName,\n [ATTR_FAAS_VERSION]: faasVersion,\n [ATTR_FAAS_INSTANCE]: faasInstance,\n [ATTR_CLOUD_REGION]: faasCloudRegion,\n });\n}\n\nasync function cloudFunctionsResource(): Promise<Resource> {\n const [faasName, faasVersion, faasInstance, faasCloudRegion] =\n await Promise.all([\n faas.faasName(),\n faas.faasVersion(),\n faas.faasInstance(),\n faas.faasCloudRegion(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_CLOUD_FUNCTIONS,\n [ATTR_FAAS_NAME]: faasName,\n [ATTR_FAAS_VERSION]: faasVersion,\n [ATTR_FAAS_INSTANCE]: faasInstance,\n [ATTR_CLOUD_REGION]: faasCloudRegion,\n });\n}\n\nasync function gaeResource(): Promise<Resource> {\n let zone, region;\n if (await gae.onAppEngineStandard()) {\n [zone, region] = await Promise.all([\n gae.standardAvailabilityZone(),\n gae.standardCloudRegion(),\n ]);\n } else {\n ({ zone, region } = await gce.availabilityZoneAndRegion());\n }\n const [faasName, faasVersion, faasInstance] = await Promise.all([\n gae.serviceName(),\n gae.serviceVersion(),\n gae.serviceInstance(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_APP_ENGINE,\n [ATTR_FAAS_NAME]: faasName,\n [ATTR_FAAS_VERSION]: faasVersion,\n [ATTR_FAAS_INSTANCE]: faasInstance,\n [ATTR_CLOUD_AVAILABILITY_ZONE]: zone,\n [ATTR_CLOUD_REGION]: region,\n });\n}\n\nasync function gceResource(): Promise<Resource> {\n const [zoneAndRegion, hostType, hostId, hostName] = await Promise.all([\n gce.availabilityZoneAndRegion(),\n gce.hostType(),\n gce.hostId(),\n gce.hostName(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_COMPUTE_ENGINE,\n [ATTR_CLOUD_AVAILABILITY_ZONE]: zoneAndRegion.zone,\n [ATTR_CLOUD_REGION]: zoneAndRegion.region,\n [ATTR_HOST_TYPE]: hostType,\n [ATTR_HOST_ID]: hostId,\n [ATTR_HOST_NAME]: hostName,\n });\n}\n\nasync function makeResource(attrs: GcpResourceAttributes): Promise<Resource> {\n const project = await metadata.project<string>('project-id');\n\n return resourceFromAttributes({\n [ATTR_CLOUD_PROVIDER]: CLOUD_PROVIDER_VALUE_GCP,\n [ATTR_CLOUD_ACCOUNT_ID]: project,\n ...attrs,\n } satisfies GcpResourceAttributes);\n}\n\n/**\n * Google Cloud resource detector which populates attributes based on the environment this\n * process is running in. If not on GCP, returns an empty resource.\n */\nexport class GcpDetector implements ResourceDetector {\n private async _asyncAttributes(): Promise<Attributes> {\n const resource = await context.with(\n suppressTracing(context.active()),\n detect\n );\n return resource.attributes;\n }\n\n detect(): DetectedResource {\n const asyncAttributes = this._asyncAttributes();\n const attributes = {} as DetectedResourceAttributes;\n ATTRIBUTE_NAMES.forEach(name => {\n // Each resource attribute is determined asynchronously in _gatherData().\n attributes[name] = asyncAttributes.then(data => data[name]);\n });\n\n return { attributes };\n }\n}\n\nexport const gcpDetector = new GcpDetector();\n"]}
|
|
1
|
+
{"version":3,"file":"GcpDetector.js","sourceRoot":"","sources":["../../../src/detectors/GcpDetector.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,4CAA6C;AAC7C,8CAAsD;AACtD,wCAmBoB;AAGpB,wDAOkC;AAClC,yCAAyC;AACzC,+BAA+B;AAC/B,6BAA6B;AAC7B,6BAA6B;AAC7B,6BAA6B;AAE7B,MAAM,eAAe,GAAG;IACtB,6BAAmB;IACnB,sCAA4B;IAC5B,2BAAiB;IACjB,+BAAqB;IACrB,wBAAc;IACd,sBAAY;IACZ,wBAAc;IACd,6BAAmB;IACnB,+BAAqB;IACrB,wBAAc;IACd,2BAAiB;IACjB,4BAAkB;CACV,CAAC;AAQX,KAAK,UAAU,MAAM;IACnB,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE;QACnC,OAAO,IAAA,yBAAa,GAAE,CAAC;KACxB;IAED,uFAAuF;IACvF,0FAA0F;IAC1F,IAAI,MAAM,GAAG,CAAC,KAAK,EAAE,EAAE;QACrB,OAAO,MAAM,WAAW,EAAE,CAAC;KAC5B;SAAM,IAAI,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAE;QACxC,OAAO,MAAM,sBAAsB,EAAE,CAAC;KACvC;SAAM,IAAI,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE;QAClC,OAAO,MAAM,gBAAgB,EAAE,CAAC;KACjC;SAAM,IAAI,MAAM,GAAG,CAAC,WAAW,EAAE,EAAE;QAClC,OAAO,MAAM,WAAW,EAAE,CAAC;KAC5B;SAAM,IAAI,MAAM,GAAG,CAAC,KAAK,EAAE,EAAE;QAC5B,OAAO,MAAM,WAAW,EAAE,CAAC;KAC5B;IAED,OAAO,IAAA,yBAAa,GAAE,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,MAAM,CAAC,YAAY,EAAE,cAAc,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/D,GAAG,CAAC,wBAAwB,EAAE;QAC9B,GAAG,CAAC,WAAW,EAAE;QACjB,GAAG,CAAC,MAAM,EAAE;KACb,CAAC,CAAC;IAEH,OAAO,MAAM,YAAY,CAAC;QACxB,CAAC,6BAAmB,CAAC,EAAE,oDAA0C;QACjE,CAAC,YAAY,CAAC,IAAI,KAAK,MAAM;YAC3B,CAAC,CAAC,sCAA4B;YAC9B,CAAC,CAAC,2BAAiB,CAAC,EAAE,YAAY,CAAC,KAAK;QAC1C,CAAC,+BAAqB,CAAC,EAAE,cAAc;QACvC,CAAC,sBAAY,CAAC,EAAE,MAAM;KACvB,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC,GAC1D,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,eAAe,EAAE;KACvB,CAAC,CAAC;IAEL,OAAO,MAAM,YAAY,CAAC;QACxB,CAAC,6BAAmB,CAAC,EAAE,4CAAkC;QACzD,CAAC,wBAAc,CAAC,EAAE,QAAQ;QAC1B,CAAC,2BAAiB,CAAC,EAAE,WAAW;QAChC,CAAC,4BAAkB,CAAC,EAAE,YAAY;QAClC,CAAC,2BAAiB,CAAC,EAAE,eAAe;KACrC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC,GAC1D,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,eAAe,EAAE;KACvB,CAAC,CAAC;IAEL,OAAO,MAAM,YAAY,CAAC;QACxB,CAAC,6BAAmB,CAAC,EAAE,kDAAwC;QAC/D,CAAC,wBAAc,CAAC,EAAE,QAAQ;QAC1B,CAAC,2BAAiB,CAAC,EAAE,WAAW;QAChC,CAAC,4BAAkB,CAAC,EAAE,YAAY;QAClC,CAAC,2BAAiB,CAAC,EAAE,eAAe;KACrC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,IAAI,IAAI,EAAE,MAAM,CAAC;IACjB,IAAI,MAAM,GAAG,CAAC,mBAAmB,EAAE,EAAE;QACnC,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjC,GAAG,CAAC,wBAAwB,EAAE;YAC9B,GAAG,CAAC,mBAAmB,EAAE;SAC1B,CAAC,CAAC;KACJ;SAAM;QACL,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,yBAAyB,EAAE,CAAC,CAAC;KAC5D;IACD,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9D,GAAG,CAAC,WAAW,EAAE;QACjB,GAAG,CAAC,cAAc,EAAE;QACpB,GAAG,CAAC,eAAe,EAAE;KACtB,CAAC,CAAC;IAEH,OAAO,MAAM,YAAY,CAAC;QACxB,CAAC,6BAAmB,CAAC,EAAE,6CAAmC;QAC1D,CAAC,wBAAc,CAAC,EAAE,QAAQ;QAC1B,CAAC,2BAAiB,CAAC,EAAE,WAAW;QAChC,CAAC,4BAAkB,CAAC,EAAE,YAAY;QAClC,CAAC,sCAA4B,CAAC,EAAE,IAAI;QACpC,CAAC,2BAAiB,CAAC,EAAE,MAAM;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,MAAM,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpE,GAAG,CAAC,yBAAyB,EAAE;QAC/B,GAAG,CAAC,QAAQ,EAAE;QACd,GAAG,CAAC,MAAM,EAAE;QACZ,GAAG,CAAC,QAAQ,EAAE;KACf,CAAC,CAAC;IAEH,OAAO,MAAM,YAAY,CAAC;QACxB,CAAC,6BAAmB,CAAC,EAAE,iDAAuC;QAC9D,CAAC,sCAA4B,CAAC,EAAE,aAAa,CAAC,IAAI;QAClD,CAAC,2BAAiB,CAAC,EAAE,aAAa,CAAC,MAAM;QACzC,CAAC,wBAAc,CAAC,EAAE,QAAQ;QAC1B,CAAC,sBAAY,CAAC,EAAE,MAAM;QACtB,CAAC,wBAAc,CAAC,EAAE,QAAQ;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,KAA4B;IACtD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAS,YAAY,CAAC,CAAC;IAE7D,OAAO,IAAA,kCAAsB,EAAC;QAC5B,CAAC,6BAAmB,CAAC,EAAE,kCAAwB;QAC/C,CAAC,+BAAqB,CAAC,EAAE,OAAO;QAChC,GAAG,KAAK;KACuB,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAa,WAAW;IACd,KAAK,CAAC,gBAAgB;QAC5B,MAAM,QAAQ,GAAG,MAAM,aAAO,CAAC,IAAI,CACjC,IAAA,sBAAe,EAAC,aAAO,CAAC,MAAM,EAAE,CAAC,EACjC,MAAM,CACP,CAAC;QACF,OAAO,QAAQ,CAAC,UAAU,CAAC;IAC7B,CAAC;IAEM,MAAM;QACX,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,EAAgC,CAAC;QACpD,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC7B,yEAAyE;YACzE,UAAU,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,UAAU,EAAE,CAAC;IACxB,CAAC;CACF;AAnBD,kCAmBC;AAEY,QAAA,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { context } from '@opentelemetry/api';\nimport { suppressTracing } from '@opentelemetry/core';\nimport {\n CLOUD_PLATFORM_VALUE_GCP_APP_ENGINE,\n CLOUD_PLATFORM_VALUE_GCP_CLOUD_FUNCTIONS,\n CLOUD_PLATFORM_VALUE_GCP_CLOUD_RUN,\n CLOUD_PLATFORM_VALUE_GCP_COMPUTE_ENGINE,\n CLOUD_PLATFORM_VALUE_GCP_KUBERNETES_ENGINE,\n CLOUD_PROVIDER_VALUE_GCP,\n ATTR_CLOUD_ACCOUNT_ID,\n ATTR_CLOUD_AVAILABILITY_ZONE,\n ATTR_CLOUD_PLATFORM,\n ATTR_CLOUD_PROVIDER,\n ATTR_CLOUD_REGION,\n ATTR_FAAS_INSTANCE,\n ATTR_FAAS_NAME,\n ATTR_FAAS_VERSION,\n ATTR_HOST_ID,\n ATTR_HOST_NAME,\n ATTR_HOST_TYPE,\n ATTR_K8S_CLUSTER_NAME,\n} from '../semconv';\n\nimport { AttributeValue, Attributes } from '@opentelemetry/api';\nimport {\n DetectedResource,\n DetectedResourceAttributes,\n emptyResource,\n Resource,\n ResourceDetector,\n resourceFromAttributes,\n} from '@opentelemetry/resources';\nimport * as metadata from 'gcp-metadata';\nimport * as faas from './faas';\nimport * as gae from './gae';\nimport * as gce from './gce';\nimport * as gke from './gke';\n\nconst ATTRIBUTE_NAMES = [\n ATTR_CLOUD_PLATFORM,\n ATTR_CLOUD_AVAILABILITY_ZONE,\n ATTR_CLOUD_REGION,\n ATTR_K8S_CLUSTER_NAME,\n ATTR_HOST_TYPE,\n ATTR_HOST_ID,\n ATTR_HOST_NAME,\n ATTR_CLOUD_PROVIDER,\n ATTR_CLOUD_ACCOUNT_ID,\n ATTR_FAAS_NAME,\n ATTR_FAAS_VERSION,\n ATTR_FAAS_INSTANCE,\n] as const;\n\n// Ensure that all resource keys are accounted for in ATTRIBUTE_NAMES\ntype GcpResourceAttributeName = (typeof ATTRIBUTE_NAMES)[number];\ntype GcpResourceAttributes = Partial<\n Record<GcpResourceAttributeName, AttributeValue>\n>;\n\nasync function detect(): Promise<Resource> {\n if (!(await metadata.isAvailable())) {\n return emptyResource();\n }\n\n // Note the order of these if checks is significant with more specific resources coming\n // first. E.g. Cloud Functions gen2 are executed in Cloud Run so it must be checked first.\n if (await gke.onGke()) {\n return await gkeResource();\n } else if (await faas.onCloudFunctions()) {\n return await cloudFunctionsResource();\n } else if (await faas.onCloudRun()) {\n return await cloudRunResource();\n } else if (await gae.onAppEngine()) {\n return await gaeResource();\n } else if (await gce.onGce()) {\n return await gceResource();\n }\n\n return emptyResource();\n}\n\nasync function gkeResource(): Promise<Resource> {\n const [zoneOrRegion, k8sClusterName, hostId] = await Promise.all([\n gke.availabilityZoneOrRegion(),\n gke.clusterName(),\n gke.hostId(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_KUBERNETES_ENGINE,\n [zoneOrRegion.type === 'zone'\n ? ATTR_CLOUD_AVAILABILITY_ZONE\n : ATTR_CLOUD_REGION]: zoneOrRegion.value,\n [ATTR_K8S_CLUSTER_NAME]: k8sClusterName,\n [ATTR_HOST_ID]: hostId,\n });\n}\n\nasync function cloudRunResource(): Promise<Resource> {\n const [faasName, faasVersion, faasInstance, faasCloudRegion] =\n await Promise.all([\n faas.faasName(),\n faas.faasVersion(),\n faas.faasInstance(),\n faas.faasCloudRegion(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_CLOUD_RUN,\n [ATTR_FAAS_NAME]: faasName,\n [ATTR_FAAS_VERSION]: faasVersion,\n [ATTR_FAAS_INSTANCE]: faasInstance,\n [ATTR_CLOUD_REGION]: faasCloudRegion,\n });\n}\n\nasync function cloudFunctionsResource(): Promise<Resource> {\n const [faasName, faasVersion, faasInstance, faasCloudRegion] =\n await Promise.all([\n faas.faasName(),\n faas.faasVersion(),\n faas.faasInstance(),\n faas.faasCloudRegion(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_CLOUD_FUNCTIONS,\n [ATTR_FAAS_NAME]: faasName,\n [ATTR_FAAS_VERSION]: faasVersion,\n [ATTR_FAAS_INSTANCE]: faasInstance,\n [ATTR_CLOUD_REGION]: faasCloudRegion,\n });\n}\n\nasync function gaeResource(): Promise<Resource> {\n let zone, region;\n if (await gae.onAppEngineStandard()) {\n [zone, region] = await Promise.all([\n gae.standardAvailabilityZone(),\n gae.standardCloudRegion(),\n ]);\n } else {\n ({ zone, region } = await gce.availabilityZoneAndRegion());\n }\n const [faasName, faasVersion, faasInstance] = await Promise.all([\n gae.serviceName(),\n gae.serviceVersion(),\n gae.serviceInstance(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_APP_ENGINE,\n [ATTR_FAAS_NAME]: faasName,\n [ATTR_FAAS_VERSION]: faasVersion,\n [ATTR_FAAS_INSTANCE]: faasInstance,\n [ATTR_CLOUD_AVAILABILITY_ZONE]: zone,\n [ATTR_CLOUD_REGION]: region,\n });\n}\n\nasync function gceResource(): Promise<Resource> {\n const [zoneAndRegion, hostType, hostId, hostName] = await Promise.all([\n gce.availabilityZoneAndRegion(),\n gce.hostType(),\n gce.hostId(),\n gce.hostName(),\n ]);\n\n return await makeResource({\n [ATTR_CLOUD_PLATFORM]: CLOUD_PLATFORM_VALUE_GCP_COMPUTE_ENGINE,\n [ATTR_CLOUD_AVAILABILITY_ZONE]: zoneAndRegion.zone,\n [ATTR_CLOUD_REGION]: zoneAndRegion.region,\n [ATTR_HOST_TYPE]: hostType,\n [ATTR_HOST_ID]: hostId,\n [ATTR_HOST_NAME]: hostName,\n });\n}\n\nasync function makeResource(attrs: GcpResourceAttributes): Promise<Resource> {\n const project = await metadata.project<string>('project-id');\n\n return resourceFromAttributes({\n [ATTR_CLOUD_PROVIDER]: CLOUD_PROVIDER_VALUE_GCP,\n [ATTR_CLOUD_ACCOUNT_ID]: project,\n ...attrs,\n } satisfies GcpResourceAttributes);\n}\n\n/**\n * Google Cloud resource detector which populates attributes based on the environment this\n * process is running in. If not on GCP, returns an empty resource.\n */\nexport class GcpDetector implements ResourceDetector {\n private async _asyncAttributes(): Promise<Attributes> {\n const resource = await context.with(\n suppressTracing(context.active()),\n detect\n );\n return resource.attributes;\n }\n\n public detect(): DetectedResource {\n const asyncAttributes = this._asyncAttributes();\n const attributes = {} as DetectedResourceAttributes;\n ATTRIBUTE_NAMES.forEach(name => {\n // Each resource attribute is determined asynchronously in _gatherData().\n attributes[name] = asyncAttributes.then(data => data[name]);\n });\n\n return { attributes };\n }\n}\n\nexport const gcpDetector = new GcpDetector();\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opentelemetry/resource-detector-gcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.44.0",
|
|
4
4
|
"description": "OpenTelemetry SDK resource detector for GCP",
|
|
5
5
|
"main": "build/src/index.js",
|
|
6
6
|
"module": "build/esm/index.js",
|
|
@@ -44,17 +44,10 @@
|
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@opentelemetry/api": "^1.0.0",
|
|
47
|
-
"@opentelemetry/contrib-test-utils": "^0.
|
|
47
|
+
"@opentelemetry/contrib-test-utils": "^0.56.0",
|
|
48
48
|
"@opentelemetry/instrumentation-http": "^0.208.0",
|
|
49
49
|
"@opentelemetry/sdk-trace-base": "^2.0.0",
|
|
50
|
-
"
|
|
51
|
-
"@types/node": "18.18.14",
|
|
52
|
-
"@types/semver": "7.5.8",
|
|
53
|
-
"@types/sinon": "17.0.4",
|
|
54
|
-
"bignumber.js": "9.3.1",
|
|
55
|
-
"nyc": "17.1.0",
|
|
56
|
-
"sinon": "15.2.0",
|
|
57
|
-
"typescript": "5.0.4"
|
|
50
|
+
"bignumber.js": "9.3.1"
|
|
58
51
|
},
|
|
59
52
|
"peerDependencies": {
|
|
60
53
|
"@opentelemetry/api": "^1.0.0"
|
|
@@ -66,5 +59,5 @@
|
|
|
66
59
|
},
|
|
67
60
|
"homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/resource-detector-gcp#readme",
|
|
68
61
|
"sideEffects": false,
|
|
69
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "66935ac724cc271f70028035e534d47a4dfbcf12"
|
|
70
63
|
}
|