diff ServerMonitor/Objects/HttpCheck.cs @ 0:3e1a2131f897

Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
author Brad Greco <brad@bgreco.net>
date Mon, 31 Dec 2018 18:32:14 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ServerMonitor/Objects/HttpCheck.cs	Mon Dec 31 18:32:14 2018 -0500
@@ -0,0 +1,135 @@
+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]
+*/
+    }
+}