@@ -2,6 +2,9 @@ const fs = require('fs');
22const path = require ( 'path' ) ;
33const pidusage = require ( 'pidusage' )
44const AdmZip = require ( 'adm-zip' ) ;
5+ const consts = require ( '../consts' ) ;
6+ const serverService = require ( "./server.service" ) ;
7+ const propertiesService = require ( "./properties.service" ) ;
58
69let startTime = null ;
710
@@ -56,13 +59,11 @@ function getDirectorySize(folderPath) {
5659 return sizeInMB ;
5760 }
5861
59- function getPlatform ( jarPath ) {
62+ function getPlatform ( jarPath = consts . serverDirectory + "/" + consts . serverName ) {
6063 const zip = new AdmZip ( jarPath ) ;
6164 const entries = zip . getEntries ( ) ;
6265 const names = entries . map ( e => e . entryName ) ;
6366
64- console . log ( names ) ;
65-
6667 const has = ( file ) => names . includes ( file ) ;
6768
6869 // Detect Paper
@@ -88,19 +89,20 @@ function getPlatform(jarPath) {
8889}
8990
9091function getVersion ( jarPath ) {
91- if ( getPlatform ( jarPath ) == "Fabric" ) {
92- console . error ( "Unable to get version from fabric servers" ) ;
93- return "Unable to fetch version" ;
94- }
95-
92+
9693 const zip = new AdmZip ( jarPath ) ;
9794 const entries = zip . getEntries ( ) ;
98-
95+
96+ if ( getPlatform ( jarPath ) == "Fabric" ) {
97+ const installEntry = entries . find ( entry => entry . entryName === 'install.properties' ) ;
98+ const text = zip . readAsText ( installEntry ) ;
99+ return text . split ( "game-version=" ) [ 1 ] ;
100+ }
101+
99102 const versionEntry = entries . find ( e => e . entryName === "version.json" ) ;
100103 if ( versionEntry ) {
101104 try {
102105 const content = JSON . parse ( zip . readAsText ( versionEntry ) ) ;
103- console . log ( content ) ;
104106 return content . name || content . id || null ;
105107 } catch ( err ) {
106108 console . warn ( "Failed to parse version.json:" , err . message ) ;
@@ -117,6 +119,86 @@ function getVersion(jarPath) {
117119 return null ;
118120}
119121
122+ async function getUpTime ( ) {
123+ if ( getStartTime ( ) === null )
124+ return { uptime : "0s" } ;
125+
126+ const ms = Date . now ( ) - getStartTime ( ) ;
127+
128+ const totalSeconds = Math . floor ( ms / 1000 ) ;
129+ const hours = Math . floor ( totalSeconds / 3600 ) ;
130+ const minutes = Math . floor ( ( totalSeconds % 3600 ) / 60 ) ;
131+ const seconds = totalSeconds % 60 ;
132+
133+ let formatted = [ ] ;
134+ if ( hours > 0 ) formatted . push ( `${ hours } h` ) ;
135+ if ( minutes > 0 || hours > 0 ) formatted . push ( `${ minutes } m` ) ;
136+ formatted . push ( `${ seconds } s` ) ;
137+
138+ return { uptime : formatted . join ( " " ) } ;
139+ }
140+
141+ async function getInfo ( serverProcess , jarPath , folderPath ) {
142+ let memoryUsage = null ;
143+ let platform = null ;
144+ let version = null ;
145+ let directorySizeMB = null ;
146+ let serverStatus = null ;
147+ let playerCount = null ;
148+
149+ try {
150+ memoryUsage = await getMemoryUsage ( serverProcess ) ;
151+ } catch ( err ) {
152+ console . warn ( 'Failed to get memory usage:' , err . message ) ;
153+ }
154+
155+ try {
156+ platform = getPlatform ( jarPath ) ;
157+ } catch ( err ) {
158+ console . warn ( 'Failed to get platform:' , err . message ) ;
159+ }
160+
161+ try {
162+ version = getVersion ( jarPath ) ;
163+ } catch ( err ) {
164+ console . warn ( 'Failed to get version:' , err . message ) ;
165+ }
166+
167+ try {
168+ directorySizeMB = getDirectorySize ( folderPath ) ;
169+ directorySizeMB = Math . round ( directorySizeMB * 100 ) / 100 ;
170+ } catch ( err ) {
171+ console . warn ( 'Failed to get directory size:' , err . message ) ;
172+ }
173+
174+ try {
175+ uptime = await getUpTime ( ) ;
176+ } catch ( err ) {
177+ console . warn ( 'Failed to calculate uptime:' , err . message ) ;
178+ }
179+
180+ try {
181+ serverStatus = serverService . isServerStarting ( ) ;
182+ } catch ( err ) {
183+ console . warn ( 'Failed to get server status:' , err . message ) ;
184+ }
185+
186+ try {
187+ playerCount = await propertiesService . getOnlinePlayers ( ) ;
188+ } catch ( err ) {
189+ console . warn ( 'Failed to get player count:' , err . message ) ;
190+ }
191+
192+ return {
193+ memoryUsage,
194+ platform,
195+ version,
196+ directorySizeMB,
197+ uptime : uptime . uptime ,
198+ status : serverStatus ,
199+ playerCount : playerCount
200+ } ;
201+ }
120202
121203module . exports = {
122204 startCounting,
@@ -125,5 +207,7 @@ module.exports = {
125207 getMemoryUsage,
126208 getDirectorySize,
127209 getPlatform,
128- getVersion
210+ getVersion,
211+ getInfo,
212+ getUpTime
129213}
0 commit comments