view ServerMonitor/Objects/Checks/HttpCheck.cs @ 3:96f0b028176d

File check
author Brad Greco <brad@bgreco.net>
date Fri, 11 Jan 2019 22:34:18 -0500
parents 453ecc1ed9ea
children 68d7834dc28e
line wrap: on
line source

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;

namespace ServerMonitorApp
{
    [DisplayName("HTTP check"), Description("Check the result of an HTTP request"), DisplayWeight(1)]
    public class HttpCheck : Check
    {
        public string Url { get; set; }

        public bool CheckResponseCode { get; set; }

        public int ResponseCode { get; set; }

        public bool CheckResponseLength { get; set; }

        public string ResponseLengthMin { get; set; }

        public string ResponseLengthMax { get; set; }

        public bool CheckResponseBody { get; set; }

        public MatchType ResponseBodyMatchType { get; set; }

        public string ResponseBodyPattern { get; set; }

        public bool ResponseBodyUseRegex { get; set; }

        protected override Task<CheckResult> ExecuteCheckAsync(CancellationToken token)
        {
            throw new NotImplementedException();
        }

        public override string Validate(bool saving = true)
        {
            string message = base.Validate();
            if (Url.IsNullOrEmpty())
                message += "URL cannot be blank." + Environment.NewLine;
            if (!CheckResponseCode && !CheckResponseLength && !CheckResponseBody)
                message += "At least one check must be enabled." + Environment.NewLine;
            if (CheckResponseBody && ResponseBodyUseRegex)
            {
                try
                {
                    Regex re = new Regex(ResponseBodyPattern);
                }
                catch (ArgumentException)
                {
                    message += "Invalid regular expression for response body." + Environment.NewLine;
                }
            }
            return message;
        }

        //protected override CheckResult GetIntResult(int expectedValue, int resultValue, string description)
        //{
        //    CheckResult result = base.GetIntResult(expectedValue, resultValue, description);

        //}

/*
100   Continue[RFC7231, Section 6.2.1]
101   Switching Protocols[RFC7231, Section 6.2.2]
102   Processing[RFC2518]
103   Early Hints[RFC8297]
200   OK[RFC7231, Section 6.3.1]
201   Created[RFC7231, Section 6.3.2]
202   Accepted[RFC7231, Section 6.3.3]
203   Non-Authoritative Information[RFC7231, Section 6.3.4]
204   No Content[RFC7231, Section 6.3.5]
205   Reset Content[RFC7231, Section 6.3.6]
206   Partial Content[RFC7233, Section 4.1]
207   Multi-Status[RFC4918]
208   Already Reported[RFC5842]
226   IM Used[RFC3229]
300   Multiple Choices[RFC7231, Section 6.4.1]
301   Moved Permanently[RFC7231, Section 6.4.2]
302   Found[RFC7231, Section 6.4.3]
303   See Other[RFC7231, Section 6.4.4]
304   Not Modified[RFC7232, Section 4.1]
305   Use Proxy[RFC7231, Section 6.4.5]
306   (Unused)[RFC7231, Section 6.4.6]
307   Temporary Redirect[RFC7231, Section 6.4.7]
308   Permanent Redirect[RFC7538]
400   Bad Request[RFC7231, Section 6.5.1]
401   Unauthorized[RFC7235, Section 3.1]
402   Payment Required[RFC7231, Section 6.5.2]
403   Forbidden[RFC7231, Section 6.5.3]
404   Not Found[RFC7231, Section 6.5.4]
405   Method Not Allowed[RFC7231, Section 6.5.5]
406   Not Acceptable[RFC7231, Section 6.5.6]
407   Proxy Authentication Required[RFC7235, Section 3.2]
408   Request Timeout[RFC7231, Section 6.5.7]
409   Conflict[RFC7231, Section 6.5.8]
410   Gone[RFC7231, Section 6.5.9]
411   Length Required[RFC7231, Section 6.5.10]
412   Precondition Failed[RFC7232, Section 4.2][RFC8144, Section 3.2]
413   Payload Too Large[RFC7231, Section 6.5.11]
414   URI Too Long[RFC7231, Section 6.5.12]
415   Unsupported Media Type[RFC7231, Section 6.5.13][RFC7694, Section 3]
416   Range Not Satisfiable[RFC7233, Section 4.4]
417   Expectation Failed[RFC7231, Section 6.5.14]
421   Misdirected Request[RFC7540, Section 9.1.2]
422   Unprocessable Entity[RFC4918]
423   Locked[RFC4918]
424   Failed Dependency[RFC4918]
425   Too Early[RFC8470]
426   Upgrade Required[RFC7231, Section 6.5.15]
427   Unassigned
428   Precondition Required[RFC6585]
429   Too Many Requests[RFC6585]
430   Unassigned
431   Request Header Fields Too Large[RFC6585]
451   Unavailable For Legal Reasons[RFC7725]
500   Internal Server Error[RFC7231, Section 6.6.1]
501   Not Implemented[RFC7231, Section 6.6.2]
502   Bad Gateway[RFC7231, Section 6.6.3]
503   Service Unavailable[RFC7231, Section 6.6.4]
504   Gateway Timeout[RFC7231, Section 6.6.5]
505   HTTP Version Not Supported[RFC7231, Section 6.6.6]
506   Variant Also Negotiates[RFC2295]
507   Insufficient Storage[RFC4918]
508   Loop Detected[RFC5842]
509   Unassigned
510   Not Extended[RFC2774]
511   Network Authentication Required[RFC6585]
*/
    }
}