示例#1
0
        public void Test_404()
        {
            var monitor = new HttpMonitor();
            var result  = monitor.CheckHealth(@"https://httpstat.us/404");

            Assert.AreEqual(HealthStatus.NotExists, result.Status);
        }
示例#2
0
        public void Test_503()
        {
            var monitor = new HttpMonitor();
            var result  = monitor.CheckHealth(@"https://httpstat.us/503");

            Assert.AreEqual(HealthStatus.Offline, result.Status);
        }
示例#3
0
        public void Test_200()
        {
            var monitor = new HttpMonitor();
            var result  = monitor.CheckHealth(@"https://httpstat.us/200");

            Assert.AreEqual(HealthStatus.Healthy, result.Status);
        }
示例#4
0
        private HealthReport InternalCheckHealth()
        {
            var result = new HealthReport();

            //calculate httpMonitor timeout based on the check interval (1 minute for instance) substracted with 5 seconds
            var timeout = TimeSpan.FromMinutes(_endpoint.CheckInterval).Subtract(TimeSpan.FromSeconds(5)).TotalSeconds;

            var monitor = new HttpMonitor(_endpoint.Id.ToString(), _httpClientFactory, _tokenService, timeout, _logger);
            var sw      = Stopwatch.StartNew();
            var info    = monitor.CheckHealth(_endpoint.Url);

            result.TimeStamp = DateTime.UtcNow;
            sw.Stop();

            result.ResponseTime = sw.ElapsedMilliseconds;
            result.Message      = string.Empty;
            if (info.Details != null && info.Details.Any())
            {
                if (info.Details.ContainsKey("code"))
                {
                    result.Status = (HttpStatusCode)Enum.Parse(typeof(HttpStatusCode), info.Details["code"]);
                }

                if (info.Details.ContainsKey("content"))
                {
                    result.Message = info.Details["content"];
                }

                if (info.Details.ContainsKey("contentType"))
                {
                    if (info.Details["contentType"].Contains("html"))
                    {
                        result.Message = "Unexpected html content";
                    }
                }
            }

            if (_endpoint.CheckType == (int)CheckType.AvailabilityCheck)
            {
                Validate(result);
            }
            else if (_endpoint.CheckType == (int)CheckType.ContentCheck)
            {
                ValidateCustom(result);
            }

            return(result);
        }