add logging

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

@ -1,21 +1,43 @@
const fs = require('fs') const fs = require('fs')
const chalk = require('chalk')
const phantomas = require('phantomas') const phantomas = require('phantomas')
const pageData = require('./src/pages.json') const pageData = require('./src/pages.json')
const INPUT_FILE = './pages.txt' const INPUT_FILE = './pages.txt'
const OUTPUT_FILE = './src/pages.json' const OUTPUT_FILE = './src/pages.json'
const RECHECK_THRESHOLD = 60*60*24*7*1000 // recheck pages older than 1 week const RECHECK_THRESHOLD = 60*60*24*7*1000 // recheck pages older than 1 week
const REJECT_THRESHOLD = 256000
function calcWeights (url, metrics) { const LOGGING_PREFIXES = {
const m = metrics 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 extraWeight = m.cssSize + m.jsSize + m.webfontSize + m.otherSize
const contentWeight = m.htmlSize + m.jsonSize + m.imageSize + m.base64Size + m.videoSize 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() } return { url, contentWeight, extraWeight, stamp: Date.now() }
} }
async function generateMetrics (urls) { async function generateMetrics (urls) {
console.debug('Checking', urls) debug('Checking', urls)
const metricsList = [] const metricsList = []
const keyedPageData = pageData.reduce((acc, page) => { const keyedPageData = pageData.reduce((acc, page) => {
// stores url/stamp pairs to decide for recheck // stores url/stamp pairs to decide for recheck
@ -28,24 +50,25 @@ async function generateMetrics (urls) {
for (const url of urls) { for (const url of urls) {
if (knownURLs.indexOf(url) >= 0) { if (knownURLs.indexOf(url) >= 0) {
if (now - keyedPageData[url].stamp < RECHECK_THRESHOLD) { 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 metricsList.push(keyedPageData[url]) // push old data to list
continue continue
} }
} }
try { try {
console.debug('fetching and analyzing', url) debug('fetching and analyzing', url)
const results = await phantomas(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) { } catch(error) {
console.error(`failed to analyze ${url}`, error) error(`failed to analyze ${url}`, error)
} }
} }
try { try {
fs.writeFileSync(OUTPUT_FILE, JSON.stringify(metricsList)) fs.writeFileSync(OUTPUT_FILE, JSON.stringify(metricsList))
} catch (err) { } 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')) const urls = rawString.split('\n').filter(line => line.startsWith('http'))
generateMetrics(urls) generateMetrics(urls)
} catch (err) { } 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": { "scripts": {
"build": "rollup -c", "build": "rollup -c",
"dev": "rollup -c -w", "dev": "rollup -c -w",
"start": "sirv public" "start": "sirv public",
"upload": "scp -r public/* 250kb.club:/srv/http/250kb.club/"
}, },
"devDependencies": { "devDependencies": {
"@rollup/plugin-commonjs": "^14.0.0", "@rollup/plugin-commonjs": "^14.0.0",
"@rollup/plugin-json": "^4.1.0", "@rollup/plugin-json": "^4.1.0",
"@rollup/plugin-node-resolve": "^8.0.0", "@rollup/plugin-node-resolve": "^8.0.0",
"chalk": "^4.1.0",
"phantomas": "^2.0.0", "phantomas": "^2.0.0",
"rollup": "^2.3.4", "rollup": "^2.3.4",
"rollup-plugin-livereload": "^2.0.0", "rollup-plugin-livereload": "^2.0.0",

@ -141,6 +141,13 @@ ansi-styles@^3.2.1:
dependencies: dependencies:
color-convert "^1.9.0" 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: ansicolors@~0.3.2:
version "0.3.2" version "0.3.2"
resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" 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" escape-string-regexp "^1.0.5"
supports-color "^5.3.0" 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: chokidar@^3.3.0:
version "3.4.3" version "3.4.3"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b"
@ -292,11 +307,23 @@ color-convert@^1.9.0:
dependencies: dependencies:
color-name "1.1.3" 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: color-name@1.1.3:
version "1.1.3" version "1.1.3"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 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: commander@^2.20.0:
version "2.20.3" version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
@ -1003,7 +1030,7 @@ supports-color@^5.3.0:
dependencies: dependencies:
has-flag "^3.0.0" has-flag "^3.0.0"
supports-color@^7.0.0: supports-color@^7.0.0, supports-color@^7.1.0:
version "7.2.0" version "7.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==

Loading…
Cancel
Save