mirror of https://github.com/grafana/grafana
when migrating from govendor to dep we broke the phantomjs rendering. ref #10602pull/10610/head
parent
2d090829d8
commit
49673c509d
@ -0,0 +1,86 @@ |
||||
(function() { |
||||
'use strict'; |
||||
|
||||
var page = require('webpage').create(); |
||||
var args = require('system').args; |
||||
var params = {}; |
||||
var regexp = /^([^=]+)=([^$]+)/; |
||||
|
||||
args.forEach(function(arg) { |
||||
var parts = arg.match(regexp); |
||||
if (!parts) { return; } |
||||
params[parts[1]] = parts[2]; |
||||
}); |
||||
|
||||
var usage = "url=<url> png=<filename> width=<width> height=<height> renderKey=<key>"; |
||||
|
||||
if (!params.url || !params.png || !params.renderKey || !params.domain) { |
||||
console.log(usage); |
||||
phantom.exit(); |
||||
} |
||||
|
||||
phantom.addCookie({ |
||||
'name': 'renderKey', |
||||
'value': params.renderKey, |
||||
'domain': params.domain, |
||||
}); |
||||
|
||||
page.viewportSize = { |
||||
width: params.width || '800', |
||||
height: params.height || '400' |
||||
}; |
||||
|
||||
var timeoutMs = (parseInt(params.timeout) || 10) * 1000; |
||||
var waitBetweenReadyCheckMs = 50; |
||||
var totalWaitMs = 0; |
||||
|
||||
page.open(params.url, function (status) { |
||||
console.log('Loading a web page: ' + params.url + ' status: ' + status, timeoutMs); |
||||
|
||||
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')); |
||||
}; |
||||
|
||||
function checkIsReady() { |
||||
var panelsRendered = page.evaluate(function() { |
||||
if (!window.angular) { return false; } |
||||
var body = window.angular.element(document.body); |
||||
if (!body.injector) { return false; } |
||||
if (!body.injector()) { return false; } |
||||
|
||||
var rootScope = body.injector().get('$rootScope'); |
||||
if (!rootScope) {return false;} |
||||
var panels = angular.element('div.panel:visible').length; |
||||
return rootScope.panelsRendered >= panels; |
||||
}); |
||||
|
||||
if (panelsRendered || totalWaitMs > timeoutMs) { |
||||
var bb = page.evaluate(function () { |
||||
return document.getElementsByClassName("main-view")[0].getBoundingClientRect(); |
||||
}); |
||||
|
||||
page.clipRect = { |
||||
top: bb.top, |
||||
left: bb.left, |
||||
width: bb.width, |
||||
height: bb.height |
||||
}; |
||||
|
||||
page.render(params.png); |
||||
phantom.exit(); |
||||
} else { |
||||
totalWaitMs += waitBetweenReadyCheckMs; |
||||
setTimeout(checkIsReady, waitBetweenReadyCheckMs); |
||||
} |
||||
} |
||||
|
||||
setTimeout(checkIsReady, waitBetweenReadyCheckMs); |
||||
}); |
||||
})(); |
Loading…
Reference in new issue