Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 28 additions & 1 deletion Source/NETworkManager.Localization/Resources/Strings.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions Source/NETworkManager.Localization/Resources/Strings.resx
Original file line number Diff line number Diff line change
Expand Up @@ -3892,6 +3892,15 @@ Try again in a few seconds.</value>
<data name="CloseGroup" xml:space="preserve">
<value>Close group</value>
</data>
<data name="StartGroup" xml:space="preserve">
<value>Start group</value>
</data>
<data name="GroupActions" xml:space="preserve">
<value>Group actions</value>
</data>
<data name="PauseGroup" xml:space="preserve">
<value>Pause group</value>
</data>
<data name="RunCommandDotsWithHotKey" xml:space="preserve">
<value>Run command... (Ctrl+Shift+P)</value>
</data>
Expand Down
22 changes: 22 additions & 0 deletions Source/NETworkManager/ViewModels/PingMonitorHostViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,28 @@ private void CloseGroupAction(object group)
RemoveGroup(group.ToString());
}

/// <summary>
/// Gets the command to start every host in a group that is not currently running.
/// </summary>
public ICommand StartGroupCommand => new RelayCommand(StartGroupAction);

private void StartGroupAction(object group)
{
foreach (var host in Hosts.Where(host => host.Group.Equals(group.ToString()) && !host.IsRunning))
host.Start();
}

/// <summary>
/// Gets the command to pause every host in a group that is currently running.
/// </summary>
public ICommand PauseGroupCommand => new RelayCommand(PauseGroupAction);

private void PauseGroupAction(object group)
{
foreach (var host in Hosts.Where(host => host.Group.Equals(group.ToString()) && host.IsRunning))
host.Stop();
}

#endregion

#region Methods
Expand Down
163 changes: 115 additions & 48 deletions Source/NETworkManager/Views/PingMonitorHostView.xaml

Large diffs are not rendered by default.

15 changes: 15 additions & 0 deletions Source/NETworkManager/Views/PingMonitorHostView.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
using System.Windows;
using System.Windows.Controls;
using NETworkManager.ViewModels;

namespace NETworkManager.Views;
Expand Down Expand Up @@ -27,4 +29,17 @@ public void OnViewVisible()
{
_viewModel.OnViewVisible();
}

/// <summary>
/// Opens the group actions context menu on a normal click (not just right-click), so it
/// works the same way for mouse, touch and keyboard activation. PlacementTarget is set
/// explicitly since it isn't populated automatically when opening the menu this way, and
/// the menu items rely on it to reach the group name (see Button.Tag in the XAML).
/// </summary>
private void GroupActionsButton_Click(object sender, RoutedEventArgs e)
{
var button = (Button)sender;
button.ContextMenu.PlacementTarget = button;
button.ContextMenu.IsOpen = true;
}
}
12 changes: 12 additions & 0 deletions Website/docs/application/ping-monitor.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,18 @@ You can interact with the chart to inspect past results:

When you zoom or pan, the chart leaves live mode and stops scrolling. A **Live** button then appears in the top-right corner of the chart — click it to return to live mode and resume auto-scrolling.

### Groups

Hosts are grouped by their profile group (or **Hosts** if none is set). Each group header shows a live count of hosts that are up, down and paused (**Paused** is only shown while at least one host in the group is paused).

Click/tap the **⋮** icon on the right of a group header to open its action menu:

| Action | Description |
|--------|-------------|
| **Start** | Starts every host in the group that isn't currently running |
| **Pause** | Pauses every host in the group that's currently running |
| **Close** | Stops and removes every host in the group |

### Context menu

Right-click a monitored host (anywhere except the chart) to open the context menu:
Expand Down
3 changes: 2 additions & 1 deletion Website/docs/changelog/next-release.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ Release date: **xx.xx.2026**

**Ping Monitor**

- Added a live count of hosts up/down (and paused, if any) per group, next to the group's close button. [#3572](https://github.com/BornToBeRoot/NETworkManager/pull/3572)
- Added a live count of hosts up/down (and paused, if any) to each group header. [#3572](https://github.com/BornToBeRoot/NETworkManager/pull/3572)
- Added **Start** and **Pause** actions to each group header (next to the existing **Close**), to start every paused host in the group or pause every running one at once. Click/tap the **⋮** icon to open the group's action menu. [#3575](https://github.com/BornToBeRoot/NETworkManager/pull/3575)
- Reworked each monitored host's card: the collapsed quick info now shows labeled values (`Received: X · Lost: Y · Packet loss: Z%`) instead of unlabeled numbers, the expanded view shows only the latency chart (with more room, since Hostname/IP address are already visible in the header) and the last status change time moved to a tooltip on the connectivity icon. The **Status change** field was also renamed to **Last status change**. [#3572](https://github.com/BornToBeRoot/NETworkManager/pull/3572)
- Host input now accepts newline-separated hosts (one per line, e.g. a column pasted from Excel), converted automatically to the semicolon-separated form. [#3568](https://github.com/BornToBeRoot/NETworkManager/pull/3568)
- Host input now supports shorthand IPv4 ranges like `192.168.0.1-100`, in addition to the existing `192.168.0.0-192.168.0.100` and `192.168.[0-100].1` range formats. [#3568](https://github.com/BornToBeRoot/NETworkManager/pull/3568)
Expand Down
Loading