UNPKG

network-performance-monitor

Version:

A comprehensive network performance monitoring tool that continuously tests and tracks your network's performance over time

93 lines 3.64 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.WebsiteTest = void 0; const axios_1 = __importDefault(require("axios")); const config_1 = require("./config"); const logger_1 = require("./logger"); class WebsiteTest { db; constructor(db) { this.db = db; } async testWebsite(url, networkName) { const result = { url, latency: null, statusCode: null, error: null, success: false }; const startTime = Date.now(); try { const response = await axios_1.default.get(url, { timeout: 30000, // 30 second timeout validateStatus: () => true, // Don't throw on any status code maxRedirects: 5 }); result.latency = Date.now() - startTime; result.statusCode = response.status; result.success = response.status >= 200 && response.status < 400; if (!result.success) { result.error = `HTTP ${response.status} ${response.statusText}`; } } catch (error) { result.latency = Date.now() - startTime; if (axios_1.default.isAxiosError(error)) { if (error.code === 'ECONNABORTED') { result.error = 'Request timeout'; } else if (error.code === 'ENOTFOUND') { result.error = 'DNS lookup failed'; } else if (error.code === 'ECONNREFUSED') { result.error = 'Connection refused'; } else { result.error = error.message; } } else { result.error = error instanceof Error ? error.message : 'Unknown error'; } } // Log the result (0, logger_1.logTestResult)('WEBSITE', url, result.success, result.latency || undefined, result.error || undefined); // Store in database await this.db.insertWebsiteTest(url, result.latency, result.statusCode, result.error, networkName); // Update baseline if successful if (result.success && result.latency !== null) { await this.db.updateBaseline('website', url, result.latency); } return result; } async testAllWebsites(networkName) { const results = []; for (const url of config_1.config.websites) { const result = await this.testWebsite(url, networkName); results.push(result); } return results; } async checkForAnomalies(results) { let anomalyDetected = false; for (const result of results) { if (!result.success || result.latency === null) { // Any failure is an anomaly anomalyDetected = true; continue; } const baseline = await this.db.getBaseline('website', result.url); if (baseline !== null && result.latency > baseline * config_1.config.thresholds.latencyMultiplier) { anomalyDetected = true; (0, logger_1.logTestResult)('WEBSITE_ANOMALY', result.url, false, result.latency, `Latency ${result.latency}ms exceeds threshold (baseline: ${baseline}ms)`); } } return anomalyDetected; } } exports.WebsiteTest = WebsiteTest; //# sourceMappingURL=websiteTest.js.map