public ClusterSettings(Config config, string systemName)
{
//TODO: Requiring!
var cc = config.GetConfig("akka.cluster");
_logInfo = cc.GetBoolean("log-info");
_failureDetectorConfig = cc.GetConfig("failure-detector");
_failureDetectorImplementationClass = _failureDetectorConfig.GetString("implementation-class");
_heartbeatInterval = _failureDetectorConfig.GetTimeSpan("heartbeat-interval");
_heartbeatExpectedResponseAfter = _failureDetectorConfig.GetTimeSpan("expected-response-after");
_monitoredByNrOfMembers = _failureDetectorConfig.GetInt("monitored-by-nr-of-members");
_seedNodes = cc.GetStringList("seed-nodes").Select(Address.Parse).ToImmutableList();
_seedNodeTimeout = cc.GetTimeSpan("seed-node-timeout");
_retryUnsuccessfulJoinAfter = cc.GetTimeSpanWithOffSwitch("retry-unsuccessful-join-after");
_periodicTasksInitialDelay = cc.GetTimeSpan("periodic-tasks-initial-delay");
_gossipInterval = cc.GetTimeSpan("gossip-interval");
_gossipTimeToLive = cc.GetTimeSpan("gossip-time-to-live");
_leaderActionsInterval = cc.GetTimeSpan("leader-actions-interval");
_unreachableNodesReaperInterval = cc.GetTimeSpan("unreachable-nodes-reaper-interval");
_publishStatsInterval = cc.GetTimeSpanWithOffSwitch("publish-stats-interval");
_downRemovalMargin = cc.GetTimeSpan("down-removal-margin");
_autoDownUnreachableAfter = cc.GetTimeSpanWithOffSwitch("auto-down-unreachable-after");
_roles = cc.GetStringList("roles").ToImmutableHashSet();
_minNrOfMembers = cc.GetInt("min-nr-of-members");
//TODO:
//_minNrOfMembersOfRole = cc.GetConfig("role").Root.GetArray().ToImmutableDictionary(o => o. )
//TODO: Ignored jmx
_useDispatcher = cc.GetString("use-dispatcher");
if (String.IsNullOrEmpty(_useDispatcher)) _useDispatcher = Dispatchers.DefaultDispatcherId;
_gossipDifferentViewProbability = cc.GetDouble("gossip-different-view-probability");
_reduceGossipDifferentViewProbability = cc.GetInt("reduce-gossip-different-view-probability");
_schedulerTickDuration = cc.GetTimeSpan("scheduler.tick-duration");
_schedulerTicksPerWheel = cc.GetInt("scheduler.ticks-per-wheel");
_metricsEnabled = cc.GetBoolean("metrics.enabled");
_metricsCollectorClass = cc.GetString("metrics.collector-class");
_metricsInterval = cc.GetTimeSpan("metrics.collect-interval");
_metricsGossipInterval = cc.GetTimeSpan("metrics.gossip-interval");
_metricsMovingAverageHalfLife = cc.GetTimeSpan("metrics.moving-average-half-life");
_minNrOfMembersOfRole = cc.GetConfig("role").Root.GetObject().Items
.ToImmutableDictionary(kv => kv.Key, kv => kv.Value.GetObject().GetKey("min-nr-of-members").GetInt());
_verboseHeartbeatLogging = cc.GetBoolean("debug.verbose-heartbeat-logging");
}