diff --git a/index.js b/index.js index 7a29ae4..fb52013 100644 --- a/index.js +++ b/index.js @@ -1,35 +1,36 @@ const puppeteer = require('puppeteer'); -const MY_PACKAGE_SELECTOR_ID = 'table[style="margin-top:-10px;"] tr:first-child+tr'; -const DATA_SELECTOR='packagecol3'; +const MY_PACKAGE_SELECTOR_ID = + 'table[style="margin-top:-10px;"] tr:first-child+tr'; +const DATA_SELECTOR = 'packagecol3'; -const REGEX = /\d+\.\d{0,2}/g +const REGEX = /\d+\.\d{0,2}/g; async function getUsage() { const browser = await puppeteer.launch({ - executablePath: "/usr/bin/chromium-snapshot-bin", - args: ["--proxy-server=socks5://10.8.0.14:1080"], - headless: false + executablePath: '/usr/bin/chromium-snapshot-bin', + args: ['--proxy-server=socks5://10.8.0.14:1080'], + headless: true, }); const page = await browser.newPage(); await page.goto('http://portal.actcorp.in/group/blr/myaccount'); await page.click(MY_PACKAGE_SELECTOR_ID); await page.waitFor(3000), - text = await page.evaluate((sel) => { - return document.getElementsByClassName(sel)[3].innerText; - }, DATA_SELECTOR); - - [used,total] = text.match(REGEX).map((x) => parseFloat(x)) - + (text = await page.evaluate(sel => { + return document.getElementsByClassName(sel)[3].innerText; + }, DATA_SELECTOR)); + browser.close(); + [used, total] = text.match(REGEX).map(x => parseFloat(x)); + return { used: used, - total: total + total: total, }; } module.exports = { - getUsage: getUsage + getUsage: getUsage, }; \ No newline at end of file diff --git a/server.js b/server.js index cecfc5b..a610d06 100644 --- a/server.js +++ b/server.js @@ -5,32 +5,38 @@ const metrics = require('./index'); const collectDefaultMetrics = pClient.collectDefaultMetrics; -const requestHandler = (req, res) => { - switch(req.url) { - case '/metrics': - metrics.getUsage((metrics) => { - let usedGauge = new pClient.Gauge({ name: 'act_fup_usage_gigabytes_total', help: 'ACT current usage in GB' }); - usedGauge.set(metrics.used); - let totalGauge = new pClient.Gauge({ name: 'act_fup_max_gigabytes_total', help: 'ACT FUP limit in GB' }); - totalGauge.set(metrics.total) - let register = pClient.register; +const requestHandler = async (req, res) => { + let date = new Date(Date.now()).toLocaleString(); + console.log(`${date}: ${req.url}`); + switch (req.url) { + case '/metrics': + let m = await metrics.getUsage(); + let usedGauge = new pClient.Gauge({ + name: 'act_fup_usage_gigabytes_total', + help: 'ACT current usage in GB', + }); + usedGauge.set(m.used); + let totalGauge = new pClient.Gauge({ + name: 'act_fup_max_gigabytes_total', + help: 'ACT FUP limit in GB', + }); + totalGauge.set(m.total); + let register = pClient.register; - res.set('Content-Type', register.contentType); - res.end(register.metrics()); - }); - - break; - default: - break; - } -} + res.setHeader('Content-Type', register.contentType); + res.end(register.metrics()); + break; + default: + break; + } +}; -const server = http.createServer(requestHandler) +const server = http.createServer(requestHandler); -server.listen(port, (err) => { - if (err) { - return console.log('something bad happened', err) - } +server.listen(port, err => { + if (err) { + return console.log('something bad happened', err); + } - console.log(`server is listening on ${port}`) -}) \ No newline at end of file + console.log(`server is listening on ${port}`); +});