Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
 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
     );
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        /// <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");
        }