@plasma-platform/tm-perfomance-check
Version:
Check page perfomance metrics on test machine
111 lines (93 loc) • 3.06 kB
JavaScript
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);
})();