in apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/CloudMetadataProvider.java [140:193]
private static CloudProviderInfo tryAllCloudProviders(final CoreConfigurationImpl.CloudProvider cloudProvider, final int queryTimeoutMs)
throws InterruptedException, ExecutionException, TimeoutException {
ExecutorService executor = ExecutorUtils.createThreadDaemonPool("cloud-metadata", 2, 2);
CloudProviderInfo cloudProviderInfo = null;
Future<CloudProviderInfo> awsMetadata;
Future<CloudProviderInfo> gcpMetadata;
try {
awsMetadata = executor.submit(new Callable<CloudProviderInfo>() {
@Nullable
@Override
public CloudProviderInfo call() {
CloudProviderInfo awsInfo = null;
try {
awsInfo = getAwsMetadata(queryTimeoutMs, cloudProvider);
} catch (Exception e) {
// Expected - trial and error method
}
return awsInfo;
}
});
gcpMetadata = executor.submit(new Callable<CloudProviderInfo>() {
@Nullable
@Override
public CloudProviderInfo call() {
CloudProviderInfo gcpInfo = null;
try {
gcpInfo = getGcpMetadata(queryTimeoutMs);
} catch (Exception e) {
// Expected - trial and error method
}
return gcpInfo;
}
});
} finally {
executor.shutdown();
}
long futureTimeout = queryTimeoutMs + 200;
try {
cloudProviderInfo = getAzureMetadata(queryTimeoutMs);
} catch (Exception e) {
// Expected - trial and error method
}
if (cloudProviderInfo == null) {
cloudProviderInfo = awsMetadata.get(futureTimeout, TimeUnit.MILLISECONDS);
}
if (cloudProviderInfo == null) {
cloudProviderInfo = gcpMetadata.get(futureTimeout, TimeUnit.MILLISECONDS);
}
return cloudProviderInfo;
}