package com.sequenceiq.periscope.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.sequenceiq.periscope.service.registry.DNSServiceAddressResolver;
import com.sequenceiq.periscope.service.registry.RetryingServiceAddressResolver;
import com.sequenceiq.periscope.service.registry.ServiceAddressResolver;
import com.sequenceiq.periscope.service.registry.ServiceAddressResolvingException;
@Configuration
public class ServiceEndpointConfig {
@Value("${periscope.address.resolving.timeout:60000}")
private int resolvingTimeout;
@Value("${periscope.db.tcp.addr:}")
private String dbHost;
@Value("${periscope.db.tcp.port:}")
private String dbPort;
@Value("${periscope.db.serviceid:}")
private String databaseId;
@Value("${periscope.identity.server.url:}")
private String identityServiceUrl;
@Value("${periscope.identity.serviceid:}")
private String identityServiceId;
@Value("${periscope.cloudbreak.url:}")
private String cloudbreakUrl;
@Value("${periscope.cloudbreak.serviceid:}")
private String cloudbreakServiceId;
@Bean
public ServiceAddressResolver serviceAddressResolver() {
return new RetryingServiceAddressResolver(new DNSServiceAddressResolver(), resolvingTimeout);
}
@Bean
public String databaseAddress() throws ServiceAddressResolvingException {
return serviceAddressResolver().resolveHostPort(dbHost, dbPort, databaseId);
}
@Bean
public String identityServerUrl() throws ServiceAddressResolvingException {
return serviceAddressResolver().resolveUrl(identityServiceUrl, "http", identityServiceId);
}
@Bean
public String cloudbreakUrl() throws ServiceAddressResolvingException {
return serviceAddressResolver().resolveUrl(cloudbreakUrl, "http", cloudbreakServiceId);
}
}