public IMetricsCollector Build(ActorSystem system) { var log = Logging.GetLogger(system, GetType()); var settings = ClusterMetricsSettings.Create(system.Settings.Config); var collectorCustom = settings.CollectorProvider; var defaultCollector = typeof(DefaultCollector).AssemblyQualifiedName; var useCustom = !settings.CollectorFallback; var useInternal = settings.CollectorFallback && string.IsNullOrEmpty(settings.CollectorProvider); Try <IMetricsCollector> Create(string provider) { log.Debug("Trying {0}", provider); return(DynamicAccess.CreateInstanceFor <IMetricsCollector>(provider, system)); } Try <IMetricsCollector> collector; if (useCustom) { collector = Create(collectorCustom); } else if (useInternal) { collector = Create(defaultCollector); } else // Use complete fall back chain. { collector = Create(collectorCustom).OrElse(Create(defaultCollector)); } return(collector.Recover(ex => throw new ConfigurationException($"Could not create metrics collector: {ex}")).Get()); }
/// <summary> /// Creates new <see cref="ClusterMetrics"/> for given actor system /// </summary> /// <param name="system"></param> internal ClusterMetrics(ExtendedActorSystem system) { _system = system; _system.Settings.InjectTopLevelFallback(DefaultConfig()); Settings = ClusterMetricsSettings.Create(_system.Settings.Config); Supervisor = _system.SystemActorOf( Props.Create <ClusterMetricsSupervisor>().WithDispatcher(Settings.MetricsDispatcher).WithDeploy(Deploy.Local), Settings.SupervisorName); }
public void Should_be_able_to_parse_settings() { var config = Sys.Settings.Config.WithFallback( ConfigurationFactory.FromResource <ClusterMetricsSettings>("Akka.Cluster.Metrics.reference.conf")); var settings = new ClusterMetricsSettings(config); // Extension. settings.MetricsDispatcher.ShouldBe(Dispatchers.DefaultDispatcherId); settings.PeriodicTasksInitialDelay.Should().Be(1.Seconds()); // Supervisor. settings.SupervisorName.Should().Be("cluster-metrics"); settings.SupervisorStrategyProvider.Should().BeEquivalentTo(typeof(ClusterMetricsStrategy).TypeQualifiedName()); settings.SupervisorStrategyConfiguration.ToString().ShouldBeEquivalentTo( ConfigurationFactory.ParseString("loggingEnabled=true,withinTimeRange=3s,maxNrOfRetries=3").ToString()); // Collector. settings.CollectorEnabled.Should().BeTrue(); settings.CollectorProvider.Should().BeEmpty(); settings.CollectorSampleInterval.Should().Be(3.Seconds()); settings.CollectorGossipInterval.Should().Be(3.Seconds()); settings.CollectorMovingAverageHalfLife.Should().Be(12.Seconds()); }
private AdaptiveLoadBalancingRouterSpec(AdaptiveLoadBalancingRouterConfig config) : base(config, typeof(AdaptiveLoadBalancingRouterSpec)) { _config = config; _metricsSettings = ClusterMetricsSettings.Create(Cluster.System.Settings.Config); }