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);
}