Compare commits
No commits in common. "4f4c817276f3732870afeee217a6df62430a6d9a" and "daea98f320bf46d2efd026a869e9b695eaea3e40" have entirely different histories.
4f4c817276
...
daea98f320
@ -3326,7 +3326,7 @@ func RegisterRoutes(r *mux.Router, cfg *config.Config, storage *storage.Backend)
|
|||||||
publicRoutes.HandleFunc("/profile/{pubkey}", gateway.ProfileHandler).Methods("GET")
|
publicRoutes.HandleFunc("/profile/{pubkey}", gateway.ProfileHandler).Methods("GET")
|
||||||
|
|
||||||
// System stats endpoint (public)
|
// System stats endpoint (public)
|
||||||
r.HandleFunc("/stats", systemStatsHandler(gateway, storage, trackerInstance)).Methods("GET")
|
r.HandleFunc("/stats", systemStatsHandler(storage, trackerInstance)).Methods("GET")
|
||||||
|
|
||||||
// Branding configuration endpoint (public)
|
// Branding configuration endpoint (public)
|
||||||
r.HandleFunc("/branding", brandingHandler(cfg)).Methods("GET")
|
r.HandleFunc("/branding", brandingHandler(cfg)).Methods("GET")
|
||||||
@ -3939,7 +3939,7 @@ func brandingHandler(cfg *config.Config) http.HandlerFunc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func systemStatsHandler(gateway *Gateway, storage *storage.Backend, trackerInstance *tracker.Tracker) http.HandlerFunc {
|
func systemStatsHandler(storage *storage.Backend, trackerInstance *tracker.Tracker) http.HandlerFunc {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||||
@ -4013,8 +4013,8 @@ func systemStatsHandler(gateway *Gateway, storage *storage.Backend, trackerInsta
|
|||||||
},
|
},
|
||||||
"dht": map[string]interface{}{
|
"dht": map[string]interface{}{
|
||||||
"status": "healthy",
|
"status": "healthy",
|
||||||
"port": 6883, // Fixed port number
|
"port": 6882,
|
||||||
"peers": 0, // Will be updated below if DHT available
|
"peers": 0, // Would need DHT integration
|
||||||
"torrents": torrentFiles,
|
"torrents": torrentFiles,
|
||||||
},
|
},
|
||||||
"system": map[string]interface{}{
|
"system": map[string]interface{}{
|
||||||
@ -4027,17 +4027,6 @@ func systemStatsHandler(gateway *Gateway, storage *storage.Backend, trackerInsta
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update DHT stats with real data if DHT is enabled
|
|
||||||
if gateway.config.IsServiceEnabled("dht") && gateway.dhtBootstrap != nil {
|
|
||||||
dhtStats := gateway.dhtBootstrap.GetDHTStats()
|
|
||||||
if dhtMap, exists := stats["dht"].(map[string]interface{}); exists {
|
|
||||||
// Update peers count with routing table size
|
|
||||||
if routingTableSize, hasRouting := dhtStats["routing_table_size"]; hasRouting {
|
|
||||||
dhtMap["peers"] = routingTableSize
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add tracker stats if enabled
|
// Add tracker stats if enabled
|
||||||
if trackerInstance != nil {
|
if trackerInstance != nil {
|
||||||
trackerStats := trackerInstance.GetStats()
|
trackerStats := trackerInstance.GetStats()
|
||||||
|
@ -260,50 +260,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="stats-section">
|
|
||||||
<h3>🌐 DHT Network</h3>
|
|
||||||
<div class="service-grid">
|
|
||||||
<div class="stat-card">
|
|
||||||
<div class="stat-header">Status</div>
|
|
||||||
<div class="stat-value status-indicator" id="dht-status">🔴</div>
|
|
||||||
</div>
|
|
||||||
<div class="stat-card">
|
|
||||||
<div class="stat-header">Routing Table</div>
|
|
||||||
<div class="stat-value" id="dht-peers">--</div>
|
|
||||||
</div>
|
|
||||||
<div class="stat-card">
|
|
||||||
<div class="stat-header">Announced Torrents</div>
|
|
||||||
<div class="stat-value" id="dht-torrents">--</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="stats-section">
|
|
||||||
<h3>📊 Tracker Stats</h3>
|
|
||||||
<div class="service-grid">
|
|
||||||
<div class="stat-card">
|
|
||||||
<div class="stat-header">Status</div>
|
|
||||||
<div class="stat-value status-indicator" id="tracker-status">🔴</div>
|
|
||||||
</div>
|
|
||||||
<div class="stat-card">
|
|
||||||
<div class="stat-header">Torrents</div>
|
|
||||||
<div class="stat-value" id="tracker-torrents">--</div>
|
|
||||||
</div>
|
|
||||||
<div class="stat-card">
|
|
||||||
<div class="stat-header">Total Peers</div>
|
|
||||||
<div class="stat-value" id="tracker-peers">--</div>
|
|
||||||
</div>
|
|
||||||
<div class="stat-card">
|
|
||||||
<div class="stat-header">Seeders</div>
|
|
||||||
<div class="stat-value" id="tracker-seeders">--</div>
|
|
||||||
</div>
|
|
||||||
<div class="stat-card">
|
|
||||||
<div class="stat-header">Leechers</div>
|
|
||||||
<div class="stat-value" id="tracker-leechers">--</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="stats-section">
|
<div class="stats-section">
|
||||||
<h3>📱 WebTorrent Integration</h3>
|
<h3>📱 WebTorrent Integration</h3>
|
||||||
<div class="service-grid">
|
<div class="service-grid">
|
||||||
@ -2254,48 +2210,6 @@
|
|||||||
nav.classList.toggle('mobile-nav-open');
|
nav.classList.toggle('mobile-nav-open');
|
||||||
toggle.classList.toggle('active');
|
toggle.classList.toggle('active');
|
||||||
}
|
}
|
||||||
|
|
||||||
function closeShareModal() {
|
|
||||||
document.getElementById('share-modal').style.display = 'none';
|
|
||||||
}
|
|
||||||
|
|
||||||
function copyToClipboard(text) {
|
|
||||||
navigator.clipboard.writeText(text).then(() => {
|
|
||||||
showToast('Copied to clipboard!', 'success');
|
|
||||||
}).catch(() => {
|
|
||||||
// Fallback for older browsers
|
|
||||||
const textArea = document.createElement('textarea');
|
|
||||||
textArea.value = text;
|
|
||||||
document.body.appendChild(textArea);
|
|
||||||
textArea.select();
|
|
||||||
document.execCommand('copy');
|
|
||||||
document.body.removeChild(textArea);
|
|
||||||
showToast('Copied to clipboard!', 'success');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add modal close on outside click
|
|
||||||
window.onclick = function(event) {
|
|
||||||
const shareModal = document.getElementById('share-modal');
|
|
||||||
if (event.target == shareModal) {
|
|
||||||
shareModal.style.display = 'none';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- Share Modal -->
|
|
||||||
<div id="share-modal" class="modal" style="display: none;">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h3>Share File</h3>
|
|
||||||
<button class="close-btn" onclick="closeShareModal()">×</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<h4 id="share-file-name"></h4>
|
|
||||||
<div id="share-links"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
Loading…
x
Reference in New Issue
Block a user