예제 #1
0
        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);
        }
예제 #2
0
        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));
        }
예제 #3
0
        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);
        }
예제 #5
0
 public Task <HealthCheckResult> RunAsync()
 {
     _lastRun = DateTime.UtcNow;
     return(Task.FromResult(HealthCheckResult.Create(Id).SetStatus(Status.Okay).SetReason("Pong")));
 }
예제 #6
0
        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!");
        }
예제 #7
0
        public void InstanceMethods_ShouldHaveCorrectGuardClauses()
        {
            var sut = HealthCheckResult.Create("foo");

            typeof(HealthCheckResult).VerifyInstanceMethodGuards(sut).Should().Be(7);
        }