Example #1
0
        private static HttpCheck CompleteHttpCheck(
            XPathNavigator crt,
            long id,
            Environment environment,
            Service service,
            TimeSpan interval,
            int?maxContentLength)
        {
            var method         = crt.GetEnumAttributeValue <HttpCheck.HttpMethod>("method");
            var url            = crt.GetUriAttributeValue("url");
            var connectTimeout = crt.GetTimeSpanAttributeValue("connectTimeout");
            var readTimeout    = crt.GetTimeSpanAttributeValue("readTimeout");

            if (method == null)
            {
                throw new InvalidDataException("HttpCall check is missing/has invalid the (HTTP) method");
            }
            if (url == null)
            {
                throw new InvalidDataException("HttpCall check is missing/has invalid its URL");
            }
            if (connectTimeout + readTimeout > interval)
            {
                throw new InvalidDataException("the combined timeouts cannot be larger than the check interval");
            }

            var conditions     = new List <HttpCheckCondition>();
            var conditionsNode = crt.SelectSingleNode("conditions");

            conditionsNode.MoveToFirstChild();
            do
            {
                if (conditionsNode.NodeType != XPathNodeType.Element)
                {
                    continue;
                }
                var conditionsClone  = conditionsNode.Clone();
                var conditionType    = conditionsClone.Name;
                var attributeStrings = new List <KeyValuePair <string, string> >();
                var value            = conditionsClone.Value;
                if (conditionsClone.HasAttributes)
                {
                    if (conditionsClone.MoveToFirstAttribute())
                    {
                        do
                        {
                            attributeStrings.Add(new KeyValuePair <string, string>(conditionsClone.Name, conditionsClone.Value));
                        } while (conditionsClone.MoveToNextAttribute());
                    }
                }
                var condition = GetCondition(conditionType, attributeStrings, value);
                conditions.Add(condition);
            } while (conditionsNode.MoveToNext());

            var roConditions = conditions.AsReadOnly();
            var check        = new HttpCheck(
                id,
                environment,
                service,
                interval,
                url,
                roConditions,
                method.Value,
                connectTimeout,
                readTimeout,
                maxContentLength ?? HttpCheck.DefaultMaxContentLength);

            return(check);
        }