Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        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);
 }