@@ -9,15 +9,15 @@ type BuildServerParams = {
99 serverSettings : ServerItemSettings ;
1010 websocketsAccess : Partial < WebSocketsAccessSettings > | undefined ;
1111 indexHtml : Buffer | undefined ;
12- servers : UWebSocketsTracker [ ] ;
12+ getServersStats : ( ) => Promise < unknown > ;
1313} ;
1414
1515export function buildUwsTracker ( {
1616 tracker,
1717 serverSettings,
1818 websocketsAccess,
1919 indexHtml,
20- servers ,
20+ getServersStats ,
2121} : BuildServerParams ) : UWebSocketsTracker {
2222 if ( ! ( serverSettings instanceof Object ) ) {
2323 throw Error (
@@ -41,39 +41,56 @@ export function buildUwsTracker({
4141 response . end ( indexHtml ) ;
4242 }
4343 } )
44- . get ( "/stats.json" , ( response : HttpResponse , request : HttpRequest ) => {
45- debugRequest ( server , request ) ;
44+ . get (
45+ "/stats.json" ,
46+ async ( response : HttpResponse , request : HttpRequest ) => {
47+ debugRequest ( server , request ) ;
4648
47- const { swarms } = tracker ;
48- const peersCountPerInfoHash : Record < string , number > = { } ;
49+ response . onAborted ( ( ) => {
50+ response . aborted = true ;
51+ } ) ;
4952
50- let peersCount = 0 ;
51- for ( const [ infoHash , swarm ] of swarms ) {
52- peersCount += swarm . peers . length ;
53+ const swarms = await tracker . getSwarms ( ) ;
54+ const serversStats = await getServersStats ( ) ;
5355
54- const infoHashHex = Buffer . from ( infoHash , "binary" ) . toString ( "hex" ) ;
55- peersCountPerInfoHash [ infoHashHex ] = swarm . peers . length ;
56- }
56+ if ( ! response . aborted ) {
57+ const peersCountPerInfoHashPerTracker : Record < string , number > [ ] = [ ] ;
58+ let peersCount = 0 ;
5759
58- const serversStats = [ ] ;
59- for ( const serverForStats of servers ) {
60- const { settings } = serverForStats ;
61- serversStats . push ( {
62- server : `${ settings . server . host } :${ settings . server . port } ` ,
63- webSocketsCount : serverForStats . stats . webSocketsCount ,
64- } ) ;
65- }
60+ for ( const trackerSwarms of swarms ) {
61+ const peersCountPerInfoHash : Record < string , number > = {
62+ totalPeers : 0 ,
63+ } ;
6664
67- response . writeHeader ( "Content-Type" , "application/json" ) . end (
68- JSON . stringify ( {
69- torrentsCount : swarms . size ,
70- peersCount,
71- servers : serversStats ,
72- memory : process . memoryUsage ( ) ,
73- peersCountPerInfoHash,
74- } ) ,
75- ) ;
76- } )
65+ for ( const swarm of trackerSwarms ) {
66+ peersCount += swarm . peersCount ;
67+
68+ const infoHashHex = Buffer . from (
69+ swarm . infoHash ,
70+ "binary" ,
71+ ) . toString ( "hex" ) ;
72+
73+ peersCountPerInfoHash [ infoHashHex ] = swarm . peersCount ;
74+ peersCountPerInfoHash . totalPeers += swarm . peersCount ;
75+ }
76+
77+ peersCountPerInfoHashPerTracker . push ( peersCountPerInfoHash ) ;
78+ }
79+
80+ response . cork ( ( ) => {
81+ response . writeHeader ( "Content-Type" , "application/json" ) . end (
82+ JSON . stringify ( {
83+ torrentsCount : swarms . length ,
84+ peersCount,
85+ servers : serversStats ,
86+ memory : process . memoryUsage ( ) ,
87+ peersCountPerInfoHashPerTracker,
88+ } ) ,
89+ ) ;
90+ } ) ;
91+ }
92+ } ,
93+ )
7794 . any ( "/*" , ( response : HttpResponse , request : HttpRequest ) => {
7895 debugRequest ( server , request ) ;
7996
0 commit comments