Skip to content

Commit 1771ea6

Browse files
committed
added timezone support
1 parent af3e4c4 commit 1771ea6

File tree

2 files changed

+51
-48
lines changed

2 files changed

+51
-48
lines changed

src/app.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ async function main() {
1212
if (command === undefined) {
1313
const logger = new PluginLogger();
1414
const browser = new Browser(logger);
15-
await browser.start();
16-
1715
const plugin = new GrpcPlugin(logger, browser);
1816
plugin.start();
1917
}
@@ -26,9 +24,8 @@ async function main() {
2624

2725
const logger = new ConsoleLogger();
2826
const browser = new Browser(logger);
29-
await browser.start();
30-
3127
const server = new HttpServer({port: argv.port}, logger, browser);
28+
3229
server.start();
3330

3431
} else {

src/browser.ts

Lines changed: 50 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,13 @@
11
import * as os from 'os';
22
import * as puppeteer from 'puppeteer';
33
import { Logger } from './logger';
4-
import { registerExitCleanUp } from './exit';
54
import uniqueFilename = require('unique-filename');
65

76
export class Browser {
8-
private instance;
97

108
constructor(private log: Logger) {
119
}
1210

13-
async start() {
14-
this.log.info("Starting chrome");
15-
this.instance = await puppeteer.launch();
16-
17-
registerExitCleanUp(() => {
18-
this.instance.close();
19-
});
20-
}
21-
2211
validateOptions(options) {
2312
options.width = parseInt(options.width) || 1000;
2413
options.height = parseInt(options.height) || 500;
@@ -34,40 +23,57 @@ export class Browser {
3423
}
3524

3625
async render(options) {
37-
const page = await this.instance.newPage();
38-
39-
this.validateOptions(options);
40-
41-
await page.setViewport({
42-
width: options.width,
43-
height: options.height,
44-
deviceScaleFactor: 1,
45-
});
46-
47-
await page.setCookie({
48-
'name': 'renderKey',
49-
'value': options.renderKey,
50-
'domain': options.domain,
51-
});
52-
53-
await page.goto(options.url);
54-
55-
// wait for all panels to render
56-
await page.waitForFunction(() => {
57-
var panelCount = document.querySelectorAll('.panel').length;
58-
return (<any>window).panelsRendered >= panelCount;
59-
}, {
60-
timeout: options.timeout * 1000
61-
});
62-
63-
if (!options.filePath) {
64-
options.filePath = uniqueFilename(os.tmpdir()) + '.png';
26+
let browser;
27+
let page;
28+
let env = Object.assign({}, process.env);
29+
30+
try {
31+
this.validateOptions(options);
32+
33+
// set env timezone
34+
env.TZ = options.timezone || process.env.TZ;
35+
36+
browser = await puppeteer.launch({env: env});
37+
page = await browser.newPage();
38+
39+
await page.setViewport({
40+
width: options.width,
41+
height: options.height,
42+
deviceScaleFactor: 1,
43+
});
44+
45+
await page.setCookie({
46+
'name': 'renderKey',
47+
'value': options.renderKey,
48+
'domain': options.domain,
49+
});
50+
51+
await page.goto(options.url);
52+
53+
// wait for all panels to render
54+
await page.waitForFunction(() => {
55+
var panelCount = document.querySelectorAll('.panel').length;
56+
return (<any>window).panelsRendered >= panelCount;
57+
}, {
58+
timeout: options.timeout * 1000
59+
});
60+
61+
if (!options.filePath) {
62+
options.filePath = uniqueFilename(os.tmpdir()) + '.png';
63+
}
64+
65+
await page.screenshot({path: options.filePath});
66+
67+
return { filePath: options.filePath };
68+
69+
} finally {
70+
if (page) {
71+
await page.close();
72+
}
73+
if (browser) {
74+
await browser.close();
75+
}
6576
}
66-
67-
await page.screenshot({path: options.filePath});
68-
page.close();
69-
70-
return { filePath: options.filePath };
7177
}
7278
}
7379

0 commit comments

Comments
 (0)