public Resource Detect()

in src/OpenTelemetryEngine/Resources/FunctionsResourceDetector.cs [13:64]


        public Resource Detect()
        {
            List<KeyValuePair<string, object>> attributeList = new(9);
            try
            {
                string? serviceName = Environment.GetEnvironmentVariable(ResourceAttributeConstants.SiteNameEnvVar);
                // Todo: This is probably wrong, but we don't have access to types from the worker in this context
                // We may have to pass the worker's assembly version manually in setup, will figure this out later
                string? version = typeof(FunctionsResourceDetector).Assembly.GetName()?.Version?.ToString();

                if (!string.IsNullOrEmpty(version)) 
                {
                    attributeList.Add(new KeyValuePair<string, object>(ResourceAttributeConstants.ServiceVersion, version));                    
                }

                attributeList.Add(new KeyValuePair<string, object>(ResourceAttributeConstants.AISDKPrefix, $@"{ResourceAttributeConstants.SDKPrefix}:{version}"));
                attributeList.Add(new KeyValuePair<string, object>(ResourceAttributeConstants.ProcessId, Process.GetCurrentProcess().Id));

                // Add these attributes only if running in Azure.
                if (!string.IsNullOrEmpty(serviceName))
                {
                    attributeList.Add(new KeyValuePair<string, object>(ResourceAttributeConstants.ServiceName, serviceName));
                    attributeList.Add(new KeyValuePair<string, object>(ResourceAttributeConstants.CloudProvider, ResourceAttributeConstants.AzureCloudProviderValue));
                    attributeList.Add(new KeyValuePair<string, object>(ResourceAttributeConstants.CloudPlatform, ResourceAttributeConstants.AzurePlatformValue));

                    if (!string.IsNullOrEmpty(version))
                    {
                        attributeList.Add(new KeyValuePair<string, object>(ResourceAttributeConstants.FaaSVersion, version));
                    }

                    string? region = Environment.GetEnvironmentVariable(ResourceAttributeConstants.RegionNameEnvVar);
                    if (!string.IsNullOrEmpty(region))
                    {
                        attributeList.Add(new KeyValuePair<string, object>(ResourceAttributeConstants.CloudRegion, region));
                    }

                    var azureResourceUri = GetAzureResourceURI(serviceName);
                    if (azureResourceUri != null)
                    {
                        attributeList.Add(new KeyValuePair<string, object>(ResourceAttributeConstants.CloudResourceId, azureResourceUri));
                    }
                }
            }
            catch (Exception e)
            {
                // return empty resource.
                Console.WriteLine(WorkerConstants.SystemLogPrefix + " ERROR: Error detecting resource attributes: {e}");
                return Resource.Empty;
            }

            return new Resource(attributeList);
        }