diff --git a/src/Components/Server/src/Circuits/CircuitHost.cs b/src/Components/Server/src/Circuits/CircuitHost.cs index ba684e1984cd..e665a3877231 100644 --- a/src/Components/Server/src/Circuits/CircuitHost.cs +++ b/src/Components/Server/src/Circuits/CircuitHost.cs @@ -209,7 +209,10 @@ await Renderer.Dispatcher.InvokeAsync(async () => try { - await OnConnectionDownAsync(CancellationToken.None); + if (this.Client.Connected) + { + await OnConnectionDownAsync(CancellationToken.None); + } } catch { diff --git a/src/Components/Server/src/Circuits/CircuitMetrics.cs b/src/Components/Server/src/Circuits/CircuitMetrics.cs index 9432c6d18678..2d7c84dea66a 100644 --- a/src/Components/Server/src/Circuits/CircuitMetrics.cs +++ b/src/Components/Server/src/Circuits/CircuitMetrics.cs @@ -70,11 +70,6 @@ public void OnCircuitDown(long startTimestamp, long currentTimestamp) _circuitActiveCounter.Add(-1); } - if (_circuitConnectedCounter.Enabled) - { - _circuitConnectedCounter.Add(-1); - } - if (_circuitDuration.Enabled) { var duration = Stopwatch.GetElapsedTime(startTimestamp, currentTimestamp); diff --git a/src/Components/Server/test/Circuits/CircuitMetricsTest.cs b/src/Components/Server/test/Circuits/CircuitMetricsTest.cs index 8394b01036dc..b1e3ae3c44a2 100644 --- a/src/Components/Server/test/Circuits/CircuitMetricsTest.cs +++ b/src/Components/Server/test/Circuits/CircuitMetricsTest.cs @@ -108,15 +108,11 @@ public async Task OnCircuitDown_UpdatesCountersAndRecordsDuration() // Assert var activeMeasurements = activeCircuitCounter.GetMeasurementSnapshot(); - var connectedMeasurements = connectedCircuitCounter.GetMeasurementSnapshot(); var durationMeasurements = circuitDurationCollector.GetMeasurementSnapshot(); Assert.Single(activeMeasurements); Assert.Equal(-1, activeMeasurements[0].Value); - Assert.Single(connectedMeasurements); - Assert.Equal(-1, connectedMeasurements[0].Value); - Assert.Single(durationMeasurements); Assert.True(durationMeasurements[0].Value > 0); } @@ -162,7 +158,10 @@ public void FullCircuitLifecycle_RecordsAllMetricsCorrectly() // 4. Connection re-established circuitMetrics.OnConnectionUp(); - // 5. Circuit closes + // 5. Connection drops + circuitMetrics.OnConnectionDown(); + + // 6. Circuit closes Thread.Sleep(10); // Add a small delay to ensure a measurable duration var endTime = Stopwatch.GetTimestamp(); circuitMetrics.OnCircuitDown(startTime, endTime);