UNPKG

@sugarcube/plugin-elasticsearch

Version:

Use [Elasticsearch](https://www.elastic.co/products/elasticsearch) for SugarCube data.

85 lines (71 loc) 2.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _fp = require("lodash/fp"); var _dashp = require("dashp"); var _fs = _interopRequireDefault(require("fs")); var _core = require("@sugarcube/core"); var _glob = _interopRequireDefault(require("glob")); var _pify = _interopRequireDefault(require("pify")); var _elastic = require("../elastic"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const globP = (0, _pify.default)(_glob.default); const querySourceGlob = "glob_pattern"; const querySourceQuery = "elastic_query"; const plugin = async (envelope, { cfg, log, stats }) => { const host = (0, _fp.get)("elastic.host", cfg); const port = (0, _fp.get)("elastic.port", cfg); const index = (0, _fp.get)("elastic.index", cfg); const amount = (0, _fp.get)("elastic.amount", cfg); const includeFields = (0, _fp.get)("elastic.include_fields", cfg); const files = await (0, _dashp.flowP)([_core.envelope.queriesByType(querySourceGlob), (0, _dashp.flatmapP)(p => globP(...[p, { nodir: true }])), (0, _fp.map)(file => JSON.parse(_fs.default.readFileSync(file)))], envelope); const queries = (0, _fp.flow)([_core.envelope.queriesByType(querySourceQuery), (0, _fp.map)(query => JSON.parse(query))])(envelope); log.debug(`Read ${(0, _fp.size)(files)} bodies from file.`); log.debug(`Read ${(0, _fp.size)(queries)} bodies from queries.`); log.debug(`Using ${host}:${port}/${index}.`); const bodies = [files, queries].reduce(_fp.concat, []); return _elastic.Elastic.Do(function* queryData({ query }) { let results = []; for (let body of bodies) { if (includeFields) body = (0, _fp.merge)(body, { _source: includeFields.concat(["_sc_*_hash"]).map(f => f.replace(/^_sc/, "$sc")) }); const units = yield query(index, body, amount); log.debug(`Query: ${JSON.stringify(body)}`); results = results.concat(units); } log.info(`Fetched ${(0, _fp.size)(results)} units for ${(0, _fp.size)(bodies)} queries.`); stats.count("total", (0, _fp.size)(results)); return results; }, { host, port }).then(([rs, history]) => { history.forEach(([k, meta]) => log.debug(`${k}: ${JSON.stringify(meta)}.`)); return _core.envelope.concatData(rs, envelope); }); }; plugin.argv = { "elastic.amount": { type: "number", nargs: 1, desc: "The amount of units to fetch." }, "elastic.include_fields": { type: "array", desc: "Only include those fields when importing data." } }; plugin.desc = "Fetch units from Elasticsearch by query files."; var _default = plugin; exports.default = _default;