@@ -72,116 +72,6 @@ <h1>lightning.space monitoring</h1>
7272 < div class ="loading "> Loading monitoring data...</ div >
7373 </ div >
7474
75- < script >
76- function fmt ( n , decimals ) {
77- if ( n == null ) return '-' ;
78- return Number ( n ) . toLocaleString ( 'en-US' , {
79- minimumFractionDigits : decimals != null ? decimals : 0 ,
80- maximumFractionDigits : decimals != null ? decimals : 8
81- } ) ;
82- }
83-
84- function colorClass ( n ) {
85- if ( n > 0 ) return 'positive' ;
86- if ( n < 0 ) return 'negative' ;
87- return '' ;
88- }
89-
90- function truncate ( s , len ) {
91- if ( ! s ) return '-' ;
92- if ( s . length <= len ) return s ;
93- return s . substring ( 0 , len ) + '...' ;
94- }
95-
96- async function loadData ( ) {
97- var content = document . getElementById ( 'content' ) ;
98- try {
99- var res = await fetch ( '/monitoring/data' ) ;
100- if ( ! res . ok ) throw new Error ( 'HTTP ' + res . status ) ;
101- var data = await res . json ( ) ;
102- render ( data ) ;
103- } catch ( e ) {
104- content . innerHTML = '<div class="error">Failed to load data: ' + e . message + '</div>' ;
105- }
106- }
107-
108- function render ( data ) {
109- var content = document . getElementById ( 'content' ) ;
110- document . getElementById ( 'timestamp' ) . textContent = 'Last updated: ' + new Date ( data . timestamp ) . toLocaleString ( ) ;
111-
112- var html = '' ;
113-
114- // Lightning Channels
115- html += '<div class="section">' ;
116- html += '<h2>Lightning Channels</h2>' ;
117- if ( data . channels . length === 0 ) {
118- html += '<div class="loading">No channel data available</div>' ;
119- } else {
120- html += '<table>' ;
121- html += '<tr><th>Peer</th><th class="number">Capacity</th><th class="number">Local Balance</th><th class="number">Remote Balance</th></tr>' ;
122- for ( var i = 0 ; i < data . channels . length ; i ++ ) {
123- var ch = data . channels [ i ] ;
124- html += '<tr>' ;
125- html += '<td title="' + ch . name + '">' + truncate ( ch . name , 24 ) + '</td>' ;
126- html += '<td class="number">' + fmt ( ch . capacity ) + '</td>' ;
127- html += '<td class="number">' + fmt ( ch . localBalance ) + '</td>' ;
128- html += '<td class="number">' + fmt ( ch . remoteBalance ) + '</td>' ;
129- html += '</tr>' ;
130- }
131- html += '</table>' ;
132- }
133- html += '</div>' ;
134-
135- // Balances
136- html += '<div class="section">' ;
137- html += '<h2>Balances</h2>' ;
138- if ( data . balances . length === 0 ) {
139- html += '<div class="loading">No balance data available</div>' ;
140- } else {
141- html += '<table>' ;
142- html += '<tr><th>Asset</th><th class="number">Onchain</th><th class="number">LND Onchain</th><th class="number">Lightning</th><th class="number">Citrea</th><th class="number">Customer</th><th class="number">LDS Balance</th><th class="number">LDS in CHF</th></tr>' ;
143- for ( var i = 0 ; i < data . balances . length ; i ++ ) {
144- var b = data . balances [ i ] ;
145- html += '<tr>' ;
146- html += '<td>' + b . assetName + ( b . assetSymbol ? ' (' + b . assetSymbol + ')' : '' ) + '</td>' ;
147- html += '<td class="number">' + fmt ( b . onchainBalance ) + '</td>' ;
148- html += '<td class="number">' + fmt ( b . lndOnchainBalance ) + '</td>' ;
149- html += '<td class="number">' + fmt ( b . lightningBalance ) + '</td>' ;
150- html += '<td class="number">' + fmt ( b . citreaBalance ) + '</td>' ;
151- html += '<td class="number">' + fmt ( b . customerBalance ) + '</td>' ;
152- html += '<td class="number ' + colorClass ( b . ldsBalance ) + '">' + fmt ( b . ldsBalance ) + '</td>' ;
153- html += '<td class="number ' + colorClass ( b . ldsBalanceInCHF ) + '">' + fmt ( b . ldsBalanceInCHF , 2 ) + '</td>' ;
154- html += '</tr>' ;
155- }
156- html += '</table>' ;
157- }
158- html += '</div>' ;
159-
160- // EVM Balances
161- html += '<div class="section">' ;
162- html += '<h2>EVM Balances</h2>' ;
163- if ( data . evmBalances . length === 0 ) {
164- html += '<div class="loading">No EVM balance data available</div>' ;
165- } else {
166- for ( var i = 0 ; i < data . evmBalances . length ; i ++ ) {
167- var evm = data . evmBalances [ i ] ;
168- html += '<h3 style="font-size:13px;color:#aaa;margin:12px 0 6px;text-transform:capitalize;">' + evm . blockchain + '</h3>' ;
169- html += '<table>' ;
170- html += '<tr><th>Token</th><th class="number">Balance</th></tr>' ;
171- html += '<tr><td>' + evm . nativeSymbol + ' (native)</td><td class="number">' + fmt ( evm . nativeBalance ) + '</td></tr>' ;
172- for ( var j = 0 ; j < evm . tokens . length ; j ++ ) {
173- var t = evm . tokens [ j ] ;
174- html += '<tr><td>' + t . symbol + '</td><td class="number">' + fmt ( t . balance ) + '</td></tr>' ;
175- }
176- html += '</table>' ;
177- }
178- }
179- html += '</div>' ;
180-
181- content . innerHTML = html ;
182- }
183-
184- loadData ( ) ;
185- </ script >
75+ < script src ="/monitoring/monitoring.js "> </ script >
18676</ body >
18777</ html >
0 commit comments