Spaces:
Running
Running
| const http = require("http"); | |
| const WebSocket = require("ws"); | |
| const axios = require("axios"); | |
| const express = require("express"); | |
| const PORT = process.env.PORT || 7860; | |
| const WEBSOCKET_URL = "wss://gagstock.gleeze.com"; | |
| const FALLBACK_SECOND_URL = "https://gagstock.gleeze.com/choose-scraper/second"; | |
| const ARIA_FETCH_URL = "https://kaiz-apis.gleeze.com/api/aria?ask=hi&uid=1&apikey=20f3d256-cb34-4c8b-991f-710f28fdf230"; | |
| let ws = null; | |
| let pingInterval = null; | |
| let lastUpdate = Date.now(); | |
| let fallbackSecondTriggered = false; | |
| let wsConnected = false; | |
| const startTime = Date.now(); | |
| // Express app | |
| const app = express(); | |
| // WebSocket connection | |
| function connectWebSocket() { | |
| if (ws) { | |
| ws.removeAllListeners(); | |
| ws.terminate(); | |
| } | |
| ws = new WebSocket(WEBSOCKET_URL); | |
| ws.on("open", () => { | |
| console.log("[WebSocket] Connected"); | |
| wsConnected = true; | |
| if (pingInterval) clearInterval(pingInterval); | |
| pingInterval = setInterval(() => { | |
| if (ws.readyState === WebSocket.OPEN) { | |
| ws.send("ping"); | |
| } | |
| }, 10_000); | |
| }); | |
| ws.on("message", (data) => { | |
| try { | |
| const json = JSON.parse(data); | |
| if (json.status !== "success") return; | |
| lastUpdate = Date.now(); | |
| fallbackSecondTriggered = false; | |
| console.log("[WebSocket] Received update:", new Date().toLocaleString()); | |
| } catch (e) { | |
| console.error("[WebSocket] Failed to parse message:", e.message); | |
| } | |
| }); | |
| ws.on("close", () => { | |
| console.log("[WebSocket] Disconnected. Reconnecting in 3s..."); | |
| wsConnected = false; | |
| if (pingInterval) clearInterval(pingInterval); | |
| setTimeout(connectWebSocket, 3000); | |
| }); | |
| ws.on("error", (err) => { | |
| console.log("[WebSocket] Error:", err.message); | |
| ws.close(); | |
| }); | |
| } | |
| // Check WebSocket updates | |
| setInterval(async () => { | |
| const now = Date.now(); | |
| const diff = now - lastUpdate; | |
| if (diff > 10 * 60 * 1000 && !fallbackSecondTriggered) { | |
| console.log("[Fallback] No WebSocket update in 10 minutes. Triggering SECOND fallback..."); | |
| try { | |
| await axios.get(FALLBACK_SECOND_URL); | |
| console.log("[Fallback] Triggered fallback to SECOND API."); | |
| fallbackSecondTriggered = true; | |
| } catch (e) { | |
| console.error("[Fallback] SECOND API call failed:", e.message); | |
| } | |
| } | |
| if (diff < 10 * 60 * 1000) { | |
| fallbackSecondTriggered = false; | |
| } | |
| }, 60_000); | |
| // π Ping docs every 5 seconds (original) | |
| setInterval(async () => { | |
| try { | |
| await axios.get("https://markdevs69v2.onrender.com/docs"); | |
| console.log(`[DOCS] Pinged successfully at ${new Date().toLocaleTimeString()}`); | |
| } catch (e) { | |
| console.error("[DOCS] Fetch failed:", e.message); | |
| } | |
| }, 5000); | |
| // π NEW β Pinging https://ccprojectsapis.zetsu.xyz/docs.html every 5s | |
| setInterval(async () => { | |
| try { | |
| await axios.get("https://ccprojectsapis.zetsu.xyz/docs.html"); | |
| console.log(`[CCPROJECTS] Pinged successfully at ${new Date().toLocaleTimeString()}`); | |
| } catch (e) { | |
| console.error("[CCPROJECTS] Fetch failed:", e.message); | |
| } | |
| }, 5000); | |
| // π Fetch from ARIA API every 1 hour | |
| setInterval(async () => { | |
| console.log("[Scheduled] Fetching from ARIA API..."); | |
| try { | |
| const response = await axios.get(ARIA_FETCH_URL); | |
| console.log("[ARIA API] Response:", response.data); | |
| } catch (err) { | |
| console.error("[ARIA API] Fetch failed:", err.message); | |
| } | |
| }, 5 * 60 * 1000); | |
| // π₯οΈ HTTP status API | |
| app.get("/status", (req, res) => { | |
| const now = Date.now(); | |
| const uptime = Math.floor((now - startTime) / 1000); | |
| const secondsSinceLastUpdate = Math.floor((now - lastUpdate) / 1000); | |
| const status = { | |
| status: "running", | |
| websocketConnected: wsConnected, | |
| fallbackToSecondTriggered: fallbackSecondTriggered, | |
| lastUpdate: new Date(lastUpdate).toLocaleString(), | |
| secondsSinceLastUpdate, | |
| serverTime: new Date().toLocaleString(), | |
| uptimeSeconds: uptime, | |
| port: PORT | |
| }; | |
| res.json(status); | |
| }); | |
| app.get("/", (req, res) => { | |
| res.json({ message: "GrowAGarden WebSocket Monitor is running." }); | |
| }); | |
| // Start HTTP server & WebSocket | |
| app.listen(PORT, () => { | |
| console.log(`[HTTP] Server running at http://localhost:${PORT}/`); | |
| connectWebSocket(); | |
| }); |