Skip to content

feat(nodes): a Ping panel on each node's card - #95

Merged
hiddify-com merged 2 commits into
hiddify:devfrom
Hiddify-Official:feat/node-ping
Oct 23, 2026
Merged

hiddify-com merged 2 commits into
hiddify:devfrom
Hiddify-Official:feat/node-ping

Conversation

@Hiddify-Official

Copy link
Copy Markdown
Contributor

Builds on #94 (Nodes "Show more"), and includes its commit until that one is merged: both change the node card's buttons and template. Only the last commit is this change.

Problem

"Check connection" on a node tells whether its panel answers, but not how the way to it behaves: its latency, jitter and loss.

Change

  • Endpoint GET nodes/<id>/icmp/ (nodes_api.py, super admins):
    • one ICMP echo from this panel to the node's address, the host from its link (a name resolved, IPv4 first);
    • when ICMP is not possible, the time of a TCP connect to the node's panel port, and method says which.
  • Button and panel (NodesView.vue, new components/NodePingPanel.vue): a "Ping" button next to "Open" opens a panel over that card, under the node's icon, flag and name.
    • It asks once a second until it is closed (✕, Esc, or the button again).
    • It shows the latest time (coloured), min / avg / max / loss, a bar per answer and the last 5 lines.
    • Each card has its own panel, so several nodes can be pinged at once.
    • The panel keeps its own height, whatever the card shows.
    • A long address (IPv6) ends in "…".
  • Buttons: labels never wrap ("ورود به نود" broke into three lines beside "Ping"). The row wraps instead, with delete at its end.
  • Strings in all 7 languages.

Screenshots

Before After
before after

Tested

  • On main (a parent with two nodes, panel restart):
    • real ICMP as the panel's service user, about 50 ms to one node and 151 ms over IPv6 to the other;
    • both panels running at once;
    • the panel keeps its height on a card with its charts open;
    • the ✕ stays inside and the IPv6 address is cut with "…";
    • an unknown node answers 404.
  • Shown on desktop, dark, mobile and Persian RTL.

Review

  • Confidence: High (>90%) — the endpoint only runs ping -c 1 (an argument list, no shell) to the stored node's address. Tested on main.
  • Complexity: Simple — one endpoint and one panel.

🤖 Generated with Claude Code

Hiddify-Official and others added 2 commits October 23, 2026 12:12
…arts

Each node card has a "Show more" toggle under its buttons that opens the
node's live charts: network up/down, CPU and RAM, drawn like the
dashboard's Node health but for that node only. One feed (the dashboard's
system snapshot, which lists every node) runs every 5 s while a card is
open and keeps 60 samples: the last 5 minutes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…losed

A "Ping" button on each node card opens a panel over that card, under its
name: this panel pings the node's server once a second (ICMP, or the time
of a TCP connect to its panel port when ICMP is not possible) until the
panel is closed, with the latest time, min / avg / max / loss, a bar per
answer and the last lines. Each card has its own, so several nodes can be
pinged at once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

🥷 Ninja i18n – 🛎️ Translations need to be updated

Project /project.inlang

lint rule new reports level link
Identical pattern 10 warning contribute (via Fink 🐦)

@hiddify-com
hiddify-com merged commit 0e67444 into hiddify:dev Oct 23, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants