jerdev38282 commited on
Commit
3278e26
ยท
verified ยท
1 Parent(s): cd2e284

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +44 -124
index.js CHANGED
@@ -1,148 +1,68 @@
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 (original)
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
- // ๐Ÿ” NEW โ€” Pinging https://ccprojectsapis.zetsu.xyz/docs.html every 5s
100
- setInterval(async () => {
101
- try {
102
- await axios.get("https://ccprojectsapis.zetsu.xyz/docs.html");
103
- console.log(`[CCPROJECTS] Pinged successfully at ${new Date().toLocaleTimeString()}`);
104
- } catch (e) {
105
- console.error("[CCPROJECTS] Fetch failed:", e.message);
106
- }
107
- }, 5000);
108
-
109
- // ๐Ÿ” Fetch from ARIA API every 1 hour
110
- setInterval(async () => {
111
- console.log("[Scheduled] Fetching from ARIA API...");
112
- try {
113
- const response = await axios.get(ARIA_FETCH_URL);
114
- console.log("[ARIA API] Response:", response.data);
115
- } catch (err) {
116
- console.error("[ARIA API] Fetch failed:", err.message);
117
- }
118
- }, 5 * 60 * 1000);
119
 
120
- // ๐Ÿ–ฅ๏ธ HTTP status API
121
  app.get("/status", (req, res) => {
122
- const now = Date.now();
123
- const uptime = Math.floor((now - startTime) / 1000);
124
- const secondsSinceLastUpdate = Math.floor((now - lastUpdate) / 1000);
125
-
126
- const status = {
127
  status: "running",
128
- websocketConnected: wsConnected,
129
- fallbackToSecondTriggered: fallbackSecondTriggered,
130
- lastUpdate: new Date(lastUpdate).toLocaleString(),
131
- secondsSinceLastUpdate,
132
  serverTime: new Date().toLocaleString(),
133
- uptimeSeconds: uptime,
134
- port: PORT
135
- };
136
-
137
- res.json(status);
138
  });
139
 
 
140
  app.get("/", (req, res) => {
141
- res.json({ message: "GrowAGarden WebSocket Monitor is running." });
142
  });
143
 
144
- // Start HTTP server & WebSocket
145
  app.listen(PORT, () => {
146
- console.log(`[HTTP] Server running at http://localhost:${PORT}/`);
147
- connectWebSocket();
148
  });
 
 
 
 
1
  const express = require("express");
2
+ const axios = require("axios");
3
+ const fs = require("fs");
4
+ const path = require("path");
5
 
6
+ const app = express();
7
  const PORT = process.env.PORT || 7860;
 
 
 
 
 
 
 
 
 
8
  const startTime = Date.now();
9
 
10
+ // Load uptime targets
11
+ const configPath = path.join(__dirname, "up.json");
12
+ const config = JSON.parse(fs.readFileSync(configPath, "utf8"));
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
+ let stats = {};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
+ // Init stats
17
+ config.targets.forEach(t => {
18
+ stats[t.name] = {
19
+ url: t.url,
20
+ success: 0,
21
+ fail: 0,
22
+ lastPing: null,
23
+ lastStatus: "pending"
24
+ };
25
+ });
26
 
27
+ // Serve static HTML
28
+ app.use(express.static(path.join(__dirname, "public")));
 
 
29
 
30
+ // ๐Ÿ” UPTIME PINGER
31
+ async function pingTargets() {
32
+ for (const target of config.targets) {
33
  try {
34
+ await axios.get(target.url, { timeout: 8000 });
35
+ stats[target.name].success++;
36
+ stats[target.name].lastStatus = "online";
37
+ } catch (err) {
38
+ stats[target.name].fail++;
39
+ stats[target.name].lastStatus = "offline";
40
  }
41
+ stats[target.name].lastPing = new Date().toLocaleString();
42
  }
43
+ }
44
 
45
+ // Run pinger
46
+ setInterval(pingTargets, config.interval_seconds * 1000);
47
+ pingTargets();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
 
49
+ // ๐Ÿง  STATUS API
50
  app.get("/status", (req, res) => {
51
+ const uptimeSeconds = Math.floor((Date.now() - startTime) / 1000);
52
+ res.json({
 
 
 
53
  status: "running",
54
+ uptimeSeconds,
 
 
 
55
  serverTime: new Date().toLocaleString(),
56
+ targets: stats
57
+ });
 
 
 
58
  });
59
 
60
+ // Root
61
  app.get("/", (req, res) => {
62
+ res.sendFile(path.join(__dirname, "public", "index.html"));
63
  });
64
 
65
+ // Start server
66
  app.listen(PORT, () => {
67
+ console.log(`๐Ÿš€ Uptime Monitor running on http://localhost:${PORT}`);
 
68
  });