diff --git a/index.js b/index.js index 2b5edcf..7a29ae4 100644 --- a/index.js +++ b/index.js @@ -5,11 +5,11 @@ const DATA_SELECTOR='packagecol3'; const REGEX = /\d+\.\d{0,2}/g -async function run() { +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: false }); const page = await browser.newPage(); @@ -17,12 +17,19 @@ async function run() { await page.click(MY_PACKAGE_SELECTOR_ID); await page.waitFor(3000), text = await page.evaluate((sel) => { - return document.getElementsByClassName(sel)[3].innerText; - }, DATA_SELECTOR) + return document.getElementsByClassName(sel)[3].innerText; + }, DATA_SELECTOR); [used,total] = text.match(REGEX).map((x) => parseFloat(x)) browser.close(); + + return { + used: used, + total: total + }; } -run() \ No newline at end of file +module.exports = { + getUsage: getUsage +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0b99aa8..b54df5b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,11 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, + "bintrees": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.1.tgz", + "integrity": "sha1-DmVcm5wkNeqraL9AJyJtK1WjRSQ=" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -212,6 +217,14 @@ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=" }, + "prom-client": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-11.0.0.tgz", + "integrity": "sha512-UM4uYDwmA7x9yTq+AZcL4lU/XF11RkbQWbIouFaVMLxdV4qBB5CEmEosQlR1lGvduBuS1IWonHFh1WBtFSoZ3A==", + "requires": { + "tdigest": "^0.1.1" + } + }, "proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", @@ -267,6 +280,14 @@ "safe-buffer": "~5.1.0" } }, + "tdigest": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.1.tgz", + "integrity": "sha1-Ljyyw56kSeVdHmzZEReszKRYgCE=", + "requires": { + "bintrees": "1.0.1" + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", diff --git a/package.json b/package.json index 4039d00..c971fc7 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "author": "Nemo ", "license": "MIT", "dependencies": { + "prom-client": "^11.0.0", "puppeteer": "^1.4.0" } } diff --git a/server.js b/server.js new file mode 100644 index 0000000..cecfc5b --- /dev/null +++ b/server.js @@ -0,0 +1,36 @@ +const http = require('http'); +const port = 3000; +const pClient = require('prom-client'); +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; + + res.set('Content-Type', register.contentType); + res.end(register.metrics()); + }); + + break; + default: + break; + } +} + +const server = http.createServer(requestHandler) + +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