grafana/tools/phantomjs/render.js

86 lines
2.4 KiB
JavaScript
Raw Normal View History

(function() {
'use strict';
2018-02-15 05:42:17 -06:00
var page = require('webpage').create();
var args = require('system').args;
var params = {};
var regexp = /^([^=]+)=([^$]+)/;
2018-02-15 05:42:17 -06:00
args.forEach(function(arg) {
var parts = arg.match(regexp);
if (!parts) { return; }
params[parts[1]] = parts[2];
});
2018-02-15 05:42:17 -06:00
var usage = "url=<url> png=<filename> width=<width> height=<height> renderKey=<key>";
2018-02-15 05:42:17 -06:00
if (!params.url || !params.png || !params.renderKey || !params.domain) {
console.log(usage);
phantom.exit();
}
2018-02-15 05:42:17 -06:00
phantom.addCookie({
'name': 'renderKey',
'value': params.renderKey,
'domain': params.domain,
});
2018-02-15 05:42:17 -06:00
page.viewportSize = {
width: params.width || '800',
height: params.height || '400'
};
2018-02-15 05:42:17 -06:00
var timeoutMs = (parseInt(params.timeout) || 10) * 1000;
var waitBetweenReadyCheckMs = 50;
var totalWaitMs = 0;
2018-02-15 05:42:17 -06:00
page.open(params.url, function (status) {
console.log('Loading a web page: ' + params.url + ' status: ' + status, timeoutMs);
2018-02-15 05:42:17 -06:00
page.onError = function(msg, trace) {
var msgStack = ['ERROR: ' + msg];
if (trace && trace.length) {
msgStack.push('TRACE:');
trace.forEach(function(t) {
msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function +'")' : ''));
});
}
console.error(msgStack.join('\n'));
};
2018-02-15 05:42:17 -06:00
function checkIsReady() {
var panelsRendered = page.evaluate(function() {
var panelCount = document.querySelectorAll('.panel').length;
return window.panelsRendered >= panelCount;
});
2018-02-15 05:42:17 -06:00
if (panelsRendered || totalWaitMs > timeoutMs) {
var bb = page.evaluate(function () {
return document.getElementsByClassName("dashboard-container")[0].getBoundingClientRect();
});
// reset viewport to render full page
page.viewportSize = {
width: bb.width,
height: bb.height
};
2018-02-15 05:42:17 -06:00
page.clipRect = {
top: bb.top,
left: bb.left,
width: bb.width,
height: bb.height
};
2018-02-15 05:42:17 -06:00
page.render(params.png);
phantom.exit();
} else {
totalWaitMs += waitBetweenReadyCheckMs;
setTimeout(checkIsReady, waitBetweenReadyCheckMs);
}
}
2018-02-15 05:42:17 -06:00
setTimeout(checkIsReady, waitBetweenReadyCheckMs);
});
2018-02-15 05:42:17 -06:00
})();