protected override async Task <HealthCheckResult> GetHealthCheckResult() { IClusterManager manager; try { manager = _factory.Create(); } catch (Exception e) { Logger.ErrorException(e.Message, e); return(HealthCheckResult.Create(Id) .SetStatus(Status.Unknown) .SetLevel(LogLevel.Fatal) .SetReason($"HealthCheck {Id} failed to connect to CouchBase.") .SetException(e)); } HealthCheckResult health; try { var data = await manager.ListBucketsAsync(); if (!data.Success) { health = HealthCheckResult.Create(Id) .SetStatus(Status.Critical) .SetLevel(LogLevel.Error) .SetReason($"CouchBase Cluster failed to retrieve bucket configurations."); } else { health = HealthCheckResult.Create(Id); foreach (var bucket in data.Value) { var bucketHealth = await GetHealthCheckResult(bucket); health.AddInnerResult(bucketHealth); } } } catch (Exception e) { Logger.ErrorException(e.Message, e); health = HealthCheckResult.Create(Id) .SetStatus(Status.Unknown) .SetLevel(LogLevel.Fatal) .SetReason($"HealthCheck {Id} threw an exception.") .SetException(e); } return(health); }
protected override Task <HealthCheckResult> GetHealthCheckResult(IBucketConfig bucket) { var health = HealthCheckResult.Create(bucket.Name); if (bucket.BasicStats.ItemCount > 100000) { health.SetStatus(Status.Warning).SetLevel(LogLevel.Warn).SetReason($"Bucket {bucket.Name} has more than 100000 documents."); } else { health.SetStatus(Status.Okay); } return(Task.FromResult(health)); }
protected override Task <HealthCheckResult> GetHealthCheckResult(IClusterInfo cluster) { var health = HealthCheckResult.Create(Id); var ram = cluster.Pools().StorageTotals.Ram; var used = (int)Math.Round((double)ram.QuotaUsed / ram.QuotaTotal * 100, 0); if (used > 85) { health.SetStatus(Status.Warning).SetLevel(LogLevel.Warn).SetReason($"Available quota memory is less than 15%."); } else { health.SetStatus(Status.Okay); } return(Task.FromResult(health)); }
/// <summary> /// Executes the Health Check implementation. /// </summary> /// <returns> /// An <see cref = "IHealthCheckResult" /> instance that specifies the outcome of the Health Check. /// </returns> public IHealthCheckResult Execute() { HealthCheckResult result; try { result = this.m_ServiceStateInquisitor.ServiceIsRunning() ? HealthCheckResult.Create(true, MessageResources.FEATURE_STORE_SERVICE_IS_RUNNING) : HealthCheckResult.Create(false, MessageResources.FEATURE_STORE_SERVICE_IS_NOT_RUNNING); } catch (ServiceNotInstalledException) { result = HealthCheckResult.Create(false, ExceptionMessageResources.SERVICE_NOT_INSTALLED); } return(result); }
public Task <HealthCheckResult> RunAsync() { _lastRun = DateTime.UtcNow; return(Task.FromResult(HealthCheckResult.Create(Id).SetStatus(Status.Okay).SetReason("Pong"))); }
public void Finalize_ShouldCorrectlyBubbleUpInnerResults() { var sut = HealthCheckResult .Create("Foo") .SetStatus(Status.Okay) .SetLevel(LogLevel.Info) .AddInnerResult(HealthCheckResult .Create("Foo1") .SetStatus(Status.Okay) .SetLevel(LogLevel.Info) .AddInnerResult(HealthCheckResult .Create("Bar1") .SetStatus(Status.Warning) .SetLevel(LogLevel.Warn) .SetReason("Bar1!")) .AddInnerResult(HealthCheckResult .Create("Bar2") .SetStatus(Status.Warning) .SetLevel(LogLevel.Warn) .SetReason("Bar2!")) .AddInnerResult(HealthCheckResult .Create("Bar2") .SetStatus(Status.Warning) .SetLevel(LogLevel.Warn) .SetReason("Bar2!")) .AddInnerResult(HealthCheckResult .Create("Bar2") .SetStatus(Status.Warning) .SetLevel(LogLevel.Warn) .SetReason("Bar3!"))) .AddInnerResult(HealthCheckResult .Create("Foo2") .SetStatus(Status.Okay) .SetLevel(LogLevel.Info) .AddInnerResult(HealthCheckResult .Create("Baz1") .SetStatus(Status.Critical) .SetLevel(LogLevel.Error) .SetReason("Baz1!")) .AddInnerResult(HealthCheckResult .Create("Baz2") .SetStatus(Status.Critical) .SetLevel(LogLevel.Error) .SetReason("Baz2!"))) .AddInnerResult(HealthCheckResult .Create("Foo3") .SetStatus(Status.Okay) .SetLevel(LogLevel.Info) .AddInnerResult(HealthCheckResult .Create("Qux1") .SetStatus(Status.Critical) .SetLevel(LogLevel.Fatal) .SetReason("Qux1!")) .AddInnerResult(HealthCheckResult .Create("Qux2") .SetStatus(Status.Critical) .SetLevel(LogLevel.Fatal) .SetReason("Qux2!"))); // everything sut.Finalize(sut.CheckId, x => true); sut.Level.Should().Be(LogLevel.Fatal); sut.Status.Should().Be(Status.Critical); sut.Details.Keys.Count.Should().Be(7); sut.Details["Foo.Foo1.Bar1.Reason"].Should().Be("Bar1!"); sut.Details["Foo.Foo1.Bar2.Reason"].Should().Be("Bar2!"); sut.Details["Foo.Foo1.Bar2.Reason#1"].Should().Be("Bar3!"); sut.Details["Foo.Foo2.Baz1.Reason"].Should().Be("Baz1!"); sut.Details["Foo.Foo2.Baz2.Reason"].Should().Be("Baz2!"); sut.Details["Foo.Foo3.Qux1.Reason"].Should().Be("Qux1!"); sut.Details["Foo.Foo3.Qux2.Reason"].Should().Be("Qux2!"); }
public void InstanceMethods_ShouldHaveCorrectGuardClauses() { var sut = HealthCheckResult.Create("foo"); typeof(HealthCheckResult).VerifyInstanceMethodGuards(sut).Should().Be(7); }