@@ -30,16 +30,21 @@ let isReady = false;
3030let browser = null ;
3131
3232app . get ( '/health' , ( req , res ) => {
33+ log ( '/health' ) ;
34+
3335 calls . health ++ ;
34- console . log ( 'serving /health' ) ;
36+
3537 deliverJson ( res , { isReady, calls} , isReady ? 200 : 503 ) ;
3638} ) ;
3739
3840app . post ( '/from-html' , async ( req , res ) => {
41+ log ( '/from-html' ) ;
42+
3943 calls . fromHtml ++ ;
44+
4045 const html = req . body . html ;
4146 const options = getPdfOptions ( req . body . options ) ;
42- const htmlFile = md5 ( html . substr ( 0 , 100 ) ) + '.html' ;
47+ const htmlFile = generateFileName ( ) + '.html' ;
4348 const fullHtmlPath = path . join ( storagePath , htmlFile ) ;
4449
4550 fs . writeFileSync ( fullHtmlPath , html ) ;
@@ -48,9 +53,9 @@ app.post('/from-html', async (req, res) => {
4853 try {
4954 pdfFilePath = await generatePdf ( `file://${ fullHtmlPath } ` , req . query . media , options ) ;
5055 } catch ( err ) {
51- console . log ( '/from-html: error generating PDF' , e ) ;
52- let msg = 'failure generating PDF' ;
53- deliverJson ( res , { msg , err } , 500 ) ;
56+ log ( '/from-html: error generating PDF' , e ) ;
57+ deliverJson ( res , { msg : 'failure generating PDF' , err } , 500 ) ;
58+
5459 return ;
5560 }
5661
@@ -59,23 +64,22 @@ app.post('/from-html', async (req, res) => {
5964} ) ;
6065
6166app . get ( '/from-url' , async ( req , res ) => {
67+ log ( '/from-url' ) ;
68+
6269 calls . fromUrl ++ ;
6370 let url = req . query . url ;
64- console . log ( '/from-url' ) ;
6571
6672 if ( ! url ) {
67- let msg = 'missing parameter: \'url\'' ;
68- deliverJson ( res , { msg, params : req . params } , 400 ) ;
73+ deliverJson ( res , { msg : 'missing parameter: \'url\'' , params : req . params } , 400 ) ;
6974 return ;
7075 }
7176
72- let pdfFilePath ;
7377 try {
74- pdfFilePath = await generatePdf ( withHttp ( url ) , req . query . media ) ;
78+ let pdfFilePath = await generatePdf ( withHttp ( url ) , req . query . media ) ;
7579
7680 deliverPdfFile ( res , pdfFilePath ) ;
7781 } catch ( err ) {
78- console . log ( '/from-url: error generating PDF' , e ) ;
82+ log ( '/from-url: error generating PDF' , e ) ;
7983 let msg = 'failure generating PDF' ;
8084
8185 deliverJson ( res , { msg, err} , 500 ) ;
@@ -93,42 +97,46 @@ function deliverJson(res, resp, status = 200) {
9397}
9498
9599function deliverPdfFile ( res , pdfFilePath ) {
96- console . log ( 'deliverPdfFile: going to deliver PDF' , pdfFilePath ) ;
100+ log ( 'deliverPdfFile: going to deliver PDF' , pdfFilePath ) ;
101+
97102 const reader = fs . createReadStream ( pdfFilePath ) ;
103+
98104 res . setHeader ( 'Content-Length' , fs . statSync ( pdfFilePath ) . size ) ;
99105 res . setHeader ( 'Content-Type' , 'application/pdf' ) ;
100106 res . setHeader ( 'Content-Disposition' , 'inline' ) ;
101107 reader . on ( 'open' , ( ) => {
102108 reader . pipe ( res ) ;
103109 } ) ;
104110 reader . on ( 'close' , ( ) => {
105- console . log ( 'deliverPdfFile: going to remove file' , pdfFilePath ) ;
111+ log ( 'deliverPdfFile: going to remove file' , pdfFilePath ) ;
106112 fs . unlinkSync ( pdfFilePath ) ;
107113 } ) ;
108114}
109115
110116async function generatePdf ( url , media , options = { } ) {
111- console . log ( 'generatePdf: browser.newPage' ) ;
117+ log ( 'generatePdf: browser.newPage' ) ;
118+
112119 const page = await browser . newPage ( ) ;
113120
114- console . log ( 'generatePdf: emulateMediaType' ) ;
115- await page . emulateMediaType ( media || 'screen' ) ;
121+ log ( 'generatePdf: emulateMediaType' ) ;
116122
123+ await page . emulateMediaType ( media || 'screen' ) ;
117124 await page . setViewport ( {
118125 width : 1200 ,
119126 height : 800 ,
120127 isMobile : false ,
121128 } ) ;
122129
123- console . log ( 'generatePdf: goto' , url ) ;
130+ log ( 'generatePdf: goto' , url ) ;
131+
124132 await page . goto ( url , {
125133 waitUntil : 'networkidle2' ,
126134 } ) ;
127135
128- let filename = md5 ( url ) + '.pdf' ;
136+ let filename = generateFileName ( ) + '.pdf' ;
129137 const pdfFilePath = path . join ( storagePath , filename ) ;
130138
131- console . log ( 'generatePdf: generate PDF' , pdfFilePath ) ;
139+ log ( 'generatePdf: generate PDF' , pdfFilePath ) ;
132140 await page . pdf ( {
133141 path : pdfFilePath ,
134142 scale : parseFloat ( 1 ) ,
@@ -142,8 +150,14 @@ async function generatePdf(url, media, options = {}) {
142150 return pdfFilePath ;
143151}
144152
145- function md5 ( seed ) {
146- return crypto . createHash ( 'md5' ) . update ( seed ) . digest ( 'hex' ) ;
153+ function generateFileName ( ) {
154+ return crypto . randomBytes ( 20 ) . toString ( 'hex' )
155+ }
156+
157+ function log ( message ) {
158+ let date = ( new Date ) . toLocaleString ( ) ;
159+
160+ console . log ( `[${ date } ] ${ message } ` ) ;
147161}
148162
149163function getPdfOptions ( options ) {
@@ -181,8 +195,8 @@ function getPdfOptions(options) {
181195}
182196
183197app . listen ( port , ( ) => {
184- console . log ( `Kool PDF service running at port ${ port } ` ) ;
185- console . log ( 'Going to start puppeter' ) ;
198+ log ( `Kool PDF service running at port ${ port } ` ) ;
199+ log ( 'Going to start puppeter' ) ;
186200
187201 ( async ( ) => {
188202 browser = await puppeteer . launch ( {
@@ -193,7 +207,7 @@ app.listen(port, () => {
193207 ] ,
194208 } ) ;
195209
196- console . log ( 'Started puppeteer; setting service state to Ready' ) ;
210+ log ( 'Started puppeteer; setting service state to Ready' ) ;
197211 isReady = true ;
198212 } ) ( ) ;
199213} ) ;
0 commit comments