Skip to content

Commit c771ee0

Browse files
authored
metrics: Do not jsonSizeOf(undefined) (#3331)
1 parent 373ecc8 commit c771ee0

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

src/RealtimeServer/common/resource-monitor.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ import v8 from 'v8';
88
import vm from 'vm';
99
import { ConnectSession } from './connect-session';
1010

11+
function sizeof(obj: unknown): number {
12+
if (obj == null) return 0;
13+
return jsonSizeOf(obj);
14+
}
15+
1116
/**
1217
* Defines some fields on the ShareDB Connection type in connection.js, to be used for measuring purposes.
1318
*/
@@ -207,15 +212,12 @@ export class ResourceMonitor {
207212
// Just measure data items to avoid circular reference.
208213
collectionsDocsBytes: Object.values(conn.collections).reduce(
209214
(collectionsBytes, coll) =>
210-
collectionsBytes + Object.values(coll).reduce((docsBytes, doc) => docsBytes + jsonSizeOf(doc.data), 0),
215+
collectionsBytes + Object.values(coll).reduce((docsBytes, doc) => docsBytes + sizeof(doc.data), 0),
211216
0
212217
),
213218
queriesCount: Object.keys(conn.queries).length,
214219
// Avoid circular reference.
215-
queriesBytes: Object.values(conn.queries).reduce(
216-
(totalBytes, query) => totalBytes + jsonSizeOf(query.results),
217-
0
218-
),
220+
queriesBytes: Object.values(conn.queries).reduce((totalBytes, query) => totalBytes + sizeof(query.results), 0),
219221
presencesCount: Object.keys(conn._presences).length,
220222
snapshotRequestsCount: Object.keys(conn._snapshotRequests).length
221223
};
@@ -224,10 +226,10 @@ export class ResourceMonitor {
224226

225227
private reportOnAgent(agent: ShareDB.Agent): AgentInfo {
226228
const ag: AgentInternal = agent as unknown as AgentInternal;
227-
// QueryEmitter has a circular reference and so we can not use jsonSizeOf. Substitute in a sum of the interesting
229+
// QueryEmitter has a circular reference and so we can not use sizeof. Substitute in a sum of the interesting
228230
// field sizes.
229231
const subscribedQueriesBytes: number = Object.values(ag.subscribedQueries).reduce(
230-
(sum, queryEmitter) => sum + jsonSizeOf(queryEmitter.query) + jsonSizeOf(queryEmitter.streams),
232+
(sum, queryEmitter) => sum + sizeof(queryEmitter.query) + sizeof(queryEmitter.streams),
231233
0
232234
);
233235
const agentInfo: AgentInfo = {
@@ -237,9 +239,9 @@ export class ResourceMonitor {
237239
connectTime: ag.connectTime,
238240
connectSessionUserId: ag.connectSession?.userId,
239241
subscribedDocsCount: Object.keys(ag.subscribedDocs).length,
240-
subscribedDocsBytes: jsonSizeOf(ag.subscribedDocs),
242+
subscribedDocsBytes: sizeof(ag.subscribedDocs),
241243
subscribedPresencesCount: Object.keys(ag.subscribedPresences).length,
242-
subscribedPresencesBytes: jsonSizeOf(ag.subscribedPresences),
244+
subscribedPresencesBytes: sizeof(ag.subscribedPresences),
243245
subscribedQueriesCount: Object.keys(ag.subscribedQueries).length,
244246
subscribedQueriesBytes
245247
};
@@ -252,9 +254,9 @@ export class ResourceMonitor {
252254
timestamp: new Date().toISOString(),
253255
nextStreamId: ps.nextStreamId,
254256
streamsCount: ps.streamsCount,
255-
streamsBytes: jsonSizeOf(ps.streams),
257+
streamsBytes: sizeof(ps.streams),
256258
subscribedCount: Object.keys(ps.subscribed).length,
257-
subscribedBytes: jsonSizeOf(ps.subscribed)
259+
subscribedBytes: sizeof(ps.subscribed)
258260
};
259261
return pubsubInfo;
260262
}

0 commit comments

Comments
 (0)