annotate ServerMonitor/Objects/Checks/Check.cs @ 19:b3128fe10d57

Add About form and license.
author Brad Greco <brad@bgreco.net>
date Wed, 29 May 2019 20:18:37 -0400
parents 7626b099aefd
children 7645122aa7a9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
1 using System;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
2 using System.Linq;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
3 using System.Text;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
4 using System.Text.RegularExpressions;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
5 using System.Threading;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
6 using System.Threading.Tasks;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
7 using System.Xml.Serialization;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
8
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
9 namespace ServerMonitorApp
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
10 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
11 /// <summary>The possible statuses of a check.</summary>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
12 /// <remarks>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
13 /// The integer values of the "completed" statuses (Success, Information,
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
14 /// Warning, Error) are in ascending order of severity.
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
15 /// </remarks>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
16 public enum CheckStatus
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
17 {
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
18 Success,
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
19 Information,
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
20 Warning,
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
21 Error,
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
22 Running,
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
23 Disabled,
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
24 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
25
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
26 /// <summary>Base class for checks that run against a server and return a result status.</summary>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
27 public abstract class Check
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
28 {
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
29 private static Type[] _checkTypes;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
30
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
31 public static Type[] CheckTypes
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
32 {
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
33 get
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
34 {
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
35 return _checkTypes ?? (_checkTypes = typeof(Check).Assembly.GetTypes()
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
36 .Where(t => t.IsSubclassOf(typeof(Check)))
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
37 .OrderBy(t => t.GetAttribute<DisplayWeightAttribute>()?.DisplayWeight).ToArray());
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
38 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
39 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
40
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
41 /// <summary>The internal ID of the check.</summary>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
42 public int Id { get; set; }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
43
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
44 /// <summary>The display name check.</summary>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
45 public string Name { get; set; }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
46
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
47 /// <summary>The number of milliseconds the check must complete in before reporting failure.</summary>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
48 public int Timeout { get; set; }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
49
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
50 /// <summary>Whether the check will be executed on a schedule.</summary>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
51 public bool Enabled { get; set; }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
52
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
53 /// <summary>The schedule when the check will be executed.</summary>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
54 public Schedule Schedule { get; set; }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
55
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
56 /// <summary>The date and time the check was last executed.</summary>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
57 public DateTime LastRunTime { get; set; }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
58
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
59 /// <summary>The date and time the check was last executed on its schedule.</summary>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
60 public DateTime LastScheduledRunTime { get; set; }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
61
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
62 /// <summary>The date and time the check is currently scheduled to execute next.</summary>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
63 public DateTime NextRunTime { get; set; }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
64
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
65 /// <summary>The text output of the last execution of the check.</summary>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
66 public string LastMessage { get; set; }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
67
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
68 /// <summary>The current status of the check.</summary>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
69 public CheckStatus Status { get; set; }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
70
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
71 /// <summary>The status of the last check execution.</summary>
4
3142e52cbe69 Lots more progress
Brad Greco <brad@bgreco.net>
parents: 2
diff changeset
72 public CheckStatus LastRunStatus { get; set; }
3142e52cbe69 Lots more progress
Brad Greco <brad@bgreco.net>
parents: 2
diff changeset
73
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
74 /// <summary>The severity level reported when the check execution fails.</summary>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
75 public CheckStatus FailStatus { get; set; }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
76
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
77 /// <summary>The number of consecutive failed executions before the check begins reporting failure.</summary>
8
052aa62cb42a Single instance. Add autorun option. Add icons. General enhancements.
Brad Greco <brad@bgreco.net>
parents: 4
diff changeset
78 public int MaxConsecutiveFailures { get; set; }
052aa62cb42a Single instance. Add autorun option. Add icons. General enhancements.
Brad Greco <brad@bgreco.net>
parents: 4
diff changeset
79
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
80 /// <summary>The current number of consecutive times the check has failed.</summary>
8
052aa62cb42a Single instance. Add autorun option. Add icons. General enhancements.
Brad Greco <brad@bgreco.net>
parents: 4
diff changeset
81 [XmlIgnore]
052aa62cb42a Single instance. Add autorun option. Add icons. General enhancements.
Brad Greco <brad@bgreco.net>
parents: 4
diff changeset
82 public int ConsecutiveFailures { get; set; }
052aa62cb42a Single instance. Add autorun option. Add icons. General enhancements.
Brad Greco <brad@bgreco.net>
parents: 4
diff changeset
83
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
84 /// <summary>The server the check belongs to.</summary>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
85 [XmlIgnore]
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
86 public Server Server { get; set; }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
87
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
88 /// <summary>Check constructor.</summary>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
89 public Check()
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
90 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
91 // Set the default failure severity to Error.
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
92 FailStatus = CheckStatus.Error;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
93 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
94
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
95 /// <summary>Displays the check name.</summary>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
96 public override string ToString()
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
97 {
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
98 return Name;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
99 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
100
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
101 /// <summary>Validates the check.</summary>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
102 /// <param name="saving">
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
103 /// Whether the check is being saved.
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
104 /// Checks are validated before being saved and before being executed. This parameter allows
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
105 /// them to distinguish between these cases.
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
106 /// </param>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
107 /// <returns>An empty string if the check is valid, or the reason the check is invalid.</returns>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
108 public virtual string Validate(bool saving = true)
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
109 {
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
110 string message = string.Empty;
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
111 // Allow blank names if the check is being executed before saving.
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
112 // This lets the user create a check and tinker with it without
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
113 // needing to type a name unless they want to save it.
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
114 if (Name.IsNullOrEmpty() && saving)
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
115 message += "Name cannot be blank." + Environment.NewLine;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
116 return message;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
117 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
118
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
119 /// <summary>Executes the check asynchronously.</summary>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
120 /// <param name="token">A token for cancelling the execution.</param>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
121 /// <param name="update">Whether the check status and last execution time should be updated when the check completes.</param>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
122 /// <returns>The result of the check execution.</returns>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
123 public async Task<CheckResult> ExecuteAsync(CancellationToken token = default(CancellationToken), bool update = true)
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
124 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
125 // Do nothing if the check has already been cancelled.
4
3142e52cbe69 Lots more progress
Brad Greco <brad@bgreco.net>
parents: 2
diff changeset
126 if (token.IsCancellationRequested)
3142e52cbe69 Lots more progress
Brad Greco <brad@bgreco.net>
parents: 2
diff changeset
127 return null;
3142e52cbe69 Lots more progress
Brad Greco <brad@bgreco.net>
parents: 2
diff changeset
128
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
129 CheckResult result;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
130 DateTime startTime = DateTime.Now;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
131 try
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
132 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
133 // Execute the check.
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
134 Task<CheckResult> checkTask = ExecuteCheckAsync(token);
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
135 try
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
136 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
137 // Wait for the check to complete or timeout, whichever happens first.
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
138 if (await Task.WhenAny(checkTask, Task.Delay(Timeout, token)) == checkTask)
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
139 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
140 // If the check completed before timing out, retrieve the result.
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
141 result = await checkTask;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
142 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
143 else
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
144 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
145 // If the check timed out before completing, report failure.
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
146 result = Fail("Timed out.");
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
147 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
148 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
149 catch (TaskCanceledException)
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
150 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
151 // If the check was cancelled, do not return a result so it will not be logged.
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
152 return null;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
153 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
154 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
155 catch (Exception e)
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
156 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
157 // If the execution threw an exception, report the exception as a failure.
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
158 result = Fail(e.GetBaseException().Message);
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
159 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
160 result.StartTime = startTime;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
161 result.EndTime = DateTime.Now;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
162 if (update)
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
163 {
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
164 Status = result.CheckStatus;
4
3142e52cbe69 Lots more progress
Brad Greco <brad@bgreco.net>
parents: 2
diff changeset
165 LastRunStatus = result.CheckStatus;
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
166 LastMessage = result.Message;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
167 LastRunTime = result.EndTime;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
168 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
169 return result;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
170 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
171
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
172 /// <summary>Generates a successful check result.</summary>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
173 /// <param name="message">The execution result message.</param>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
174 /// <returns>A successful check result.</returns>
2
453ecc1ed9ea Disk space check
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
175 public CheckResult Pass(string message)
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
176 {
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
177 return new CheckResult(this, CheckStatus.Success, message);
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
178 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
179
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
180 /// <summary>Generates a failed check result.</summary>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
181 /// <param name="message">The execution result message.</param>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
182 /// <returns>A failed check result.</returns>
2
453ecc1ed9ea Disk space check
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
183 public CheckResult Fail(string message)
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
184 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
185 // The severity is controlled by the check's FailStatus setting.
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
186 return new CheckResult(this, FailStatus, message);
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
187 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
188
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
189 /// <summary>Generates a failed check result from an exception.</summary>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
190 /// <param name="e">The exception that caused the failure.</param>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
191 /// <returns>A failed check result.</returns>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
192 protected CheckResult Fail(Exception e)
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
193 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
194 return Fail(e.GetBaseException().Message);
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
195 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
196
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
197 /// <summary>Generates a check result by comparing integer values for equality.</summary>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
198 /// <param name="expectedValue">The expected result value.</param>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
199 /// <param name="resultValue">The actual result value generated by the check execution.</param>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
200 /// <param name="description">Description of what the integer represents to use in the check result message. Example: "Exit code".</param>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
201 /// <returns>A successful check result if the values are equal, or a failed check result if they are unequal.</returns>
2
453ecc1ed9ea Disk space check
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
202 protected CheckResult GetIntResult(int expectedValue, int resultValue, string description)
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
203 {
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
204 if (expectedValue == resultValue)
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
205 return Pass(string.Format("{0}: {1}", description, resultValue));
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
206 else
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
207 return Fail(string.Format("{0}: {1} (expected: {2})", description, resultValue, expectedValue));
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
208 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
209
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
210 /// <summary>Generates a check result by comparing string values.</summary>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
211 /// <param name="matchType">The comparison that will be used on the strings.</param>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
212 /// <param name="expectedPattern">The expected pattern to test the result against.</param>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
213 /// <param name="useRegex">Whether the expected pattern should be treated as a regular expression.</param>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
214 /// <param name="resultValue">The actual result value generated by the check execution.</param>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
215 /// <param name="description">Description of what the string represents to use in the check result message.</param>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
216 /// <returns>A successful check result if the string comparison succeeds, or a failed check result if it fails.</returns>
2
453ecc1ed9ea Disk space check
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
217 protected CheckResult GetStringResult(MatchType matchType, string expectedPattern, bool useRegex, string resultValue, string description)
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
218 {
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
219 bool match;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
220 if (useRegex)
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
221 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
222 // If the match type is equals or not equals, modify the regex by
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
223 // adding beginning and ending anchors if not already present
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
224 // to prevent partial matches.
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
225 if (matchType.In(MatchType.Equals, MatchType.NotEquals))
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
226 {
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
227 if (!expectedPattern.StartsWith("^"))
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
228 expectedPattern = "^" + expectedPattern;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
229 if (!expectedPattern.EndsWith("$"))
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
230 expectedPattern += "$";
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
231 }
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
232 // Execute the regex.
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
233 Regex re = new Regex(expectedPattern, RegexOptions.Singleline);
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
234 match = re.IsMatch(resultValue);
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
235 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
236 else
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
237 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
238 // Simple string comparisons.
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
239 if (matchType.In(MatchType.Equals, MatchType.NotEquals))
1
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
240 {
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
241 match = expectedPattern == resultValue;
1
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
242 }
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
243 else if (matchType.In(MatchType.Contains, MatchType.NotContains))
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
244 {
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
245 match = resultValue.Contains(expectedPattern);
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
246 }
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
247 else
1
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
248 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
249 // If the match type is greater or less than, the values must be numeric.
1
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
250 if (decimal.TryParse(expectedPattern, out decimal expectedNumeric) &&
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
251 decimal.TryParse(resultValue, out decimal resultNumeric))
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
252 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
253 // Compare the resulting decimals.
1
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
254 match = (matchType == MatchType.GreaterThan && resultNumeric > expectedNumeric) ||
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
255 (matchType == MatchType.LessThan && resultNumeric < expectedNumeric);
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
256 }
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
257 else
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
258 {
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
259 return Fail(string.Format("{0} is not numeric: {1}", description, resultValue));
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
260 }
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
261 }
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
262 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
263
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
264 // We have determined whether the result value matches the expected pattern.
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
265 // Generate a check result accordingly.
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
266 if (matchType.In(MatchType.Equals, MatchType.Contains))
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
267 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
268 // Equals, Contains: the strings are supposed to match.
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
269 if (match)
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
270 return Pass(string.Format("{0} {1} the pattern: {2}", description, matchType.ToString().ToLower(), expectedPattern));
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
271 else
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
272 return Fail(string.Format("{0} does not {1} the pattern: {2} ({0}: {3})", description, matchType.ToString().ToLower().TrimEnd('s'), expectedPattern, resultValue));
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
273 }
1
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
274 else if (matchType.In(MatchType.NotEquals, MatchType.NotContains))
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
275 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
276 // NotEquals, NotContains: the strings are not supposed to match.
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
277 // So, fail if they do match and pass if they do not.
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
278 if (match)
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
279 return Fail(string.Format("{0} {1} the pattern: {2} ({0}: {3})", description, matchType.ToString().ToLower().Replace("not", ""), expectedPattern, resultValue));
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
280 else
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
281 return Pass(string.Format("{0} does not {1} the pattern: {2}", description, matchType.ToString().ToLower().TrimEnd('s').Replace("not", ""), expectedPattern));
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
282 }
1
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
283 else
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
284 {
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
285 // GreaterThan, LessThan
1
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
286 if (match)
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
287 return Pass(string.Format("{0} ({1}) is {2} {3}", description, resultValue, matchType.ToString().ToLower().Replace("than", " than"), expectedPattern));
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
288 else
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
289 return Fail(string.Format("{0} ({1}) is not {2} {3}", description, resultValue, matchType.ToString().ToLower().Replace("than", " than"), expectedPattern));
9e92780ebc0f Additional validation for SSH check
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
290 }
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
291 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
292
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
293 /// <summary>Merges multiple execution results.</summary>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
294 /// <param name="results">The results to merge.</param>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
295 /// <returns>A single result containing the messages of all the input results, and a failure status if any of the input results failed.</returns>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
296 /// <remarks>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
297 /// Some checks may want to run several tests on the result of a remote command.
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
298 /// After collecting their results, they can use this method to combine them into
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
299 /// a single result that will be reported to the user.
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
300 /// </remarks>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
301 protected CheckResult MergeResults(params CheckResult[] results)
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
302 {
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
303 StringBuilder message = new StringBuilder();
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
304 bool failed = false;
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
305 foreach (CheckResult result in results)
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
306 {
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
307 if (result == null)
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
308 continue;
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
309 // Report failure if any of the results has failed.
4
3142e52cbe69 Lots more progress
Brad Greco <brad@bgreco.net>
parents: 2
diff changeset
310 if (result.Failed)
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
311 failed = true;
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
312 // Merge the result messages.
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
313 message.AppendLine(result.Message);
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
314 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
315 return failed ? Fail(message.ToString().Trim()) : Pass(message.ToString().Trim());
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
316 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
317
16
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
318 /// <summary>Executes the check asynchronously.</summary>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
319 /// <param name="token">A token for cancelling the execution.</param>
7626b099aefd More comments.
Brad Greco <brad@bgreco.net>
parents: 8
diff changeset
320 /// <returns>The result of the check execution.</returns>
0
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
321 protected abstract Task<CheckResult> ExecuteCheckAsync(CancellationToken token);
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
322 }
3e1a2131f897 Initial commit. Ping check, scheduling, UI working. SSH check mostly working.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
323 }