// This callback will run after each ping iteration // This is technically our main update loop for the graph private void OnPingResultsUpdateCallback(PingResults r) { // Make sure we're not updating the display too frequently if (!_displayUpdateLimiter.RequestRun()) { return; } int scalePrevious = _scale; // Reset position Console.CursorTop = _plotStartY; Console.CursorLeft = _plotStartX; // Update labels UpdateLegend(r); // Get results from ping and add to graph AddResponseToGraph(r.CurrTime); // Draw graph columns DrawColumns(); // Only draw the y axis labels if the scale has changed if (scalePrevious != _scale) { DrawYAxisLabels(); } Console.CursorTop = EndCursorPosY; }
/// <summary> /// Starts the pinging cycle. /// </summary> private void startPinging() { chartPing.Series["Series1"].Points.Clear(); buttonStartStop.Text = "Stop"; PingResults = new PingResults(); textBoxStartTime.Text = PingResults.StartTime.ToString(); textBoxEndTime.Text = ""; if (backgroundWorker.IsBusy != true) { backgroundWorker.RunWorkerAsync(); } }
public MainForm() { InitializeComponent(); Config = new Config(); backgroundWorker.WorkerReportsProgress = true; backgroundWorker.WorkerSupportsCancellation = true; backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork); PingResults = new PingResults(); Pinging = false; initializeDialogs(); }
public async Task <IActionResult> CheckInternet() { var client = _clientFactory.CreateClient(); var googleRequest = await client.GetAsync("https://www.google.com/"); var netflixRequest = await client.GetAsync("https://www.netflix.com/"); var stofaRequest = await client.GetAsync("https://stofa.dk/"); var results = new PingResults { GoogleHttp = googleRequest.StatusCode, NetflixHttp = netflixRequest.StatusCode, StofaHttp = stofaRequest.StatusCode }; if (!googleRequest.IsSuccessStatusCode || !netflixRequest.IsSuccessStatusCode || !stofaRequest.IsSuccessStatusCode) { return(StatusCode(StatusCodes.Status500InternalServerError, results)); } return(Ok(results)); }
public PingPanelViewModel() { StartPing = ReactiveCommand.CreateFromObservable(() => { PingResults.Clear(); return(PingHost(_hostName).TakeUntil(StopPing)); }); StopPing = ReactiveCommand.Create(() => Unit.Default); _mostRecentPingResult = Observable.Merge( _pingResults.ItemsAdded, StopPing.Select(_ => ""), this.WhenAnyValue(vm => vm.HostName).WhereNotNull().Select(_ => "")) .ToProperty(this, vm => vm.MostRecentPingResult); this.WhenActivated(disposables => { StartPing .Do(pingMessage => PingResults.Insert(0, pingMessage)) .Subscribe() .DisposeWith(disposables); this .WhenAnyValue(vm => vm.IsPinging) .Where(false) .Subscribe(_ => IsShowingPingResultDetails = false) .DisposeWith(disposables); Observable.Merge <(string Title, string Message)>( StartPing.ThrownExceptions.Select(ex => (("Could not start pinging", ex.Message))), StopPing.ThrownExceptions.Select(ex => (("Could not stop pinging", ex.Message)))) .SelectMany(dialogContent => _messages.Handle(new MessageInfo(MessageType.Error, dialogContent.Message, dialogContent.Title))) .Subscribe() .DisposeWith(disposables); }); }
private void PingFailed() { PingResults.Add(DateTime.Now, false); }
public List <DateTime> GetFailedPings() { return(PingResults.Where(r => r.Value == false).Select(r => r.Key).ToList()); }
/// <summary> /// Update graph legend text labels /// </summary> /// <param name="results"></param> private void UpdateLegend(PingResults results) { // save cursor location int cursorPositionX = Console.CursorLeft; int cursorPositionY = Console.CursorTop; string blankLabel = new string(' ', 8); // Update sent label Console.SetCursorPosition(_sentLabelX, _sentLabelY); // Clear label first Console.Write(blankLabel); // Move cursor back Console.CursorLeft = Console.CursorLeft - 8; // Write label value Console.Write(results.Sent); // Update recieve label Console.SetCursorPosition(_recvLabelX, _recvLabelY); Console.Write(blankLabel); Console.CursorLeft = Console.CursorLeft - 8; Console.Write(results.Received); // Update average label Console.SetCursorPosition(_avgLabelX, _avgLabelY); Console.Write(new string(' ', 15)); Console.CursorLeft = Console.CursorLeft - 15; double r = Math.Round(results.AvgTime, 1); if (_lastAvg < r) { Console.ForegroundColor = ConsoleColor.DarkRed; Console.Write("+"); if (results.CurrTime - _lastRes > 20) { Console.Write("+"); } } else if (_lastAvg > r) { Console.ForegroundColor = ConsoleColor.DarkGreen; Console.Write("-"); if (_lastRes - results.CurrTime > 20) { Console.Write("-"); } } else { Console.ForegroundColor = ConsoleColor.DarkYellow; Console.Write("~"); } _lastAvg = r; _lastRes = results.CurrTime; Console.ResetColor(); Console.Write("{0:0.0}ms", results.AvgTime); // Update fail label Console.SetCursorPosition(_failLabelX, _failLabelY); Console.Write(blankLabel); Console.CursorLeft = Console.CursorLeft - 8; Console.Write(results.Lost); // Update peak label Console.SetCursorPosition(_peakLabelX, _peakLabelY); Console.Write(new string(' ', 15)); Console.CursorLeft = Console.CursorLeft - 15; List <double> noTimeoutResponses = new List <double>(); noTimeoutResponses.AddRange(_responseTimes); noTimeoutResponses.RemoveAll(x => x == 0d); Console.Write("{0}ms", _responseTimes.Count > 0 && noTimeoutResponses.Count > 0 ? Math.Round(noTimeoutResponses.Max(), 1) : 0); // Update RTT label Console.SetCursorPosition(_rttLabelX, _rttLabelY); Console.Write(blankLabel); Console.CursorLeft = Console.CursorLeft - 8; Console.Write("{0:0.0}ms", results.CurrTime); // Update time label Console.SetCursorPosition(_timeLabelX, _timeLabelY); Console.Write(blankLabel + " "); Console.CursorLeft = Console.CursorLeft - 16; Console.Write("{0:hh\\:mm\\:ss}", results.TotalRunTime); // Reset cursor to starting position Console.SetCursorPosition(cursorPositionX, cursorPositionY); }
public void OnFinish(PingResults results) { ConsoleDisplay.PingResults(Attributes, results); }