Exemplo n.º 1
0
        public CheckResultTests()
        {
            var ck2 = new HttpCheck(2, Env, Srv, TimeSpan.FromMinutes(15), new Uri("http://remotehost"), new List <HttpCheckCondition> {
                Cnd
            }, HttpCheck.HttpMethod.Get);
            var rs3 = new ConditionResultDetail("status", true, "Good but slow");

            var now = DateTimeOffset.UtcNow;

            _checkResultA1      = CreateCheckResult();
            _checkResultA1Clone = new CheckResult(Ck1, now, CheckOutcome.Success, new List <ConditionResultDetail> {
                Rs1
            });
            _checkResultA2 = new CheckResult(Ck1, now.AddHours(1), CheckOutcome.Success, new List <ConditionResultDetail> {
                Rs1
            });
            _checkResultB1 = new CheckResult(ck2, now, CheckOutcome.Success, new List <ConditionResultDetail> {
                Rs1
            });
            _checkResultC1 = new CheckResult(Ck1, now.AddHours(1), CheckOutcome.Fail, new List <ConditionResultDetail> {
                Rs2
            });
            _checkResultD1 = new CheckResult(Ck1, now.AddHours(1), CheckOutcome.Success, new List <ConditionResultDetail> {
                rs3
            });
        }
Exemplo n.º 2
0
        public CheckResult Check(CheckBase checkBase)
        {
            if (checkBase == null)
            {
                throw new ArgumentNullException(nameof(checkBase));
            }
            var httpCheck = checkBase as HttpCheck;

            if (httpCheck == null)
            {
                throw new ArgumentException("check is not of type HttpCall");
            }

            var result = HttpUtil.GetContentFromUrl(
                httpCheck.Url,
                httpCheck.ConnectTimeout,
                httpCheck.ReadTimeout,
                _readBufferSize,
                _connectSleepMilliseconds,
                httpCheck.MaxContentLength);

            var now = _timeService.UtcNow;
            var conditionResults = new List <ConditionResultDetail>();

            foreach (var conditionBase in httpCheck.Conditions)
            {
                var condition = (HttpCheckCondition)conditionBase;

                string checkMessage;
                switch (condition.Type)
                {
                case HttpCheckConditionType.Status:
                    checkMessage = CheckStatus(result, (HttpStatusCondition)condition);
                    break;

                case HttpCheckConditionType.Content:
                    checkMessage = CheckContent(result, (HttpContentCondition)condition);
                    break;

                // ReSharper disable once RedundantCaseLabel
                case HttpCheckConditionType.Undefined:
                default:
                    throw new ArgumentOutOfRangeException(nameof(checkBase), condition.Type, "condition has no type");
                }

                var conditionResult = new ConditionResultDetail(condition.Name, string.IsNullOrEmpty(checkMessage), checkMessage);
                conditionResults.Add(conditionResult);
                if (!conditionResult.Success && condition.StopOnFail)
                {
                    break;
                }
            }

            var outcome = conditionResults.All(c => c.Success) ? CheckOutcome.Success : CheckOutcome.Fail;

            return(new CheckResult(checkBase, now, outcome, conditionResults));
        }