Akka.Cluster.MetricsCollector.Get C# (CSharp) Method

Get() public static method

public static Get ( ExtendedActorSystem system, ClusterSettings settings ) : IMetricsCollector
system ExtendedActorSystem
settings ClusterSettings
return IMetricsCollector
        public static IMetricsCollector Get(ExtendedActorSystem system, ClusterSettings settings)
        {
            var fqcn = settings.MetricsCollectorClass;
            if (fqcn == typeof (PerformanceCounterMetricsCollector).AssemblyQualifiedName) return new PerformanceCounterMetricsCollector(system);
            
            var metricsCollectorClass = Type.GetType(fqcn);
            if (metricsCollectorClass == null)
            {
                throw new ConfigurationException(string.Format("Could not create custom metrics collector {0}", fqcn));
            }

            try
            {
                var metricsCollector = (IMetricsCollector) Activator.CreateInstance(metricsCollectorClass, system);
                return metricsCollector;
            }
            catch (Exception ex)
            {
                throw new ConfigurationException(string.Format("Could not create custom metrics collector {0} because: {1}", fqcn, ex.Message));
            }
        }
    }

Usage Example

        public ClusterMetricsCollector(ActorRef publisher)
        {
            _publisher   = publisher;
            _cluster     = Cluster.Get(Context.System);
            Collector    = MetricsCollector.Get(Context.System.AsInstanceOf <ExtendedActorSystem>(), _cluster.Settings);
            LatestGossip = MetricsGossip.Empty;
            Nodes        = ImmutableHashSet.Create <Address>();

            _metricsTask = new CancellationTokenSource();
            Context.System.Scheduler.Schedule(_cluster.Settings.PeriodicTasksInitialDelay.Max(_cluster.Settings.MetricsInterval),
                                              _cluster.Settings.MetricsInterval, Self, InternalClusterAction.MetricsTick.Instance, _metricsTask.Token);

            _gossipTask = new CancellationTokenSource();
            Context.System.Scheduler.Schedule(_cluster.Settings.PeriodicTasksInitialDelay.Max(_cluster.Settings.GossipInterval),
                                              _cluster.Settings.GossipInterval, Self, InternalClusterAction.GossipTick.Instance, _gossipTask.Token);

            Receive <InternalClusterAction.GossipTick>(tick => Gossip());
            Receive <InternalClusterAction.MetricsTick>(tick => Collect());
            Receive <MetricsGossipEnvelope>(envelope => ReceiveGossip(envelope));
            Receive <ClusterEvent.CurrentClusterState>(state => ReceiveState(state));
            Receive <ClusterEvent.MemberUp>(up => AddMember(up.Member));
            Receive <ClusterEvent.MemberRemoved>(removed => RemoveMember(removed.Member));
            Receive <ClusterEvent.MemberExited>(exited => RemoveMember(exited.Member));
            Receive <ClusterEvent.UnreachableMember>(member => RemoveMember(member.Member));
            Receive <ClusterEvent.ReachableMember>(member =>
            {
                if (member.Member.Status == MemberStatus.Up)
                {
                    AddMember(member.Member);
                }
            });
            Receive <ClusterEvent.IMemberEvent>(@event => { }); //not interested in other types of member event
        }
MetricsCollector