3 Commits
Author SHA1 Message Date
pj 1627019650 link the cloudflare speedtest package 2026-09-14 12:25:44 +05:30
pj 84cdf1b4c9 use constrained chromium renderer processes 2026-09-14 12:24:24 +05:30
pj 40051dddc7 fit chromium within the monitoring budget 2026-09-14 12:20:48 +05:30
4 changed files with 6 additions and 6 deletions

No files matched your search

+1 -1
View File
@@ -1,5 +1,5 @@
# Internet Performance Exporter
Prometheus metrics for Cloudflare edge speed tests from headless Chromium.
Prometheus metrics from [@cloudflare/speedtest](https://github.com/cloudflare/speedtest) running in headless Chromium.
`docker run -p 9798:9798 ghcr.io/priyanshujain/internet-performance-exporter:latest`
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "internet-performance-exporter",
"version": "0.1.0",
"version": "0.1.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "internet-performance-exporter",
"version": "0.1.0",
"version": "0.1.3",
"dependencies": {
"@cloudflare/speedtest": "1.14.0"
},
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "internet-performance-exporter",
"version": "0.1.0",
"version": "0.1.3",
"private": true,
"type": "module",
"scripts": {
+2 -2
View File
@@ -11,7 +11,7 @@ const library = await readFile(new URL('./node_modules/@cloudflare/speedtest/dis
let result = { up: 0 }
let active
const page = token => `<!doctype html><img src="/hold/${token}"><script type="module">import SpeedTest from '/speedtest.js';const send=body=>fetch('/result/${token}',{method:'POST',body:JSON.stringify(body)});const test=new SpeedTest({autoStart:false,logAimApiUrl:null,measurements:[['latency',20],['download',1e5,1,true],['download',1e6,3],['upload',1e5,3,true],['upload',1e6,3],['download',1e7,3],['upload',1e7,3],['download',5e7,2],['upload',25e6,2]].map(([type,a,count,bypassMinDuration])=>type==='latency'?{type,numPackets:a}:{type,bytes:a,count,bypassMinDuration})});test.onFinish=r=>send({result:r.getSummary()});test.onError=error=>send({error});test.play()</script>`
const page = token => `<!doctype html><img src="/hold/${token}"><script type="module">import SpeedTest from '/speedtest.js';const send=body=>fetch('/result/${token}',{method:'POST',body:JSON.stringify(body)});const test=new SpeedTest({autoStart:false,logAimApiUrl:null,measurements:[['latency',20],['download',1e5,1,true],['download',1e6,3],['upload',1e5,3,true],['upload',1e6,3],['download',1e7,3],['upload',1e7,3],['download',25e6,2]].map(([type,a,count,bypassMinDuration])=>type==='latency'?{type,numPackets:a}:{type,bytes:a,count,bypassMinDuration})});test.onFinish=r=>send({result:r.getSummary()});test.onError=error=>send({error});test.play()</script>`
const metrics = () => {
const values = {
@@ -56,7 +56,7 @@ const run = () => {
const token = randomUUID()
let finish
const done = new Promise(resolve => { let settled = false; finish = () => { if (!settled) { settled = true; resolve() } }; active = { token, resolve: finish } })
const child = spawn(chromium, ['--headless=new', '--no-sandbox', '--disable-dev-shm-usage', '--dump-dom', `http://127.0.0.1:${port}/run/${token}`], { stdio: 'ignore' })
const child = spawn(chromium, ['--headless=new', '--no-sandbox', '--disable-gpu', '--disable-dev-shm-usage', '--renderer-process-limit=1', '--dump-dom', `http://127.0.0.1:${port}/run/${token}`], { stdio: 'ignore' })
const timer = setTimeout(() => { result.up = 0; finish() }, timeout)
child.on('error', () => { result.up = 0; finish() })
child.on('exit', () => { if (active) { result.up = 0; finish() } })