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); } } }
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)); }