@@ -8,6 +8,11 @@ import v8 from 'v8';
88import vm from 'vm' ;
99import { 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