private async Task Should_collect_and_publish_metrics_and_gossip_them_around_the_node_ring() { await AwaitAssertAsync(() => { AwaitClusterUp(Roles.ToArray()); }, TimeSpan.FromSeconds(30)); EnterBarrier("cluster_started"); await AwaitAssertAsync(() => { Cluster.State.Members.Count(m => m.Status == MemberStatus.Up).Should().Be(Roles.Count); }, TimeSpan.FromSeconds(30)); await AwaitAssertAsync(() => { MetricsView.ClusterMetrics.Count.Should().Be(Roles.Count); }, TimeSpan.FromSeconds(30)); await WithinAsync(10.Seconds(), async() => { var collector = new MetricsCollectorBuilder().Build(Cluster.System); collector.Sample().Metrics.Count.Should().BeGreaterThan(3); EnterBarrier("after"); }); }
public static IServiceCollection AddBuiltInMetrics(this IServiceCollection services, MetricsCollectorBuilder?builder = null) { services.TryAddSingleton <ICpuUsageMonitor, CpuUsageMonitor>(); services.AddHostedService(sp => (CpuUsageMonitor)sp.GetRequiredService <ICpuUsageMonitor>()); if (builder == null) { builder = MetricsCollectorBuilder.Default(); } services.AddHostedService(sp => ActivatorUtilities.CreateInstance <MetricsCollectorService>(sp, builder.Build(sp))); return(services); }
/// <summary> /// Configures a <see cref="IMetricsCollector" /> and adds it to the service collection. /// </summary> /// <param name="services"> /// An <see cref="IServiceCollection" /> to add the collector to. /// </param> public static IMetricsCollectorBuilder AddMetricsCollector(this IServiceCollection services) { var builder = new MetricsCollectorBuilder(services); services .AddSingleton <MetricsCollector>() .AddSingleton <IMetricsCollector>(s => s.GetService <MetricsCollector>()) .AddSingleton <IHostedService>(s => s.GetService <MetricsCollector>()) .AddSingleton <MetricSourceOptions>() .AddSingleton <MetricsCollectorOptions>(s => builder.Build(s)); #if NETCOREAPP services .AddSingleton <DiagnosticsCollector>() .AddSingleton <IDiagnosticsCollector>(s => s.GetService <DiagnosticsCollector>()) .AddSingleton <IHostedService>(s => s.GetService <DiagnosticsCollector>()); #endif return(builder); }