add logging

pull/23/head
koehr 4 years ago
parent 1e430fd398
commit d31ac22c55

@ -1,21 +1,43 @@
const fs = require('fs')
const chalk = require('chalk')
const phantomas = require('phantomas')
const pageData = require('./src/pages.json')
const INPUT_FILE = './pages.txt'
const OUTPUT_FILE = './src/pages.json'
const RECHECK_THRESHOLD = 60*60*24*7*1000 // recheck pages older than 1 week
const REJECT_THRESHOLD = 256000
function calcWeights (url, metrics) {
const m = metrics
const LOGGING_PREFIXES = {
info: `[${chalk.bold.white('II')}]`,
warn: `[${chalk.bold.yellow('WW')}]`,
error: `[${chalk.bold.red('EE')}]`,
debug: `[${chalk.bold.white('DD')}]`,
}
function log (level='info') {
const args = [...arguments].slice(1)
let prefix = LOGGING_PREFIXES[level]
console.log(prefix, ...args)
}
function info () { log('info', ...arguments) }
function warn () { log('warn', ...arguments) }
function error () { log('error', ...arguments) }
function debug () { log('debug', ...arguments) }
function calcWeights (url, m) {
const extraWeight = m.cssSize + m.jsSize + m.webfontSize + m.otherSize
const contentWeight = m.htmlSize + m.jsonSize + m.imageSize + m.base64Size + m.videoSize
if (m.contentSize > REJECT_THRESHOLD) {
warn(url, 'oversized by', m.contentSize - REJECT_THRESHOLD)
}
return { url, contentWeight, extraWeight, stamp: Date.now() }
}
async function generateMetrics (urls) {
console.debug('Checking', urls)
debug('Checking', urls)
const metricsList = []
const keyedPageData = pageData.reduce((acc, page) => {
// stores url/stamp pairs to decide for recheck
@ -28,24 +50,25 @@ async function generateMetrics (urls) {
for (const url of urls) {
if (knownURLs.indexOf(url) >= 0) {
if (now - keyedPageData[url].stamp < RECHECK_THRESHOLD) {
console.debug('skipping known URL', url)
debug('skipping known URL', url)
metricsList.push(keyedPageData[url]) // push old data to list
continue
}
}
try {
console.debug('fetching and analyzing', url)
debug('fetching and analyzing', url)
const results = await phantomas(url)
metricsList.push(calcWeights(url, results.getMetrics()))
const weights = calcWeights(url, results.getMetrics())
metricsList.push(weights) // TODO: what to do with oversized pages?
} catch(error) {
console.error(`failed to analyze ${url}`, error)
error(`failed to analyze ${url}`, error)
}
}
try {
fs.writeFileSync(OUTPUT_FILE, JSON.stringify(metricsList))
} catch (err) {
console.error(`ERROR: failed to write results to ${OUTPUT_FILE}`, err)
error(`failed to write results to ${OUTPUT_FILE}`, err)
}
}
@ -54,5 +77,5 @@ try {
const urls = rawString.split('\n').filter(line => line.startsWith('http'))
generateMetrics(urls)
} catch (err) {
console.error(`ERROR: failed to read page list from ${INPUT_FILE}`, err)
error(`failed to read page list from ${INPUT_FILE}`, err)
}

@ -4,12 +4,14 @@
"scripts": {
"build": "rollup -c",
"dev": "rollup -c -w",
"start": "sirv public"
"start": "sirv public",
"upload": "scp -r public/* 250kb.club:/srv/http/250kb.club/"
},
"devDependencies": {
"@rollup/plugin-commonjs": "^14.0.0",
"@rollup/plugin-json": "^4.1.0",
"@rollup/plugin-node-resolve": "^8.0.0",
"chalk": "^4.1.0",
"phantomas": "^2.0.0",
"rollup": "^2.3.4",
"rollup-plugin-livereload": "^2.0.0",

@ -141,6 +141,13 @@ ansi-styles@^3.2.1:
dependencies:
color-convert "^1.9.0"
ansi-styles@^4.1.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
dependencies:
color-convert "^2.0.1"
ansicolors@~0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979"
@ -257,6 +264,14 @@ chalk@^2.0.0:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chokidar@^3.3.0:
version "3.4.3"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b"
@ -292,11 +307,23 @@ color-convert@^1.9.0:
dependencies:
color-name "1.1.3"
color-convert@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
dependencies:
color-name "~1.1.4"
color-name@1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
commander@^2.20.0:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
@ -1003,7 +1030,7 @@ supports-color@^5.3.0:
dependencies:
has-flag "^3.0.0"
supports-color@^7.0.0:
supports-color@^7.0.0, supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==

Loading…
Cancel
Save