jerdev38282 commited on
Commit
2c9ad36
Β·
verified Β·
1 Parent(s): 89fd6fa

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +129 -9
index.js CHANGED
@@ -1,18 +1,138 @@
1
- // index.js
 
 
2
  const express = require("express");
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  const app = express();
5
- const port = 7860;
6
 
7
- // Middleware
8
- app.use(express.json());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
- // Basic route
11
  app.get("/", (req, res) => {
12
- res.json({ message: "Hello, world! πŸš€" });
13
  });
14
 
15
- // Start server
16
- app.listen(port, () => {
17
- console.log(`Server is running at http://localhost:${port}`);
 
18
  });
 
1
+ const http = require("http");
2
+ const WebSocket = require("ws");
3
+ const axios = require("axios");
4
  const express = require("express");
5
 
6
+ const PORT = process.env.PORT || 7860;
7
+ const WEBSOCKET_URL = "wss://gagstock.gleeze.com";
8
+ const FALLBACK_SECOND_URL = "https://gagstock.gleeze.com/choose-scraper/second";
9
+ const ARIA_FETCH_URL = "https://kaiz-apis.gleeze.com/api/aria?ask=hi&uid=1&apikey=20f3d256-cb34-4c8b-991f-710f28fdf230";
10
+
11
+ let ws = null;
12
+ let pingInterval = null;
13
+ let lastUpdate = Date.now();
14
+ let fallbackSecondTriggered = false;
15
+ let wsConnected = false;
16
+ const startTime = Date.now();
17
+
18
+ // Express app
19
  const app = express();
 
20
 
21
+ // WebSocket connection
22
+ function connectWebSocket() {
23
+ if (ws) {
24
+ ws.removeAllListeners();
25
+ ws.terminate();
26
+ }
27
+
28
+ ws = new WebSocket(WEBSOCKET_URL);
29
+
30
+ ws.on("open", () => {
31
+ console.log("[WebSocket] Connected");
32
+ wsConnected = true;
33
+
34
+ if (pingInterval) clearInterval(pingInterval);
35
+ pingInterval = setInterval(() => {
36
+ if (ws.readyState === WebSocket.OPEN) {
37
+ ws.send("ping");
38
+ }
39
+ }, 10_000);
40
+ });
41
+
42
+ ws.on("message", (data) => {
43
+ try {
44
+ const json = JSON.parse(data);
45
+ if (json.status !== "success") return;
46
+
47
+ lastUpdate = Date.now();
48
+ fallbackSecondTriggered = false;
49
+ console.log("[WebSocket] Received update:", new Date().toLocaleString());
50
+ } catch (e) {
51
+ console.error("[WebSocket] Failed to parse message:", e.message);
52
+ }
53
+ });
54
+
55
+ ws.on("close", () => {
56
+ console.log("[WebSocket] Disconnected. Reconnecting in 3s...");
57
+ wsConnected = false;
58
+ if (pingInterval) clearInterval(pingInterval);
59
+ setTimeout(connectWebSocket, 3000);
60
+ });
61
+
62
+ ws.on("error", (err) => {
63
+ console.log("[WebSocket] Error:", err.message);
64
+ ws.close();
65
+ });
66
+ }
67
+
68
+ // Check WebSocket updates
69
+ setInterval(async () => {
70
+ const now = Date.now();
71
+ const diff = now - lastUpdate;
72
+
73
+ if (diff > 10 * 60 * 1000 && !fallbackSecondTriggered) {
74
+ console.log("[Fallback] No WebSocket update in 10 minutes. Triggering SECOND fallback...");
75
+ try {
76
+ await axios.get(FALLBACK_SECOND_URL);
77
+ console.log("[Fallback] Triggered fallback to SECOND API.");
78
+ fallbackSecondTriggered = true;
79
+ } catch (e) {
80
+ console.error("[Fallback] SECOND API call failed:", e.message);
81
+ }
82
+ }
83
+
84
+ if (diff < 10 * 60 * 1000) {
85
+ fallbackSecondTriggered = false;
86
+ }
87
+ }, 60_000);
88
+
89
+ // πŸ” Ping docs every 5 seconds
90
+ setInterval(async () => {
91
+ try {
92
+ await axios.get("https://markdevs69v2.onrender.com/docs");
93
+ console.log(`[DOCS] Pinged successfully at ${new Date().toLocaleTimeString()}`);
94
+ } catch (e) {
95
+ console.error("[DOCS] Fetch failed:", e.message);
96
+ }
97
+ }, 5000);
98
+
99
+ // πŸ” Fetch from ARIA API every 1 hour
100
+ setInterval(async () => {
101
+ console.log("[Scheduled] Fetching from ARIA API...");
102
+ try {
103
+ const response = await axios.get(ARIA_FETCH_URL);
104
+ console.log("[ARIA API] Response:", response.data);
105
+ } catch (err) {
106
+ console.error("[ARIA API] Fetch failed:", err.message);
107
+ }
108
+ }, 60 * 60 * 1000);
109
+
110
+ // πŸ–₯️ HTTP status API
111
+ app.get("/status", (req, res) => {
112
+ const now = Date.now();
113
+ const uptime = Math.floor((now - startTime) / 1000);
114
+ const secondsSinceLastUpdate = Math.floor((now - lastUpdate) / 1000);
115
+
116
+ const status = {
117
+ status: "running",
118
+ websocketConnected: wsConnected,
119
+ fallbackToSecondTriggered: fallbackSecondTriggered,
120
+ lastUpdate: new Date(lastUpdate).toLocaleString(),
121
+ secondsSinceLastUpdate,
122
+ serverTime: new Date().toLocaleString(),
123
+ uptimeSeconds: uptime,
124
+ port: PORT
125
+ };
126
+
127
+ res.json(status);
128
+ });
129
 
 
130
  app.get("/", (req, res) => {
131
+ res.json({ message: "GrowAGarden WebSocket Monitor is running." });
132
  });
133
 
134
+ // Start HTTP server & WebSocket
135
+ app.listen(PORT, () => {
136
+ console.log(`[HTTP] Server running at http://localhost:${PORT}/`);
137
+ connectWebSocket();
138
  });