All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.zalando.baigan.service.EtcdConfigurationRepository Maven / Gradle / Ivy

package org.zalando.baigan.service;

import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.zalando.baigan.etcd.service.EtcdClient;
import org.zalando.baigan.model.Configuration;

import javax.annotation.Nonnull;
import java.io.IOException;
import java.util.Optional;

import static com.google.common.base.Preconditions.checkArgument;

/**
 * @author mchand
 */

public class EtcdConfigurationRepository extends AbstractConfigurationRepository {

    private static final String ETCD_URL_ENV_NAME = "ETCD_URL";
    private static final String CONFIG_PATH_PREFIX = "/v2/keys/";
    private Logger LOG = LoggerFactory.getLogger(EtcdConfigurationRepository.class);
    private EtcdClient etcdClient;

    @VisibleForTesting
    public EtcdConfigurationRepository(final EtcdClient etcdClient) {
        checkArgument(etcdClient != null);
        this.etcdClient = etcdClient;

    }

    public EtcdConfigurationRepository() {
        etcdClient = new EtcdClient(getUrl());
    }

    private String getUrl() {
        String systemEtcdUrl = System.getenv(ETCD_URL_ENV_NAME);
        if (Strings.isNullOrEmpty(systemEtcdUrl)) {
            LOG.error("$" + ETCD_URL_ENV_NAME
                    + " is undefined. This is required in order to by the baigan configuration service.");
        }
        return systemEtcdUrl;
    }

    public void put(@Nonnull final String key, @Nonnull final String value) {
        throw new UnsupportedOperationException(
                "The put operation is not yet supported.");
    }

    @Nonnull
    public Optional get(@Nonnull final String key) {
        try {
            checkArgument(!Strings.isNullOrEmpty(key),
                    "Attempt to get configuration for an empty key !");
            final Optional optionalConfig = etcdClient.get(CONFIG_PATH_PREFIX + key);

            if (optionalConfig.isPresent()) {
                return Optional.of(objectMapper.readValue(optionalConfig.get(),
                        Configuration.class));
            }

        } catch (IOException e) {
            LOG.warn("Error while loading configuration for key: " + key, e);
        }
        return Optional.empty();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy