Traffic
Traffic is a modal HTTP traffic window. It opens with the traffic button on the
ZP7 page, the /?page=zp7#traffic link and the Alt+5 hotkey.
Nodes and the local runtime write traffic to a file, and the window reads its tail — the same way allLogs reads logs.
Sources
The window polls two kinds of source at once and merges the records into one list:
| Source | Written by | File | Read through |
|---|---|---|---|
| z3nDash | ZpRuntime (Rqst, HttpDebugHandler) |
<logsFolder>/trafficLog.jsonl |
GET /traffic |
| ZP node | z3n7 (Rqst) |
<ZennoPoster log folder>/trafficLog.jsonl |
GET /zp/traffic?machine=... |
Node addresses come from GET /zp/nodes?probe=false. An unreachable node does not get
in the way of the others: its error is shown as a line above the list, and records from
the reachable sources are displayed as usual.
Each side keeps one file per machine, written under a named mutex and rotated at 50 MB
with the five most recent files kept. Reading goes from the end: the last N records are
requested, and rotated files are pulled in when the current one is not enough. The scan
ceiling is 64 MB; once it is used up the answer is marked truncated.
List
Filters: machine, project, method, status, a URL substring, and the number of records
per source. The project goes into the request and is filtered while the file is read;
the remaining filters apply to the records already loaded. The window refreshes every
3 seconds while open, and the Auto button stops that. Clear view resets the window
buffer — the files themselves are untouched.
Details
The panel shows the URL, method, status, duration, machine, project, account, session,
proxy and task_id, plus collapsible Request and Response sections with headers,
cookies and body. Clicking a value copies it.
Replay
Play opens the request in an editor: method, URL, headers and body can be changed
before sending. The request goes through a separate replay listener — POST /http-replay,
the same one HAR uses. The response can be copied, and there is a cURL button next
to it built from the current field contents.
The listener port is always the dashboard port + 1, both on the server and on the front
end; there is no setting for it. It listens on localhost only.
Code
For a selected record, ready-made calls are generated: HttpClient, ZP7, Hybrid, Python,
TypeScript, cURL. API Skeleton and API Example fold every displayed request into an
endpoint description — either field types or the last real values.
cURL Import parses a pasted curl command and opens it in the details panel as an
ordinary record: it can be replayed and converted, and it does not appear in the list.
Record format
{
"timestamp": "2026-09-12 17:40:11.325",
"startedDateTime": "2026-09-12T22:40:11.1000000Z",
"method": "POST",
"url": "https://example.com/api",
"statusCode": 200,
"durationMs": 214,
"proxy": "",
"request": { "headers": [], "contentType": "", "userAgent": "", "cookies": "", "cookiesSource": "", "body": "" },
"response": { "headers": "", "body": "" },
"machine": "PC", "project": "", "account": "", "session": "",
"task_id": "", "source": "z3n7"
}
The format is shared by the node and the runtime, so the window parses both sources with the same code.
API
GET /traffic?tail=N&project=&task_id=— the local z3nDash file;GET /zp/traffic?machine=&tail=N&project=&task_id=— forwarded to a node;GET /zp/nodes?probe=false— the node list;POST /http-replay— replaying a request (dashboard port + 1).
Node requirement
The tail of the file is served by the tail parameter of GET /traffic on the z3n7
side. If a node returns the first N records instead of the last ones, it is running
a z3n7.dll build without tail support.