NodeSpy
Watch (and kick) live terminal sessions. Sysop-only.
Where
- Card on
/admin/control/(the Sysop Control Panel) - Direct link in the admin dropdown → "NodeSpy (kick users)"
What it shows
| Column | Meaning |
|---|---|
| Slot | The node number (1..BBS_NODES) |
| User | Logged-in username |
| Proto | telnet / ssh / rlogin |
| Page | Their current page slug (main, boards/123, door:lord) |
| Last action | Last thing they did (pressed E, loaded /boards/...) |
| Idle | Seconds since their last keypress |
The eye icon shows a snapshot of their last terminal screen (handy
for "this user looks stuck — what are they looking at?").
Kicking
The door-arrow icon disconnects the user. A prompt asks for a
reason — shown to them just before the connection drops:
*** Disconnected by sysop: <reason> ***
The kick is cross-process: the web app sets a flag on the user's
NodeActivity DB row, and a watchdog inside the terminal session
polls that flag every 5 seconds. Worst-case kick latency: ~5 s.
Different from a ban: a kick just drops the current connection.
The user can reconnect immediately. To stop them coming back, add
an IP ban under /admin/ip-bans/.
Audit trail
Every kick writes a UserActivity row with activity_type='kick_node',
the slot, the target username, the reason, and the sysop's
username + IP — /admin/activity shows the trail.
The terminal has its own, separate Node Monitor — with messaging
Everything above is the web NodeSpy panel, and it's kick-only. The
terminal Sysop Tools menu has a distinct Node Monitor screen (same
scrollable live-list style as Synchronet's UNIX monitor) that shows
the same live nodes — slot, user, protocol, page, action, idle time —
but adds a second capability the web panel doesn't have:
- K — kick, same DB-flag mechanism as the web panel (sets
kick_requested/kick_reasonon the node'sNodeActivityrow,
picked up by the session watchdog within ~5s), prompts for a reason
first. - M — message a specific connected node directly from the
terminal. Prompts for the text, then delivers it immediately via
the sysop-paging mechanism (the same one used for sysop chat
replies) — the recipient sees it without you having to drop into
chat or wait for them to check anything. Only works against an
authenticated node (can't message an anonymous/unauthenticated
session).
Both actions live in the same list — press the letter with a row
selected, same as any other Sysop Tools record list. This is a
terminal-only feature; there's no web-panel equivalent of the message
action.