Track metrics for dynamic config load failures
This commit is contained in:
parent
7fc63f7847
commit
de5d967d18
|
@ -15,6 +15,7 @@ import java.util.concurrent.atomic.AtomicReference;
|
||||||
import javax.validation.ConstraintViolation;
|
import javax.validation.ConstraintViolation;
|
||||||
import javax.validation.Validation;
|
import javax.validation.Validation;
|
||||||
import javax.validation.Validator;
|
import javax.validation.Validator;
|
||||||
|
import io.micrometer.core.instrument.Metrics;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -24,6 +25,8 @@ import software.amazon.awssdk.services.appconfig.AppConfigClient;
|
||||||
import software.amazon.awssdk.services.appconfig.model.GetConfigurationRequest;
|
import software.amazon.awssdk.services.appconfig.model.GetConfigurationRequest;
|
||||||
import software.amazon.awssdk.services.appconfig.model.GetConfigurationResponse;
|
import software.amazon.awssdk.services.appconfig.model.GetConfigurationResponse;
|
||||||
|
|
||||||
|
import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name;
|
||||||
|
|
||||||
public class DynamicConfigurationManager<T> {
|
public class DynamicConfigurationManager<T> {
|
||||||
|
|
||||||
private final String application;
|
private final String application;
|
||||||
|
@ -46,6 +49,10 @@ public class DynamicConfigurationManager<T> {
|
||||||
|
|
||||||
private static final Validator VALIDATOR = Validation.buildDefaultValidatorFactory().getValidator();
|
private static final Validator VALIDATOR = Validation.buildDefaultValidatorFactory().getValidator();
|
||||||
|
|
||||||
|
private static final String ERROR_COUNTER_NAME = name(DynamicConfigurationManager.class, "error");
|
||||||
|
private static final String ERROR_TYPE_TAG_NAME = "type";
|
||||||
|
private static final String CONFIG_CLASS_TAG_NAME = "configClass";
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(DynamicConfigurationManager.class);
|
private static final Logger logger = LoggerFactory.getLogger(DynamicConfigurationManager.class);
|
||||||
|
|
||||||
public DynamicConfigurationManager(String application, String environment, String configurationName,
|
public DynamicConfigurationManager(String application, String environment, String configurationName,
|
||||||
|
@ -106,23 +113,36 @@ public class DynamicConfigurationManager<T> {
|
||||||
private Optional<T> retrieveDynamicConfiguration() throws JsonProcessingException {
|
private Optional<T> retrieveDynamicConfiguration() throws JsonProcessingException {
|
||||||
final String previousVersion = lastConfigResult != null ? lastConfigResult.configurationVersion() : null;
|
final String previousVersion = lastConfigResult != null ? lastConfigResult.configurationVersion() : null;
|
||||||
|
|
||||||
lastConfigResult = appConfigClient.getConfiguration(GetConfigurationRequest.builder()
|
try {
|
||||||
.application(application)
|
lastConfigResult = appConfigClient.getConfiguration(GetConfigurationRequest.builder()
|
||||||
.environment(environment)
|
.application(application)
|
||||||
.configuration(configurationName)
|
.environment(environment)
|
||||||
.clientId(clientId)
|
.configuration(configurationName)
|
||||||
.clientConfigurationVersion(previousVersion)
|
.clientId(clientId)
|
||||||
.build());
|
.clientConfigurationVersion(previousVersion)
|
||||||
|
.build());
|
||||||
|
} catch (final RuntimeException e) {
|
||||||
|
Metrics.counter(ERROR_COUNTER_NAME, ERROR_TYPE_TAG_NAME, "fetch").increment();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
final Optional<T> maybeDynamicConfiguration;
|
final Optional<T> maybeDynamicConfiguration;
|
||||||
|
|
||||||
if (!StringUtils.equals(lastConfigResult.configurationVersion(), previousVersion)) {
|
if (!StringUtils.equals(lastConfigResult.configurationVersion(), previousVersion)) {
|
||||||
logger.info("Received new config version: {}", lastConfigResult.configurationVersion());
|
logger.info("Received new config version: {}", lastConfigResult.configurationVersion());
|
||||||
|
|
||||||
maybeDynamicConfiguration =
|
try {
|
||||||
parseConfiguration(
|
maybeDynamicConfiguration =
|
||||||
StandardCharsets.UTF_8.decode(lastConfigResult.content().asByteBuffer().asReadOnlyBuffer()).toString(),
|
parseConfiguration(
|
||||||
configurationClass);
|
StandardCharsets.UTF_8.decode(lastConfigResult.content().asByteBuffer().asReadOnlyBuffer()).toString(),
|
||||||
|
configurationClass);
|
||||||
|
} catch (final JsonProcessingException e) {
|
||||||
|
Metrics.counter(ERROR_COUNTER_NAME,
|
||||||
|
ERROR_TYPE_TAG_NAME, "parse",
|
||||||
|
CONFIG_CLASS_TAG_NAME, configurationClass.getName()).increment();
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// No change since last version
|
// No change since last version
|
||||||
maybeDynamicConfiguration = Optional.empty();
|
maybeDynamicConfiguration = Optional.empty();
|
||||||
|
|
Loading…
Reference in New Issue