From 9c355abb2b8dd07993cec527ecaddabccf314c74 Mon Sep 17 00:00:00 2001 From: Chainarong Tangsurakit Date: Tue, 12 Jun 2018 19:09:01 +0700 Subject: [PATCH 1/2] #47 Enchancement to take screenshot only successful status code (2xx, 3xx) --- README.md | 3 +++ src/capture.js | 51 ++++++++++++++++++++++++++++++++------------------ src/options.js | 1 + 3 files changed, 37 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 679c3a9..b0ca353 100644 --- a/README.md +++ b/README.md @@ -349,6 +349,9 @@ Few rules:
cookies
Configure cookies that will be contained in request. HTTP message body is the easiest way for sending cookies to Manet (ex: using JSON format).
+
onlySuccessfulStatusCode
+
Take screenshot only when http status code is below 400 (a.k.a. 2xx, 3xx). (default is `false`)
+ diff --git a/src/capture.js b/src/capture.js index 4aabeb7..eb184f0 100644 --- a/src/capture.js +++ b/src/capture.js @@ -4,6 +4,7 @@ const _ = require('lodash'), fs = require('fs-extra'), logger = require('winston'), path = require('path'), + request = require('request'), squirrel = require('squirrel'), crypto = require('crypto'), utils = require('./utils'), @@ -87,25 +88,39 @@ function minimizeImage(src, dest, cb) { /* Screenshot capturing runner */ function runCapturingProcess(options, config, outputFile, base64, onFinish) { - const scriptFile = utils.filePath(SCRIPT_FILE), - command = cliCommand(config).split(/[ ]+/), - cmd = _.union(command, [scriptFile, base64, outputFile]), - opts = { - timeout: config.timeout - }; - - logger.debug( - 'Options for script: %s, base64: %s, command: %s', - JSON.stringify(options), base64, JSON.stringify(cmd) - ); + request({ + uri: options.url, + method: 'HEAD' + }, function (error, response) { + if (error) { + onFinish(error) + } - utils.execProcess(cmd, opts, (error) => { - if (config.compress) { - minimizeImage(outputFile, config.storage, () => onFinish(error)); - } else { - onFinish(error); + if (!!options.onlySuccessfulStatusCode && response.statusCode >= 400) { + logger.error(`URL Status code is ${response.statusCode}`); + return onFinish(new Error(`URL Status code is ${response.statusCode}`)) } - }); + + const scriptFile = utils.filePath(SCRIPT_FILE), + command = cliCommand(config).split(/[ ]+/), + cmd = _.union(command, [scriptFile, base64, outputFile]), + opts = { + timeout: config.timeout + }; + + logger.debug( + 'Options for script: %s, base64: %s, command: %s', + JSON.stringify(options), base64, JSON.stringify(cmd) + ); + + utils.execProcess(cmd, opts, (error) => { + if (config.compress) { + minimizeImage(outputFile, config.storage, () => onFinish(error)); + } else { + onFinish(error); + } + }); + }) } @@ -130,7 +145,7 @@ function screenshot(options, config, onFinish) { logger.info('Capture site screenshot: "%s"', options.url); - if (options.force || !conf.cache) { + if (options.force || !conf.cache || options.onlySuccessfulStatusCode) { retrieveImageFromSite(); } else { fs.exists(file, (exists) => diff --git a/src/options.js b/src/options.js index 84a8727..0586e85 100644 --- a/src/options.js +++ b/src/options.js @@ -12,6 +12,7 @@ const _ = require('lodash'), function createSchema() { return joi.object().keys({ force: joi.boolean(), + onlySuccessfulStatusCode: joi.boolean(), url: joi.string().trim().required(), agent: joi.string().trim(), headers: joi.string().trim(), From 432b48294564bd75c3352a4a0b25c3ad4913f13f Mon Sep 17 00:00:00 2001 From: Chainarong Tangsurakit Date: Wed, 13 Jun 2018 10:31:56 +0700 Subject: [PATCH 2/2] eslint fix --- src/capture.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/capture.js b/src/capture.js index eb184f0..97db44b 100644 --- a/src/capture.js +++ b/src/capture.js @@ -93,12 +93,12 @@ function runCapturingProcess(options, config, outputFile, base64, onFinish) { method: 'HEAD' }, function (error, response) { if (error) { - onFinish(error) + onFinish(error); } if (!!options.onlySuccessfulStatusCode && response.statusCode >= 400) { logger.error(`URL Status code is ${response.statusCode}`); - return onFinish(new Error(`URL Status code is ${response.statusCode}`)) + return onFinish(new Error(`URL Status code is ${response.statusCode}`)); } const scriptFile = utils.filePath(SCRIPT_FILE), @@ -120,7 +120,7 @@ function runCapturingProcess(options, config, outputFile, base64, onFinish) { onFinish(error); } }); - }) + }); }