UNPKG

webshot-factory

Version:

screenshots at scale based on headless chrome

97 lines (96 loc) 3.85 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const shotPool = require("./lib/shot-pool"); const Logger = require("log4js"); const express = require("express"); const internalIp = require("internal-ip"); process.env.loglevel = process.env.loglevel || 'INFO'; process.env.webshotDebugPort = process.env.webshotDebugPort || '3030'; Logger.setGlobalLogLevel(process.env.loglevel); let app = express(); let ip; let _logger = Logger.getLogger("index"); internalIp.v4().then(_ip => ip = _ip); let defaultConfig = { concurrency: 10, callbackName: '', warmerUrl: '', width: 800, height: 600, timeout: 60000, webshotDebugPort: process.env.webshotDebugPort }; let passedConfig; function init(options) { return __awaiter(this, void 0, void 0, function* () { options = Object.assign({}, defaultConfig, options); passedConfig = options; yield shotPool.create(options); app.listen(parseInt(passedConfig.webshotDebugPort), ip); _logger.info('Listening on debug port', passedConfig.webshotDebugPort, ip); return shotPool; }); } exports.init = init; function getShot(url) { return shotPool.getShot(url); } exports.getShot = getShot; app.get('/status', (req, res) => { let status = shotPool.getStatus(); let workerDetails = status.allWorkers.map(worker => { let workerStatus = worker.getStatus(); let link = `http://${ip}:${workerStatus.debugPort}`; return ` <div class="worker ${workerStatus.isBusy ? 'busy' : 'free'}"> <div>Worker Id: <b>#${workerStatus.id}</b></div> <div>ConnectWS: ${workerStatus.browser.wsEndpoint()}</div> <div>DebugLink: <a href='${link}'> ${link} </a> </div> </div> `; }).join(''); res.end(` <html> <style> .worker { margin: 10px; width: 700px; padding: 10px; border-radius: 5px; box-shadow: 2px 2px #d3d3d8; } .busy { background-color: #fff3d4; } .free { background-color: #5fba7d; } </style> <title>Webshot Factory Status</title> <body> <h1>Webshot Factory Status</h1> <h3>Job Queue</h3> <div>Number of Jobs in queue: ${status.jobQueue.getStatus().jobs.length}</div> <div>Total Jobs processed: ${status.jobQueue.getStatus().total}</div> <h3>Workers</h3> <div>Total Workers: ${status.allWorkers.length}</div> <div>Idle Workers: ${status.idleWorkers.length}</div> <h4>Worker details</h4> ${workerDetails} </body> </html> `); }); //# sourceMappingURL=index.js.map