| const express = require("express"); |
| const axios = require("axios"); |
|
|
| const app = express(); |
|
|
| |
| const API_URL = "https://pastebin.com/raw/B0EPV9kB"; |
| const VISIT_DELAY_MS = 5000; |
| const INTERVAL_MS = 12 * 60 * 60 * 1000; |
|
|
| |
| let status = { |
| running: false, |
| lastStartTime: null, |
| lastEndTime: null, |
| totalUrls: 0, |
| logs: [] |
| }; |
|
|
| |
| const USER_AGENTS = [ |
| "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36", |
| "Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 Chrome/120.0.0.0 Mobile Safari/537.36", |
| "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 Version/17.0 Safari/605.1.15" |
| ]; |
|
|
| function getRandomUA() { |
| return USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)]; |
| } |
|
|
| async function fetchUrls() { |
| console.log("Started fetching urls"); |
| try { |
| const res = await axios.get(API_URL, { |
| timeout: 15000, |
| headers: { "Accept": "application/json" } |
| }); |
| console.log(res.data); |
| console.log(!Array.isArray(res.data)); |
| if (!Array.isArray(res.data)) return []; |
| return res.data; |
| } catch (err) { |
| status.logs.push({ |
| type: "error", |
| message: `API Fetch Failed: ${err.message}`, |
| time: new Date().toISOString() |
| }); |
| return []; |
| } |
| } |
|
|
| async function visitUrl(url) { |
| try { |
| const start = Date.now(); |
|
|
| await axios.get(url, { |
| timeout: 20000, |
| headers: { |
| "User-Agent": getRandomUA(), |
| "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", |
| "Accept-Language": "en-US,en;q=0.9", |
| "Connection": "keep-alive", |
| "Upgrade-Insecure-Requests": "1" |
| } |
| }); |
|
|
| const time = Date.now() - start; |
| return { |
| type: "success", |
| url, |
| responseTime: time, |
| message: "Visited successfully", |
| time: new Date().toISOString() |
| }; |
| } catch (err) { |
| return { |
| type: "failed", |
| url, |
| message: err.message, |
| time: new Date().toISOString() |
| }; |
| } |
| } |
|
|
| async function runJob() { |
| console.log('Running Runjib()'); |
| status.running = true; |
| status.lastStartTime = new Date().toISOString(); |
| status.logs = []; |
|
|
| const urls = await fetchUrls(); |
| status.totalUrls = urls.length; |
|
|
| if (!urls.length) { |
| status.logs.push({ |
| type: "warning", |
| message: "No URLs received from API", |
| time: new Date().toISOString() |
| }); |
| status.running = false; |
| status.lastEndTime = new Date().toISOString(); |
| return; |
| } |
|
|
| for (const url of urls) { |
| const result = await visitUrl(url); |
| status.logs.push(result); |
| await new Promise(r => setTimeout(r, VISIT_DELAY_MS)); |
| } |
|
|
| status.running = false; |
| status.lastEndTime = new Date().toISOString(); |
| } |
|
|
| |
| app.get("/url-pinger/stat", (req, res) => { |
| res.json({ |
| running: status.running, |
| lastStartTime: status.lastStartTime, |
| lastEndTime: status.lastEndTime, |
| totalUrls: status.totalUrls, |
| history: status.logs |
| }); |
| }); |
|
|
| app.get("/", (req, res) => { |
| res.send("URL Pinger Server Running..."); |
| }); |
|
|
| app.listen(7860, () => { |
| console.log("Server running on http://localhost:7860"); |
| }); |
|
|
| |
| runJob(); |
| console.log("Called Runjob()"); |
|
|
| |
| setInterval(runJob, INTERVAL_MS); |