UNPKG

@sugarcube/plugin-elasticsearch

Version:

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

44 lines (38 loc) 1.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _fp = require("lodash/fp"); var _core = require("@sugarcube/core"); var _elastic = require("../elastic"); 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); log.info(`Using ${host}:${port}/${index}.`); const ids = envelope.data.map(u => u._sc_id_hash); if (ids.length > 0) stats.count("total", ids.length); const [results, history] = await _elastic.Elastic.Do(function* complementLeft({ queryByIds }) { const existing = yield queryByIds(index, ids); log.info(`Supplementing ${existing.length} existing units.`); return existing; }, { host, port }); history.forEach(([k, meta]) => log.debug(`${k}: ${JSON.stringify(meta)}.`)); if (ids.length > 0) stats.count("new", ids.length - results.length); if (ids.length > 0) stats.count("existing", results.length); return _core.envelope.concatDataLeft(results, envelope); }; plugin.argv = {}; plugin.desc = "Left complement with data stored in Elasticsearch."; var _default = plugin; exports.default = _default;