view ServerMonitor/Objects/Checks/PingCheck.cs @ 17:68d7834dc28e

More comments.
author Brad Greco <brad@bgreco.net>
date Sat, 25 May 2019 15:14:26 -0400
parents 453ecc1ed9ea
children
line wrap: on
line source

´╗┐using System.ComponentModel;
using System.Net.NetworkInformation;
using System.Threading;
using System.Threading.Tasks;

namespace ServerMonitorApp
{
    /// <summary>Checks that a server responds to ping.</summary>
    [DisplayName("Ping check"), Description("Check if the server responds to a ping request"), DisplayWeight(0)]
    public class PingCheck : Check
    {
        /// <summary>Sends a ping and waits for a response.</summary>
        protected async override Task<CheckResult> ExecuteCheckAsync(CancellationToken token)
        {
            using (Ping ping = new Ping())
            {
                try
                {
                    PingReply reply = await ping.SendPingAsync(Server.Host, Timeout);
                    if (reply.Status == IPStatus.Success)
                        return Pass(string.Format("Reply received in {0} ms", reply.RoundtripTime));
                    else
                        return Fail("Ping result: " + reply.Status);
                }
                catch (PingException e)
                {
                    return Fail(e);
                }
            }
        }
    }
}