UNPKG

@plasma-platform/tm-perfomance-check

Version:

Check page perfomance metrics on test machine

111 lines (93 loc) 3.06 kB
#!/usr/bin/env node import 'babel-polyfill'; import fetch from 'isomorphic-fetch'; import commandLineArgs from 'command-line-args'; const config = require('../config/config.json'); // eslint-disable-line const optionDefinitions = [ { name: 'verbose', alias: 'v', type: String }, // Return all metrics { name: 'fps', type: String }, // fps checks { name: 'dom', type: String }, // dom ready time { name: 'load', type: String }, // full load time { name: 'error', type: String }, // throw error if metrics are fail { name: 'url', type: String }, // url of resource { name: 'serviceURL', type: String }, // service url ]; const options = commandLineArgs(optionDefinitions); if (options.serviceURL !== undefined) config.serviceURL = options.serviceURL; if (options.url === undefined) { console.log('No url provided'); process.exit(5); } console.log(options); function logFPS(result) { if (result.framesPerSec_raf < config.framesPerSec_raf) { console.log( `FPS is too low. ${Math.ceil( result.framesPerSec_raf, )}fps, but ${config.framesPerSec_raf}fps minimum.`, ); // eslint-disable-line if (options.error !== undefined) process.exit(2); } else { console.log(`FPS is ${Math.ceil(result.framesPerSec_raf)}.`); // eslint-disable-line } } function logLoad(result) { if (result.loadTime > config.loadTime) { console.log( `Max full page load time exceeded. ${result.loadTime}ms, but ${config.loadTime}ms maximum.`, ); // eslint-disable-line if (options.error !== undefined) process.exit(3); } else { console.log(`Load time is ${result.loadTime}ms.`); // eslint-disable-line } } function logDOM(result) { if (result.domReadyTime > config.domReadyTime) { console.log( `DOM ready time exceeded. ${result.domReadyTime}ms, but ${config.domReadyTime}ms maximum.`, ); // eslint-disable-line if (options.error !== undefined) process.exit(4); } else { console.log(`DOM ready time is ${result.domReadyTime}ms.`); // eslint-disable-line } } (async () => { let response; let result; try { response = await fetch(`${config.serviceURL}?url=${options.url}`); } catch (error) { console.log(error.message); // eslint-disable-line process.exit(1); } if (!response.ok) { console.log(response.statusCode); // eslint-disable-line process.exit(1); } try { result = await response.json(); } catch (error) { console.log(error.message); // eslint-disable-line process.exit(1); } if (result.framesPerSec_raf === undefined) { console.log('JSON parse problem'); // eslint-disable-line process.exit(1); } if (options.verbose !== undefined) { console.log(result); // eslint-disable-line process.exit(0); } if (options.fps !== undefined) { logFPS(result); } else if (options.load !== undefined) { logLoad(result); } else if (options.dom !== undefined) { logDOM(result); } else { logFPS(result); logLoad(result); logDOM(result); } process.exit(0); })();