Пример #1
0
 public void Detach(IRedisHeartBeatProbe probe)
 {
     if (!ReferenceEquals(probe, null))
     {
         lock (m_SyncRoot)
         {
             var probes = m_Probes;
             if (probes == null)
             {
                 Stop();
             }
             else
             {
                 var cp = probes.FirstOrDefault((c) => ReferenceEquals(c.Probe, probe));
                 if (!ReferenceEquals(cp, null))
                 {
                     try
                     {
                         probes.Remove(cp);
                         cp.Dispose();
                     }
                     finally
                     {
                         if (probes.Count == 0)
                         {
                             Stop();
                         }
                     }
                 }
             }
         }
     }
 }
Пример #2
0
 public CardioProbe(IRedisHeartBeatProbe probe, int intervalInSecs,
                    Func <object, RedisCardioPulseStatus, bool> onSetHealthState)
 {
     m_Probe             = probe;
     m_OnSetStatus       = onSetHealthState;
     m_IsDisposable      = probe is IRedisDisposableBase;
     IntervalInMillisecs = 1000 * Math.Max(RedisConstants.MinHeartBeatIntervalSecs, Math.Min(RedisConstants.MaxHeartBeatIntervalSecs, intervalInSecs));
 }
Пример #3
0
 public RedisCardioPulseStatus(IRedisHeartBeatProbe probe, RedisCardioProbeStatus currentStatus,
                               RedisCardioProbeStatus newStatus, long failCount, long successCount)
     : this()
 {
     Probe         = probe;
     NewStatus     = newStatus;
     CurrentStatus = currentStatus;
     FailCount     = failCount;
     SuccessCount  = successCount;
 }
Пример #4
0
        public void Attach(IRedisHeartBeatProbe probe, int interval)
        {
            ValidateNotDisposed();

            if (!ReferenceEquals(probe, null))
            {
                var asDisposable = probe as IRedisDisposableBase;
                if (ReferenceEquals(asDisposable, null) || !asDisposable.Disposed)
                {
                    lock (m_SyncRoot)
                    {
                        var probes = m_Probes;
                        if (probes != null)
                        {
                            var exists = probes.Any(cp => cp.IsAlive() &&
                                                    ReferenceEquals(probe, cp.Probe));
                            if (!exists && !Disposed)
                            {
                                probes.Add(new CardioProbe(probe, interval, (obj, status) =>
                                {
                                    if (status.NewStatus != status.CurrentStatus)
                                    {
                                        var canSet = CanUpdateHealthState(obj, status);
                                        if (canSet)
                                        {
                                            try
                                            {
                                                var cp = (CardioProbe)obj;

                                                var prb = cp.Probe;
                                                if (!ReferenceEquals(prb, null))
                                                {
                                                    prb.PulseStateChanged(status);
                                                }
                                            }
                                            catch (Exception)
                                            { }
                                        }
                                        return(canSet);
                                    }
                                    return(false);
                                }));
                                Start();
                            }
                        }
                    }
                }
            }
        }