public static async Task Shovel <T>( this Channel <T> channel, Func <T, Task> send, Action beforeStart, Action afterStop, IGaugeMetric channelSizeGauge, CancellationToken token ) { beforeStart(); try { while (!token.IsCancellationRequested && !channel.Reader.Completion.IsCompleted && await channel.Reader.WaitToReadAsync(token).ConfigureAwait(false)) { await foreach (var ctx in channel.Reader.ReadAllAsync(token).ConfigureAwait(false)) { await send(ctx).ConfigureAwait(false); channelSizeGauge.Set(channel.Reader.Count); } } } catch (OperationCanceledException) { // it's ok } afterStop(); }
static Task CreateChannelShovel <T>( string name, Channel <T> channel, Func <T, Task> send, IGaugeMetric size, CancellationToken token ) => Task.Run( () => channel.Shovel( send, () => Log.Info($"{name} started"), () => Log.Info($"{name} stopped"), size, token ), token );
public ServerGroup(string name, ServerVisibility visibility, DarkRiftThreadHelper threadHelper, Logger logger, MetricsCollector metricsCollector) { this.Name = name; this.Visibility = visibility; this.threadHelper = threadHelper; this.logger = logger; serversConnectedGauge = metricsCollector.Gauge("remote_servers_connected", "The number of servers connected to the server in this group.", "group").WithTags(name); serverJoinedEventTimeHistogram = metricsCollector.Histogram("remote_server_joined_event_time", "The time taken to execute the ServerJoined event.", "group").WithTags(name); serverLeftEventTimeHistogram = metricsCollector.Histogram("remote_server_left_event_time", "The time taken to execute the ServerLeft event.", "group").WithTags(name); serverJoinedEventFailuresCounter = metricsCollector.Counter("remote_server_joined_event_failures", "The number of failures executing the ServerJoined event.", "group").WithTags(name); serverLeftEventFailuresCounter = metricsCollector.Counter("remote_server_left_event_failures", "The number of failures executing the ServerLeft event.", "group").WithTags(name); }
/// <summary> /// Creates a new client manager. /// </summary> /// <param name="settings">The settings for this client manager.</param> /// <param name="networkListenerManager">The server's network listener manager.</param> /// <param name="threadHelper">The thread helper the client manager will use.</param> /// <param name="logger">The logger this client manager will use.</param> /// <param name="clientLogger">The logger clients will use.</param> internal ClientManager(ServerSpawnData.ServerSettings settings, NetworkListenerManager networkListenerManager, DarkRiftThreadHelper threadHelper, Logger logger, Logger clientLogger) #endif { this.MaxStrikes = settings.MaxStrikes; this.networkListenerManager = networkListenerManager; this.threadHelper = threadHelper; this.logger = logger; this.clientLogger = clientLogger; #if PRO this.clientMetricsCollector = clientMetricsCollector; clientsConnectedGauge = metricsCollector.Gauge("clients_connected", "The number of clients connected to the server."); clientConnectedEventTimeHistogram = metricsCollector.Histogram("client_connected_event_time", "The time taken to execute the ClientConnected event."); clientDisconnectedEventTimeHistogram = metricsCollector.Histogram("client_disconnected_event_time", "The time taken to execute the ClientDisconnected event."); clientConnectedEventFailuresCounter = metricsCollector.Counter("client_connected_event_failures", "The number of failures executing the ClientConnected event."); clientDisconnectedEventFailuresCounter = metricsCollector.Counter("client_disconnected_event_failures", "The number of failures executing the ClientDisconnected event."); #endif }
public readonly IHistogramMetric ThreadPoolLatencyHistogram; //done public ActorMetrics(ProtoMetrics metrics) { ThreadPoolLatencyHistogram = metrics.CreateHistogram("protoactor_threadpool_latency_duration_seconds", "", "id", "address"); DeadletterCount = metrics.CreateCount("protoactor_deadletter_count", "", "id", "address", "messagetype"); ActorSpawnCount = metrics.CreateCount("protoactor_actor_spawn_count", "", "id", "address", "actortype"); ActorStoppedCount = metrics.CreateCount("protoactor_actor_stopped_count", "", "id", "address", "actortype"); ActorRestartedCount = metrics.CreateCount("protoactor_actor_restarted_count", "", "id", "address", "actortype"); ActorFailureCount = metrics.CreateCount("protoactor_actor_failure_count", "", "id", "address", "actortype"); ActorMailboxLength = metrics.CreateGauge("protoactor_actor_mailbox_length", "", "id", "address", "actortype"); ActorMessageReceiveHistogram = metrics.CreateHistogram("protoactor_actor_messagereceive_duration_seconds", "", "id", "address", "actortype", "messagetype" ); FuturesStartedCount = metrics.CreateCount("protoactor_future_started_count", "", "id", "address"); FuturesTimedOutCount = metrics.CreateCount("protoactor_future_timedout_count", "", "id", "address"); FuturesCompletedCount = metrics.CreateCount("protoactor_future_completed_count", "", "id", "address"); }
public ClusterMetrics(ProtoMetrics metrics) { ClusterActorGauge = metrics.CreateGauge("protocluster_virtualactors", "", "id", "address", "clusterkind"); ClusterActorSpawnHistogram = metrics.CreateHistogram("protocluster_virtualactor_spawn_duration_seconds", "", "id", "address", "clusterkind"); ClusterRequestHistogram = metrics.CreateHistogram("protocluster_virtualactor_requestasync_duration_seconds", "", "id", "address", "clusterkind", "messagetype", "pidsource" ); ClusterRequestRetryCount = metrics.CreateCount("protocluster_virtualactor_requestasync_retry_count", "", "id", "address", "clusterkind", "messagetype" ); ClusterTopologyEventGauge = metrics.CreateGauge("protocluster_topology_events", "", "id", "address", "membershiphashcode"); ClusterResolvePidHistogram = metrics.CreateHistogram("protocluster_resolve_pid_duration_seconds", "", "id", "address", "clusterkind"); }