public CustomProbe(LivenessStatus livenessStatus, ReadinessStatus readinessStatus)
            {
                _livenessStatus  = livenessStatus;
                _readinessStatus = readinessStatus;

                Receive <GetCurrentLiveness>(_ => Sender.Tell(_livenessStatus));
                Receive <GetCurrentReadiness>(_ => Sender.Tell(_readinessStatus));
            }
 private void DisplayStatus()
 {
     if (statusLine != null)
     {
         var status = new ReadinessStatus();
         if (binder != null)
         {
             status = binder.PublisherStatus;
         }
         statusLine.faceColor = status.readiness == PublisherReadiness.Ready ? Color.white : Color.red;
         statusLine.text      = $"Status: {status.readiness.ToString()}, Create={status.recommendedForCreate.ToString("0.00")}, {status.readyForCreate.ToString("0.00")}";
     }
 }
Exemple #3
0
        public ClusterReadinessProbe(ReadinessStatus readinessStatus)
        {
            _readinessStatus = readinessStatus;

            Receive <ReadinessStatus>(s =>
            {
                _readinessStatus = s;
                foreach (var sub in _subscribers)
                {
                    sub.Tell(s);
                }
            });

            Receive <GetCurrentReadiness>(_ => Sender.Tell(_readinessStatus));

            Receive <SubscribeToReadiness>(s =>
            {
                _subscribers.Add(s.Subscriber);
                Context.Watch(s.Subscriber);
                s.Subscriber.Tell(_readinessStatus);
            });

            Receive <UnsubscribeFromReadiness>(u =>
            {
                _subscribers.Remove(u.Subscriber);
                Context.Unwatch(u.Subscriber);
            });

            Receive <Terminated>(t => { _subscribers.Remove(t.ActorRef); });

            Receive <ClusterEvent.UnreachableMember>(r =>
            {
                if (_cluster.State.Unreachable.SetEquals(_cluster.State.Members.Remove(_cluster.SelfMember)))
                {
                    if (_notReadyTask == null)
                    {
                        _notReadyTask = Context.System.Scheduler.ScheduleTellOnceCancelable(TimeSpan.FromSeconds(20),
                                                                                            Self,
                                                                                            new ReadinessStatus(false, "everyone else is unreachable"), ActorRefs.NoSender);
                    }
                }
            });

            Receive <ClusterEvent.ReachableMember>(r =>
            {
                // someone else has become reachable again. Can abort "not ready" task if it was already running
                _notReadyTask?.Cancel();
            });
        }
 private void DisplayStatus()
 {
     if (statusLine != null)
     {
         var status = new ReadinessStatus();
         if (binder != null)
         {
             status = binder.PublisherStatus;
         }
         statusLine.faceColor = status.readiness == PublisherReadiness.Ready ? Color.white : Color.red;
         string statusText = $"Status: {status.readiness}";
         if (status.readiness == PublisherReadiness.NotReadyToCreate)
         {
             statusText += $" Create={status.recommendedForCreate.ToString("0.00")}, {status.readyForCreate.ToString("0.00")}";
         }
         string wltStatus = WorldLocking.Core.WorldLockingManager.GetInstance().ErrorStatus;
         if (string.IsNullOrEmpty(wltStatus))
         {
             wltStatus = "Tracking";
         }
         statusText     += $" {wltStatus}";
         statusLine.text = statusText;
     }
 }