public ICheckResult Check(ICheckConfiguration checkDetails) { var networkDetails = checkDetails as INetworkConfiguration; ICheckResult result = new CheckResult() { Title = networkDetails.Title }; //TODO: Network Check IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties(); IPEndPoint[] endPoints = ipProperties.GetActiveTcpListeners(); TcpConnectionInformation[] tcpConnections = ipProperties.GetActiveTcpConnections(); //Check Existing Connections bool connectionExists = false; foreach (var tcpConnection in tcpConnections) { if ((tcpConnection.LocalEndPoint.Address.Equals(IPAddress.Parse(networkDetails.HostName)) && tcpConnection.LocalEndPoint.Port == networkDetails.Port) || (tcpConnection.RemoteEndPoint.Address.Equals(IPAddress.Parse(networkDetails.HostName)) && tcpConnection.RemoteEndPoint.Port == networkDetails.Port)) { result.Status = tcpConnection.State == TcpState.Established ? CheckResultStatus.Up : CheckResultStatus.Down; connectionExists = true; break; } } Stopwatch timer = new Stopwatch(); //Attempt connection if (networkDetails.IsPersistentConnection && !connectionExists) { result.AdditionalInformation = "No Persistent connection found"; result.Status = CheckResultStatus.Down; } else if (!networkDetails.DontAttemptConnection) { if ((networkDetails.SupportsMultipleConnections && connectionExists) || !connectionExists) { using (var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) { try { timer.Start(); client.Connect(networkDetails.HostName, networkDetails.Port); timer.Stop(); result.TimeElasped = Convert.ToDouble(timer.ElapsedMilliseconds); result.Status = networkDetails.ResponseTime > result.TimeElasped ? CheckResultStatus.Up : CheckResultStatus.PerfomanceDegraded; } catch (SocketException ex) { timer.Stop(); result.TimeElasped = Convert.ToDouble(timer.ElapsedMilliseconds); result.AdditionalInformation = string.Format("{0} - {1}", ex.SocketErrorCode, ex.Message); result.Status = CheckResultStatus.Down; } } } } if (networkDetails.AfterCheckAction != null) { result = networkDetails.AfterCheckAction.Invoke(networkDetails, result); } return(result); }
public ICheckResult Check(ICheckConfiguration checkDetails) { var urlDetails = checkDetails as IUrlConfiguration; ICheckResult result = new CheckResult() { Title = urlDetails.Title }; Stopwatch timer = new Stopwatch(); try { //Open url HttpWebRequest request = HttpWebRequest.Create(urlDetails.Url) as HttpWebRequest; timer.Start(); HttpWebResponse response = request.GetResponse() as HttpWebResponse; timer.Stop(); result.TimeElasped = Convert.ToDouble(timer.ElapsedMilliseconds); if (response.StatusCode == HttpStatusCode.OK) { result.Status = urlDetails.ResponseTime > result.TimeElasped ? CheckResultStatus.Up : CheckResultStatus.PerfomanceDegraded; } else { result.AdditionalInformation = string.Format("{0} - {1}", response.StatusCode, response.StatusDescription); result.Status = CheckResultStatus.Down; } } catch (WebException ex) { Trace.TraceInformation("Error Occured In URL check " + ex.Message + ex.StackTrace); timer.Stop(); result.TimeElasped = Convert.ToDouble(timer.ElapsedMilliseconds); var response = ex.Response as HttpWebResponse; if (response != null) { result.AdditionalInformation = string.Format("{0} - {1}", response.StatusCode, response.StatusDescription); } else { result.AdditionalInformation = string.Format("Error: {0} - {1}", ex.Message, ex.Status); } result.Status = CheckResultStatus.Down; } if (urlDetails.AfterCheckAction != null) { result = urlDetails.AfterCheckAction.Invoke(urlDetails, result); } // Trace.TraceInformation("Return result " +result); return(result); }