From f2a5e7fd454e9e8801af33b22062e21ac833758d Mon Sep 17 00:00:00 2001 From: "ashish.shubham" Date: Mon, 15 Jan 2018 03:39:25 -0800 Subject: [PATCH] [0.5.0] Docs updated + Ability to not specify callbackName --- .travis.yml | 6 +++++ README.md | 53 +++++++++++++++++++++++++++++++++++++ assets/webshot-factory.png | Bin 0 -> 28081 bytes index.ts | 13 ++++++--- package.json | 12 ++++++--- 5 files changed, 77 insertions(+), 7 deletions(-) create mode 100644 .travis.yml create mode 100644 assets/webshot-factory.png diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..9e11752 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,6 @@ +dist: trusty +addons: + chrome: stable +language: node_js +node_js: +- "8.8" \ No newline at end of file diff --git a/README.md b/README.md index 9c15a35..2fc3fe6 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,55 @@ # webshot-factory +[![Build Status](https://travis-ci.org/ashubham/webshot-factory.svg?branch=master)](https://travis-ci.org/ashubham/webshot-factory) +[![npm version](https://badge.fury.io/js/webshot-factory.svg)](https://badge.fury.io/js/webshot-factory) + +Webshot Factory + screenshots at scale based on headless chrome + +## Installation + +``` +npm i webshot-factory +``` + +## Usage + +```javascript +import * as shotFactory from 'webshot-factory'; + +await shotFactory.init({ + // Number of worker threads (chrome instances) to run. + // A shot is assigned to a worker in round robin. + concurrency: 10, + + // The callback method to be exposed on the window, + // which would be called by the application + // Shot will be taken when callback is called. + callbackName: 'callPhantom', + + // A cache warmer url, + // so that workers can cache the webpage scripts. + warmerUrl: 'http://google.com', + width: 1000, // shot width + height: 600, // shot height + timeout: 60000, // timeout (millis) to wait for shot. + webshotDebugPort: 3030 // Port where the status page is served. +}); + +// Once initialized just call getShot and +// a shot will be scheduled on a worker +// chrome instance. +shotFactory.getShot('http://yahoo.com').then(buffer => { + console.log(buffer); +}); +``` + +## Status Page + +`Webshot-factory` includes a status page to check the status of the running chrome instance workers. + +Visit: `http://:/status` + +To check the status and debug any problems. The page looks like this: + + diff --git a/assets/webshot-factory.png b/assets/webshot-factory.png new file mode 100644 index 0000000000000000000000000000000000000000..d0524f488eb0861a85a4e20cc877bf1fea467ed8 GIT binary patch literal 28081 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 HQQ-doqBRB$ literal 0 HcmV?d00001 diff --git a/index.ts b/index.ts index 9fb5814..6863d8a 100644 --- a/index.ts +++ b/index.ts @@ -11,7 +11,7 @@ let ip; internalIp.v4().then(_ip => ip = _ip); export interface Config extends shotPool.PoolConfig { - + webshotDebugPort: string; } let defaultConfig: Config = { @@ -20,14 +20,19 @@ let defaultConfig: Config = { warmerUrl: '', width: 800, height: 600, - timeout: 60000 + timeout: 60000, + webshotDebugPort: process.env.webshotDebugPort }; +let passedConfig : Config; + export async function init(options: Config) { options = Object.assign({}, defaultConfig, options); - return shotPool.create( + passedConfig = options; + await shotPool.create( options ); + return shotPool; } export function getShot(url: string): PromiseLike { @@ -85,4 +90,4 @@ app.get('/status', (req, res) => { `) }); -app.listen(parseInt(process.env.webshotDebugPort), ip); \ No newline at end of file +app.listen(parseInt(passedConfig.webshotDebugPort), ip); \ No newline at end of file diff --git a/package.json b/package.json index 9552082..1366017 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,11 @@ { "name": "webshot-factory", - "version": "0.3.2", + "version": "0.3.3", "description": "screenshots at scale based on headless chrome", "main": "dist/index.js", "types": "dist/declarations/index.d.ts", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", + "test": "npm run build", "build": "tsc -p .", "prepublish": "npm run build" }, @@ -13,6 +13,12 @@ "type": "git", "url": "git+https://github.com/ashubham/webshot-factory.git" }, + "keywords": [ + "webshot", + "headless", + "chrome", + "screenshot" + ], "author": "ashish.shubham@thoughtspot.com", "license": "ISC", "bugs": { @@ -27,7 +33,7 @@ "internal-ip": "^3.0.0", "lodash": "^4.17.4", "log4js": "^1.1.1", - "puppeteer": "^0.11.0" + "puppeteer": "^1.0.0" }, "devDependencies": { "@types/bluebird": "^3.5.11",