Skip to content

Commit 7ca7e8f

Browse files
committed
restructure the api code
1 parent 70f7ef4 commit 7ca7e8f

2 files changed

Lines changed: 65 additions & 62 deletions

File tree

index.js

Lines changed: 2 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,13 @@
1-
// index.js - api
2-
3-
const http = require('http');
4-
const https = require('https');
5-
const dns = require('dns');
61
const express = require('express');
72
const bodyParser = require('body-parser');
8-
const url = require('url');
9-
const now = require('performance-now');
103
const cors = require('cors');
11-
const { isURL } = require('validator');
4+
const analyzeURL = require('./modules/analyze');
125

136
const app = express();
147
app.use(bodyParser.json());
158
app.use(cors());
169

17-
app.post('/api/analyze', (req, res) => {
18-
try {
19-
if (!req.body.url) {
20-
throw new Error('URL is missing');
21-
}
22-
23-
const urlToAnalyze = req.body.url;
24-
25-
if (!isURL(urlToAnalyze)) {
26-
throw new Error('Invalid URL');
27-
}
28-
29-
const hostname = url.parse(urlToAnalyze).hostname;
30-
const protocol = url.parse(urlToAnalyze).protocol === 'https:' ? https : http;
31-
const options = {
32-
method: 'HEAD',
33-
timeout: 5000,
34-
};
35-
36-
const start = now();
37-
38-
protocol.request(urlToAnalyze, options, (httpResponse) => {
39-
const isUp = httpResponse.statusCode >= 200 && httpResponse.statusCode < 400;
40-
if (!isUp) {
41-
return res.json({ isUp: false, ipAddress: null, uptime: 0, responseTime: 0 });
42-
}
43-
44-
dns.lookup(hostname, (dnsError, ipAddress) => {
45-
if (dnsError) {
46-
console.error(`Failed to lookup IP address for ${urlToAnalyze}: ${dnsError}`);
47-
return res.status(500).json({ error: 'Internal server error' });
48-
}
49-
50-
// Calculate responseTime
51-
const end = now();
52-
const responseTime = ((end - start) / 1000).toFixed(2);
53-
54-
// calculate uptime
55-
const totalSeconds = (end - start) / 1000; // convert to seconds
56-
const availableSeconds = totalSeconds - (totalSeconds * 0.01); // assuming 99.99% uptime
57-
const uptime = ((availableSeconds / totalSeconds) * 100).toFixed(2);
58-
59-
console.log(`isUp: ${isUp}, ipAddress: ${ipAddress}, uptime: ${uptime}%, responseTime: ${responseTime}s`);
60-
return res.json({ isUp: true, ipAddress, uptime, responseTime });
61-
});
62-
}).on('error', (error) => {
63-
console.error(`Failed to request ${urlToAnalyze}: ${error}`);
64-
return res.json({ isUp: false, ipAddress: null, uptime: 0, responseTime: 0 });
65-
}).end();
66-
} catch (error) {
67-
console.error(`Error analyzing URL: ${error.message}`);
68-
return res.status(400).json({ error: error.message });
69-
}
70-
});
10+
app.post('/api/analyze', analyzeURL);
7111

7212
const port = process.env.PORT || 5000;
7313
app.listen(port, () => {

modules/analyze.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
const http = require('http');
2+
const https = require('https');
3+
const dns = require('dns');
4+
const url = require('url');
5+
const now = require('performance-now');
6+
const { isURL } = require('validator');
7+
8+
function analyzeURL(req, res) {
9+
try {
10+
if (!req.body.url) {
11+
throw new Error('URL is missing');
12+
}
13+
14+
const urlToAnalyze = req.body.url;
15+
16+
if (!isURL(urlToAnalyze)) {
17+
throw new Error('Invalid URL');
18+
}
19+
20+
const hostname = url.parse(urlToAnalyze).hostname;
21+
const protocol = url.parse(urlToAnalyze).protocol === 'https:' ? https : http;
22+
const options = {
23+
method: 'HEAD',
24+
timeout: 5000,
25+
};
26+
27+
const start = now();
28+
29+
protocol.request(urlToAnalyze, options, (httpResponse) => {
30+
const isUp = httpResponse.statusCode >= 200 && httpResponse.statusCode < 400;
31+
if (!isUp) {
32+
return res.json({ isUp: false, ipAddress: null, uptime: 0, responseTime: 0 });
33+
}
34+
35+
dns.lookup(hostname, (dnsError, ipAddress) => {
36+
if (dnsError) {
37+
console.error(`Failed to lookup IP address for ${urlToAnalyze}: ${dnsError}`);
38+
return res.status(500).json({ error: 'Internal server error' });
39+
}
40+
41+
// Calculate responseTime
42+
const end = now();
43+
const responseTime = ((end - start) / 1000).toFixed(2);
44+
45+
// calculate uptime
46+
const totalSeconds = (end - start) / 1000; // convert to seconds
47+
const availableSeconds = totalSeconds - (totalSeconds * 0.01); // assuming 99.99% uptime
48+
const uptime = ((availableSeconds / totalSeconds) * 100).toFixed(2);
49+
50+
console.log(`isUp: ${isUp}, ipAddress: ${ipAddress}, uptime: ${uptime}%, responseTime: ${responseTime}s`);
51+
return res.json({ isUp: true, ipAddress, uptime, responseTime });
52+
});
53+
}).on('error', (error) => {
54+
console.error(`Failed to request ${urlToAnalyze}: ${error}`);
55+
return res.json({ isUp: false, ipAddress: null, uptime: 0, responseTime: 0 });
56+
}).end();
57+
} catch (error) {
58+
console.error(`Error analyzing URL: ${error.message}`);
59+
return res.status(400).json({ error: error.message });
60+
}
61+
}
62+
63+
module.exports = analyzeURL;

0 commit comments

Comments
 (0)