public void SetUp()
        {
            var hangingChecker = Substitute.For<ISystemChecker>();
            hangingChecker.SystemName.Returns("Hanging checker");
            hangingChecker.CheckSystem().Returns(x =>
            {
                Thread.Sleep(TimeSpan.FromSeconds(10));
                return (SystemCheckResult)null;
            });

            var healthyChecker = Substitute.For<ISystemChecker>();
            healthyChecker.CheckSystem().Returns(x => new SystemCheckResult { SystemName = "Healthy checker", Health = HealthState.Good });

            var healthNetConfiguration = Substitute.For<IHealthNetConfiguration>();
            healthNetConfiguration.DefaultSystemCheckTimeout.Returns(TimeSpan.FromSeconds(1));

            var service = new HealthCheckService(healthNetConfiguration, Substitute.For<IVersionProvider>(), new[] { hangingChecker, healthyChecker });

            var task = Task<HealthResult>.Factory.StartNew(() => service.CheckHealth());
            if (Task.WaitAll(new Task[] {task}, TimeSpan.FromSeconds(5)))
            {
                result = task.Result;
            }
            else
            {
                throw new TimeoutException();
            }
        }
        public async Task InvokeAsync(HttpContext context, HealthCheckService healthCheckService)
        {
            if (IsCallToHealthCheck(context))
            {
                var responseHeaders = context.Response.Headers;
                responseHeaders["Content-Type"] = new[] { $"{Constants.Response.ContentType.Json}; charset=utf-8" };

                var responseStream = context.Response.Body;

                var result = healthCheckService.CheckHealth(IsIntrusive(context));

                using (var writeStream = new MemoryStream())
                {
                    var contentLength = serializer.SerializeToStream(writeStream, result);
                    responseHeaders["Content-Length"] = new[] { contentLength.ToString("D") };
                    writeStream.Position = 0;

                    await writeStream.CopyToAsync(responseStream);
                }
            }
            else
            {
                await next(context);
            }
        }
        public void SetUp()
        {
            var hangingChecker = Substitute.For <ISystemChecker>();

            hangingChecker.SystemName.Returns("Hanging checker");
            hangingChecker.CheckSystem().Returns(x =>
            {
                Thread.Sleep(TimeSpan.FromSeconds(10));
                return((SystemCheckResult)null);
            });

            var healthyChecker = Substitute.For <ISystemChecker>();

            healthyChecker.CheckSystem().Returns(x => new SystemCheckResult {
                SystemName = "Healthy checker", Health = HealthState.Good
            });

            var healthNetConfiguration = Substitute.For <IHealthNetConfiguration>();

            healthNetConfiguration.DefaultSystemCheckTimeout.Returns(TimeSpan.FromSeconds(1));

            var service = new HealthCheckService(healthNetConfiguration, Substitute.For <IVersionProvider>(), new[] { hangingChecker, healthyChecker });

            var task = Task <HealthResult> .Factory.StartNew(() => service.CheckHealth());

            if (Task.WaitAll(new Task[] { task }, TimeSpan.FromSeconds(5)))
            {
                result = task.Result;
            }
            else
            {
                throw new TimeoutException();
            }
        }
        public async Task Invoke(Env environment)
        {
            if (IsCallToHealthCheck(environment))
            {
                var responseHeaders = (IDictionary <string, string[]>)environment["owin.ResponseHeaders"];
                responseHeaders["Content-Type"] = new[] { $"{Constants.Response.ContentType.Json}; charset=utf-8" };

                var responseStream = (Stream)environment["owin.ResponseBody"];

                var healthCheckService = new HealthCheckService(configuration,
                                                                versionProvider ?? new AssemblyFileVersionProvider(configuration),
                                                                systemCheckerResolverFactory());
                var result = healthCheckService.CheckHealth(IsIntrusive(environment));

                using (var writeStream = new MemoryStream())
                {
                    var contentLength = new HealthResultJsonSerializer().SerializeToStream(writeStream, result);
                    responseHeaders["Content-Length"] = new[] { contentLength.ToString("D") };
                    writeStream.Position = 0;

                    await writeStream.CopyToAsync(responseStream);
                }
            }
            else
            {
                await next.Invoke(environment);
            }
        }
        public void SetUp()
        {
            var versionProvider = Substitute.For<IVersionProvider>();
            versionProvider.GetSystemVersion().Returns("1.2.3.4");

            var healthNetConfiguration = Substitute.For<IHealthNetConfiguration>();
            healthNetConfiguration.DefaultSystemCheckTimeout.Returns(TimeSpan.FromSeconds(5));

            var service = new HealthCheckService(healthNetConfiguration, versionProvider, SystemStateCheckers());
            Result = service.CheckHealth(PerformeIntrusive);
        }
        public void SetUp()
        {
            var versionProvider = Substitute.For <IVersionProvider>();

            versionProvider.GetSystemVersion().Returns("1.2.3.4");

            var healthNetConfiguration = Substitute.For <IHealthNetConfiguration>();

            healthNetConfiguration.DefaultSystemCheckTimeout.Returns(TimeSpan.FromSeconds(5));

            var service = new HealthCheckService(healthNetConfiguration, versionProvider, SystemStateCheckers());

            Result = service.CheckHealth(PerformeIntrusive);
        }
示例#7
0
        public HealthNetModule(IHealthNetConfiguration configuration, IEnumerable<ISystemChecker> systemCheckers)
            : base(configuration.Path)
        {
            Get[""] = p =>
            {
                var healthChecker = new HealthCheckService(configuration, new VersionProvider(configuration), systemCheckers);

                var intrusive = false;
                if (Request.Query.intrusive != null)
                {
                    intrusive = Request.Query.intrusive == "true";
                }

                Action<Stream> performeHealthCheck = stream => new HealthResultJsonSerializer().SerializeToStream(stream, healthChecker.CheckHealth(intrusive));

                return new Response { Contents = performeHealthCheck, ContentType = Constants.Response.ContentType.Json + "; charset=utf-8", StatusCode = HttpStatusCode.OK };
            };
        }
        public void SetUp()
        {
            var hangingChecker = Substitute.For <ISystemChecker>();

            hangingChecker.SystemName.Returns("Hanging checker");
            hangingChecker.CheckSystem().Returns(x =>
            {
                Thread.Sleep(TimeSpan.FromSeconds(10));
                return((SystemCheckResult)null);
            });

            var healthyChecker = Substitute.For <ISystemChecker>();

            healthyChecker.SystemName.Returns("Healthy checker");
            healthyChecker.CheckSystem()
            .Returns(x => new SystemCheckResult {
                SystemName = healthyChecker.SystemName, Health = HealthState.Good
            });

            var healthNetConfiguration = Substitute.For <IHealthNetConfiguration>();

            healthNetConfiguration.DefaultSystemCheckTimeout.Returns(TimeSpan.FromSeconds(4));

            var service = new HealthCheckService(healthNetConfiguration, Substitute.For <IVersionProvider>(),
                                                 new[] { hangingChecker, healthyChecker });

            var task = Task <HealthResult> .Factory.StartNew(() => service.CheckHealth());

            if (Task.WaitAll(new Task[] { task }, TimeSpan.FromSeconds(20)))
            {
                result = task.Result;
                TestContext.Progress.WriteLine($"Health check result:{Environment.NewLine}{JsonConvert.SerializeObject(result)}");
            }
            else
            {
                TestContext.Progress.WriteLine("Healthcheck timed out");
                throw new TimeoutException();
            }
        }
示例#9
0
        public HealthNetModule(IHealthNetConfiguration configuration, IEnumerable <ISystemChecker> systemCheckers)
            : base(configuration.Path)
        {
            Get[""] = p =>
            {
                var healthChecker = new HealthCheckService(configuration, new VersionProvider(configuration), systemCheckers);

                var intrusive = false;
                if (Request.Query.intrusive != null)
                {
                    intrusive = Request.Query.intrusive == "true";
                }

                Action <Stream> performeHealthCheck = stream => new HealthResultJsonSerializer().SerializeToStream(stream, healthChecker.CheckHealth(intrusive));

                return(new Response {
                    Contents = performeHealthCheck, ContentType = Constants.Response.ContentType.Json + "; charset=utf-8", StatusCode = HttpStatusCode.OK
                });
            };
        }