private static void LogPingResult(PingResult dnsResult, PingResult tcpResult) { //Submit metrics to AppInsights for outcome (success=1 / failure=0) and response time for Dns lookup and Tcp port ping var telemetry = new TelemetryClient(); telemetry.TrackMetric("NetDnsHealth_" + dnsResult.EndPoint.Replace(":", "_"), dnsResult.IsSuccess); telemetry.TrackMetric("NetDnsTime_" + dnsResult.EndPoint.Replace(":", "_"), dnsResult.Value); telemetry.TrackMetric("NetTcpHealth_" + tcpResult.EndPoint.Replace(":", " "), tcpResult.IsSuccess); telemetry.TrackMetric("NetTcpTime_" + tcpResult.EndPoint.Replace(":", "_"), tcpResult.Value); }
private void RunPingTarget(string DestinationHost, int port) { Stopwatch timeKeeper = new Stopwatch(); IPAddress lastKnownAddress = null; IPAddress resolvedAddress = null; bool isDestinationAnIpAddress = false; DateTime TimeStamp = DateTime.UtcNow; int dnsResult = 0; long dnsDuration = 0; int tcpResult = 0; long tcpDuration = 0; isDestinationAnIpAddress = IPAddress.TryParse(DestinationHost, out lastKnownAddress); // DNS lookup if (isDestinationAnIpAddress) { dnsResult = 1; dnsDuration = 0; } else { TimeStamp = DateTime.UtcNow; timeKeeper.Start(); resolvedAddress = null; try { foreach (IPAddress Address in Dns.GetHostEntry(DestinationHost).AddressList) { // Check if it is v4 if (Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { resolvedAddress = Address; } } if (resolvedAddress != null) { lastKnownAddress = resolvedAddress; } dnsResult = 1; } catch { dnsResult = 0; dnsDuration = 0; } timeKeeper.Stop(); dnsDuration = timeKeeper.ElapsedMilliseconds; timeKeeper.Reset(); } // TCP Lookup timeKeeper.Start(); try { using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) { // Connect to configured TCP port var asyncResult = s.BeginConnect(new IPEndPoint(lastKnownAddress, port), (result) => { return; }, null); try { asyncResult.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(5)); if (!s.Connected) { tcpResult = 0; tcpDuration = 0; } else { tcpResult = 1; } } catch (Exception ex) { LogException(ex); tcpResult = 0; tcpDuration = 0; } finally { if (s.Connected) { s.Disconnect(true); } } } } catch (Exception exception) { LogException(exception); tcpResult = 0; tcpDuration = 0; } timeKeeper.Stop(); tcpDuration = timeKeeper.ElapsedMilliseconds; timeKeeper.Reset(); /* Populate DNSLookup Result */ PingResult pDnsResult = new PingResult(); pDnsResult.EndPoint = DestinationHost + "_" + port.ToString(); pDnsResult.IsSuccess = dnsResult; pDnsResult.Value = dnsDuration; /* Populate TCPLookup Result */ PingResult pTcpResult = new PingResult(); pTcpResult.EndPoint = DestinationHost + "_" + port.ToString(); pTcpResult.IsSuccess = tcpResult; pTcpResult.Value = tcpDuration; /* Push data to Application Insights */ LogPingResult(pDnsResult, pTcpResult); }
private static void LogPingResult(PingResult dnsResult, PingResult tcpResult) { //Submit metrics to AppInsights for outcome (success=1 / failure=0) and response time for Dns lookup and Tcp port ping var telemetry = new TelemetryClient(); telemetry.TrackMetric("NetDnsHealth_" + dnsResult.EndPoint.Replace(":", "_") ,dnsResult.IsSuccess); telemetry.TrackMetric("NetDnsTime_" + dnsResult.EndPoint.Replace(":", "_") ,dnsResult.Value); telemetry.TrackMetric("NetTcpHealth_" + tcpResult.EndPoint.Replace(":", " ") ,tcpResult.IsSuccess); telemetry.TrackMetric("NetTcpTime_" + tcpResult.EndPoint.Replace(":", "_") ,tcpResult.Value); }