public void DetectUnhealthyStitches(long currentHeartbeatId)
        {
            foreach (var kvp in _stitchLastSyncReceived.ToArray())
            {
                var  instanceId       = kvp.Key;
                var  lastSyncReceived = kvp.Value;
                bool isHealthy        = _stitchHealth.GetOrAdd(instanceId, true);

                // It's already marked unhealthy. We shouldn't send duplicate notifications
                if (!isHealthy)
                {
                    continue;
                }

                // Determine if we're at the threshold for marking it unhealthy
                var report = _calculator.CalculateHealth(currentHeartbeatId, lastSyncReceived);
                if (report.HealthType != StitchHealthType.Red)
                {
                    continue;
                }

                if (_stitchHealth.TryUpdate(instanceId, false, true))
                {
                    _notifier.NotifyUnhealthy(instanceId);
                }
            }
        }
Exemple #2
0
        public StitchHealthResponse GetStitchHealthReport(StitchHealthRequest arg)
        {
            var heartbeatId      = _sequence.GetCurrentHeartbeatId();
            var lastSyncReceived = _tracker.GetLastHeartbeatSync(arg.StitchId);
            var report           = _calculator.CalculateHealth(heartbeatId, lastSyncReceived);

            return(StitchHealthResponse.Create(arg, report.LastHeartbeatSync, heartbeatId, report.HealthType));
        }