@sockeye-js/collect-ws
v0.5.0
Published
sockeye collector for the ws library: metrics for every frame sent and received.
Maintainers
Readme
@sockeye-js/collect-ws
Collector for the ws library, part of
sockeye.
npm install @sockeye-js/collect-ws @sockeye-js/store-memoryimport { attachWsMonitor } from '@sockeye-js/collect-ws';
import { createMemoryStore } from '@sockeye-js/store-memory';
const store = createMemoryStore();
attachWsMonitor(wss, store);Every frame received and every frame sent is recorded with its exact wire size, binary frames included.
ws has no broadcast of its own, so fanning a message out to a room is a loop of send in
your own code, and each recipient is already measured on its own. Every frame therefore
counts as exactly one recipient, and the dashboard shows the same number whichever way it
counts.
Sizes are the frames your app hands to ws, before permessage-deflate compresses them,
so the real traffic on the wire is often smaller.
Naming messages
ws knows nothing about your protocol. By default, JSON frames are named after their
type, event, name or action field, binary frames are grouped under <binary>, and
anything else under <unnamed>. Override it when your protocol differs:
attachWsMonitor(wss, store, {
nameOf: (data, isBinary) => (isBinary ? 'blob' : String(data).split('|')[0]),
});Namespaces
Group messages by path, or by anything you can read off the upgrade request:
attachWsMonitor(wss, store, {
namespaceOf: (request) => new URL(request.url, 'http://x').pathname,
});Response times
ws has no acknowledgement mechanism, so there is nothing to time automatically. If your
protocol has a notion of a reply, measure it with
@sockeye-js/collect-websocket:
const pending = monitor.start('report:generate', payload);
pending.end(await generateReport(payload));Other exports
monitorWsSocket(socket, store, options)instruments a single socket you manage yourself.attachWsMonitorreturns a function that stops monitoring new connections.
License
This package is part of sockeye, under the GNU AGPL v3.0 or later.
