com.signalfx.metrics.aws.AWSInstanceInfo Maven / Gradle / Ivy
/**
* Copyright (C) 2015 SignalFx, Inc.
*/
package com.signalfx.metrics.aws;
import com.signalfx.shaded.apache.http.HttpResponse;
import com.signalfx.shaded.apache.http.client.HttpClient;
import com.signalfx.shaded.apache.http.client.config.RequestConfig;
import com.signalfx.shaded.apache.http.client.methods.HttpGet;
import com.signalfx.shaded.apache.http.impl.client.HttpClientBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.signalfx.shaded.fasterxml.jackson.databind.JsonNode;
import com.signalfx.shaded.fasterxml.jackson.databind.ObjectMapper;
public class AWSInstanceInfo {
public static final String DIMENSION_NAME = "AWSUniqueId";
private static final ObjectMapper MAPPER = new ObjectMapper();
private static final String URL = "http://169.254.169.254/latest/dynamic/instance-identity/document";
private static final Logger log = LoggerFactory.getLogger(AWSInstanceInfo.class);
private static final String INSTANCE_ID = "instanceId";
private static final String REGION = "region";
private static final String ACCOUNT_ID = "accountId";
/**
* Attempt to get the value for the AWSUniqueId dimension used in SignalFx AWS integrations.
*
* @param timeoutInMs
* how long to wait in milliseconds for AWS to respond
* @return null if the value was not obtained for any reason
*/
public static String get(int timeoutInMs) {
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeoutInMs).build();
HttpClient client = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig)
.build();
HttpGet request = new HttpGet(URL);
try {
HttpResponse response = client.execute(request);
JsonNode object = MAPPER.readTree(response.getEntity().getContent());
return object.get(INSTANCE_ID).asText() + "_" + object.get(REGION).asText() + "_"
+ object.get(ACCOUNT_ID).asText();
} catch (Exception e) {
log.trace("Exception trying to execute {}, Exception: {} ", request, e);
}
return null;
}
/**
* Attempt to get the value for the AWSUniqueId dimension used in SignalFx AWS integrations with
* the default timeout of 1 second
*
* @return null if the value was not obtained for any reason
*/
public static String get() {
return get(1000);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy