nodemanager/core/NodeManagerConfig.h (110 lines of code) (raw):
#ifndef NODEMANAGERCONFIG_H
#define NODEMANAGERCONFIG_H
#include "../utils/Configuration.h"
#include "NamingClient.h"
using namespace hpc::utils;
namespace hpc
{
namespace core
{
#define AddConfigurationItem(T, name) \
static T Get##name() \
{ \
return instance.ReadValue<T>(#name); \
} \
\
static void Save##name(const T& v) \
{ \
instance.WriteValue(#name, v); \
instance.Save(); \
}
#define AddReadOnlyConfigurationItem(T, name) \
static T Get##name() \
{ \
return instance.ReadValue<T>(#name); \
}
typedef std::map<std::string, int> map_string_int_t;
class NodeManagerConfig : Configuration
{
public:
NodeManagerConfig() : Configuration("nodemanager.json") { }
AddConfigurationItem(std::string, ClusterAuthenticationKey);
AddConfigurationItem(std::string, TrustedCAPath);
AddConfigurationItem(std::string, TrustedCAFile);
AddConfigurationItem(std::string, CertificateChainFile);
AddConfigurationItem(std::string, PrivateKeyFile);
AddConfigurationItem(std::string, ListeningUri);
AddConfigurationItem(std::string, DefaultServiceName);
AddConfigurationItem(std::string, UdpMetricServiceName);
AddConfigurationItem(bool, UseDefaultCA);
AddConfigurationItem(bool, Debug);
AddConfigurationItem(int, HostsFetchInterval);
AddConfigurationItem(int, LogLevel);
AddConfigurationItem(std::vector<std::string>, NamingServiceUri);
AddConfigurationItem(std::string, MetricUri);
AddConfigurationItem(std::string, HeartbeatUri);
AddConfigurationItem(std::string, TaskCompletionUri);
AddConfigurationItem(std::string, HostsFileUri);
AddConfigurationItem(std::string, AzureInstanceMetaDataUri);
AddConfigurationItem(long, HttpRequestTimeoutSeconds);
static std::string ResolveRegisterUri(pplx::cancellation_token token)
{
std::string uri = NodeManagerConfig::GetRegisterUri();
return ResolveUri(uri, [token](std::shared_ptr<NamingClient> namingClient) { return namingClient->GetServiceLocation(NodeManagerConfig::GetDefaultServiceName(), token); });
}
static std::string ResolveHeartbeatUri(pplx::cancellation_token token)
{
std::string uri = NodeManagerConfig::GetHeartbeatUri();
return ResolveUri(uri, [token](std::shared_ptr<NamingClient> namingClient) { return namingClient->GetServiceLocation(NodeManagerConfig::GetDefaultServiceName(), token); });
}
static std::string ResolveMetricUri(pplx::cancellation_token token)
{
std::string uri = NodeManagerConfig::GetMetricUri();
return ResolveUri(uri, [token](std::shared_ptr<NamingClient> namingClient) { return namingClient->GetServiceLocation(NodeManagerConfig::GetUdpMetricServiceName(), token); });
}
static std::string ResolveHostsFileUri(pplx::cancellation_token token)
{
std::string uri = NodeManagerConfig::GetHostsFileUri();
return ResolveUri(uri, [token](std::shared_ptr<NamingClient> namingClient) { return namingClient->GetServiceLocation(NodeManagerConfig::GetDefaultServiceName(), token); });
}
static std::string ResolveMetricInstanceIdsUri(pplx::cancellation_token token)
{
std::string uri = NodeManagerConfig::GetMetricInstanceIdsUri();
return ResolveUri(uri, [token](std::shared_ptr<NamingClient> namingClient) { return namingClient->GetServiceLocation(NodeManagerConfig::GetDefaultServiceName(), token); });
}
static std::string ResolveTaskCompletedUri(const std::string& uri, pplx::cancellation_token token)
{
std::string configUri = NodeManagerConfig::GetTaskCompletionUri();
if (configUri.empty())
{
configUri = uri;
}
return ResolveUri(configUri, [token](std::shared_ptr<NamingClient> namingClient) { return namingClient->GetServiceLocation(NodeManagerConfig::GetDefaultServiceName(), token); });
}
protected:
private:
AddConfigurationItem(std::string, RegisterUri);
AddConfigurationItem(std::string, MetricInstanceIdsUri);
static std::string ResolveUri(const std::string& uri, std::function<std::string(std::shared_ptr<NamingClient>)> resolver)
{
std::string u = uri;
size_t pos = u.find("{0}");
if (pos != std::string::npos)
{
auto namingServiceUri = NodeManagerConfig::GetNamingServiceUri();
if (namingServiceUri.size() > 0)
{
// only when naming service configured.
return u.replace(pos, 3, resolver(NamingClient::GetInstance(NodeManagerConfig::GetNamingServiceUri())));
}
else
{
return "";
}
}
return std::move(u);
}
static NodeManagerConfig instance;
};
}
}
#endif // NODEMANAGERCONFIG_H