@sugarcube/plugin-elasticsearch
Version:
Use [Elasticsearch](https://www.elastic.co/products/elasticsearch) for SugarCube data.
44 lines (38 loc) • 1.27 kB
JavaScript
;
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* complement({
queryByIds
}) {
const existing = yield queryByIds(index, ids);
log.info(`Complementing ${(0, _fp.size)(existing)} 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.concatData(results, envelope);
};
plugin.argv = {};
plugin.desc = "Complement with data stored in Elasticsearch.";
var _default = plugin;
exports.default = _default;