detect()

in packages/opentelemetry-node/lib/detector-gcp.js [30:83]


    detect() {
        const metadataPromise = context.with(
            suppressTracing(context.active()),
            async () => {
                const available = await isAvailable();
                if (!available) {
                    return undefined;
                }
                return {
                    projectId: metadataQuery('project/project-id'),
                    instanceId: metadataQuery('instance/id').then((id) =>
                        id.toString()
                    ),
                    zoneId: metadataQuery('instance/zone'),
                    clusterName: metadataQuery(
                        'instance/attributes/cluster-name'
                    ),
                    hostname: metadataQuery('instance/hostname'),
                };
            }
        );

        const attributes = {
            [SEMRESATTRS_CLOUD_PROVIDER]: metadataPromise.then(
                (md) => md && CLOUDPROVIDERVALUES_GCP
            ),
            [SEMRESATTRS_CLOUD_ACCOUNT_ID]: metadataPromise.then(
                (md) => md?.projectId
            ),
            [SEMRESATTRS_HOST_ID]: metadataPromise.then((md) => md?.instanceId),
            [SEMRESATTRS_HOST_NAME]: metadataPromise.then((md) => md?.hostname),
            [SEMRESATTRS_CLOUD_AVAILABILITY_ZONE]: metadataPromise.then(
                (md) => md?.zoneId
            ),
        };

        // Add resource attributes for K8s.
        // ref: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/detectors/node/opentelemetry-resource-detector-gcp/src/detectors/GcpDetector.ts#L69-L80
        if (process.env.KUBERNETES_SERVICE_HOST) {
            attributes[SEMRESATTRS_K8S_CLUSTER_NAME] = metadataPromise.then(
                (md) => md?.clusterName
            );
            attributes[SEMRESATTRS_K8S_NAMESPACE_NAME] = metadataPromise.then(
                (md) => md && process.env.NAMESPACE
            );
            attributes[SEMRESATTRS_K8S_POD_NAME] = metadataPromise.then(
                (md) => md && process.env.HOSTNAME
            );
            attributes[SEMRESATTRS_CONTAINER_NAME] = metadataPromise.then(
                (md) => md && process.env.CONTAINER_NAME
            );
        }
        return {attributes};
    },