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);
        }
Exemple #2
0
        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);
        }