Example #1
0
        public void UpdateStatistics(SessionPanel sessionPanel, PingSession pingSession)
        {
            sessionPanel.HostLabel.Text       = pingSession.Host;
            sessionPanel.TitleLabel.Text      = pingSession.Title;
            sessionPanel.PacketLossLabel.Text = pingSession.PacketLostPercent.ToString() + "%";

            if (pingSession.PacketLostPercent < 100)
            {
                ICMPReply lastReply = pingSession.ReplyQueue.Last();

                if (lastReply.Status == System.Net.NetworkInformation.IPStatus.Success)
                {
                    sessionPanel.LastDelayLabel.Text = lastReply.RoundtripTime.ToString() + "ms";
                }
                else
                {
                    sessionPanel.LastDelayLabel.Text = lastReply.Status.ToString();
                }

                sessionPanel.AvgLabel.Text    = pingSession.AverageLatency.ToString() + " ms";
                sessionPanel.MaxLabel.Text    = pingSession.MaxLatency.ToString() + " ms";
                sessionPanel.MinLabel.Text    = pingSession.MinLatency.ToString() + " ms";
                sessionPanel.JitterLabel.Text = pingSession.Jitter.ToString() + " ms";
            }
            else
            {
                sessionPanel.LastDelayLabel.Text = pingSession.ReplyQueue.Last().Status.ToString();
                sessionPanel.AvgLabel.Text       = "N/A";
                sessionPanel.MaxLabel.Text       = "N/A";
                sessionPanel.MinLabel.Text       = "N/A";
                sessionPanel.JitterLabel.Text    = "N/A";
            }
        }
Example #2
0
        private void UpdateLatencyChart(SessionPanel sessionPanel, PingSession pingSession)
        {
            sessionPanel.LatencyChart.Series.Clear();

            var series = new Series();

            series.Name = "latency";

            series.ChartType = SeriesChartType.Area;

            var chartArea = new ChartArea();

            chartArea.AxisX.LabelStyle.Enabled = false;

            List <int>  xvals = new List <int>();
            List <long> yvals = new List <long>();

            int i = 0;

            foreach (ICMPReply reply in pingSession.ReplyQueue)
            {
                xvals.Add(i);
                i++;
                yvals.Add(reply.RoundtripTime);
            }

            sessionPanel.LatencyChart.Series.Add(series);

            sessionPanel.LatencyChart.Series["latency"].Points.DataBindXY(xvals, yvals);
            sessionPanel.LatencyChart.Invalidate();
        }
Example #3
0
 public void UpdateSessionPanel(SessionPanel sessionPanel, PingSession pingSession)
 {
     if (InvokeRequired)
     {
         this.BeginInvoke(new UpdateSessionPanelDelegate(UpdateSessionPanel), sessionPanel, pingSession);
     }
     else
     {
         UpdateStatistics(sessionPanel, pingSession);
         UpdateLatencyChart(sessionPanel, pingSession);
     }
 }
Example #4
0
        public static async Task <PingSession> StartAsync(PingRequestOptions options)
        {
            var pingRequestAgent        = new PingRequestAgent();
            var cancellationTokenSource = new CancellationTokenSource();

            Console.CancelKeyPress += (sender, e) =>
            {
                e.Cancel = true;
                cancellationTokenSource.Cancel();
            };

            PingSession results = null;

            if (options.NumberOfPings != -1)
            {
                await AnsiConsole.Progress()
                .Columns(new ProgressColumn[]
                {
                    new TaskDescriptionColumn(),
                    new ProgressBarColumn(),
                    new PercentageColumn(),
                    new RemainingTimeColumn()
                })
                .StartAsync(async ctx =>
                {
                    var requestsRemaining = ctx.AddTask($"Sending {options.NumberOfPings} pings to [yellow]{options.Address}[/]", new ProgressTaskSettings
                    {
                        MaxValue = options.NumberOfPings
                    });
                    pingRequestAgent.PingCompleted += (sender, e) =>
                    {
                        requestsRemaining.Increment(1);
                    };

                    results = await pingRequestAgent.StartAsync(options, cancellationTokenSource.Token);
                });
            }
            else
            {
                await AnsiConsole.Status()
                .Spinner(Spinner.Known.Dots8Bit)
                .StartAsync($"Pinging {options.Address}...", async ctx =>
                {
                    pingRequestAgent.PingCompleted += (sender, e) =>
                    {
                        if (e.CompletedPing.Status != IPStatus.Success)
                        {
                            AnsiConsole.MarkupLine("[grey54]{0:yyyy-MM-ddTHH:mm:ss}: {1}[/]", e.CompletedPing.RequestTime, e.CompletedPing.Status);
                        }

                        var packetsLostColour = "grey54";
                        if (e.Session.PacketsLostPercentage > 5)
                        {
                            packetsLostColour = "red";
                        }
                        else if (Math.Round(e.Session.PacketsLostPercentage, 2) > 0)
                        {
                            packetsLostColour = "maroon";
                        }

                        ctx.Status($"Continuously pinging [yellow]{options.Address}[/] [grey54]({e.Session.PacketsSent} sent, [{packetsLostColour}]{e.Session.PacketsLostPercentage:0.00}% lost[/], {e.Session.AverageRoundtrip}ms average, {(int)e.Session.Elapsed.TotalMinutes}:{e.Session.Elapsed.Seconds:00} elapsed)[/]");
                    };

                    results = await pingRequestAgent.StartAsync(options, cancellationTokenSource.Token);
                });
            }


            if (results != null && results.PacketsSent > 0)
            {
                AnsiConsole.WriteLine();
                AnsiConsole.Render(new Rule($"[white]Ping results for [yellow]{options.Address}[/][/]").RuleStyle("grey54"));
                AnsiConsole.WriteLine();

                var table = new Table()
                            .Centered()
                            .AddColumns(
                    new TableColumn("Packets (Sent/Received/Lost)").Centered(),
                    new TableColumn("Minimum Roundtrip").Centered(),
                    new TableColumn("Maximum Roundtrip").Centered(),
                    new TableColumn("Average Roundtrip").Centered(),
                    new TableColumn("Elapsed Time").Centered()
                    )
                            .SimpleBorder();

                table.AddRow(
                    $"{results.PacketsSent} / {results.PacketsReceived} / {results.PacketsLost}",
                    results.MinimumRoundtrip.ToString("0ms"),
                    results.MaximumRoundtrip.ToString("0ms"),
                    results.AverageRoundtrip.ToString("0ms"),
                    $"{(int)results.Elapsed.TotalMinutes}:{results.Elapsed.Seconds:00}"
                    );

                AnsiConsole.Render(table);
            }
            else
            {
                AnsiConsole.WriteLine("No results available.");
            }

            AnsiConsole.WriteLine();

            return(results);
        }