izyware-dataconsole-elasticsearch
Version:
IzyWare Data Console ElasticSearch Feature
83 lines (78 loc) • 2.53 kB
JavaScript
const modtask = (chainItem, cb, $chain) => {
if (!modtask.__chainProcessorConfig) modtask.__chainProcessorConfig = {};
const verbose = modtask.__chainProcessorConfig.verbose || {};
var i = 0;
var params = {};
params.action = modtask.extractPrefix(chainItem[i++]);
switch (params.action) {
case 'disconnect':
if (!modtask.connected) return $chain.chainReturnCB({ reason: 'not connected' });
cb();
return true;
case 'connect':
if (modtask.connected) return $chain.chainReturnCB({ reason: 'already connected' });
const elasticsearch = require('elasticsearch');
const config = chainItem[i++] || {};
if (verbose.logConnectionAttemp) console.log('Connecting to ', config);
modtask.connection = new elasticsearch.Client(config);
modtask.connected = true;
$chain.set('outcome', { success: true });
cb();
return true;
case 'searchById':
case 'searchGeneric':
case 'delete':
if (!modtask.connected) return $chain.chainReturnCB({ reason: 'not connected' });
var query = chainItem[i++] || {};
var start = (new Date()).getTime();
if (verbose.logQuery) console.log(`${params.action}:start`, query);
var fn = {
searchGeneric: 'search',
searchById: 'search',
delete: 'delete'
}
var q = {
searchGeneric: query.genericJSON,
searchById: {
index: query.index,
body: {
query: {
ids: {
type : query.type,
values : query.ids
}
}
},
},
delete: {
index: query.index,
type: query.type,
id: query.id
}
};
modtask.connection[fn[params.action]](q[params.action], (err, data) => {
if (verbose.logQuery) console.log(`${params.action}:finish`, (new Date()).getTime() - start);
if (err) {
if (err.status == 404 && query.ignoreNotFound) {
if (verbose.logQuery) console.log(`${params.action}:ignoreNotFound`);
} else {
return $chain.chainReturnCB({reason: err.message});
}
}
$chain.set('outcome', { success: true, data });
cb();
});
return true;
}
return false;
}
modtask.extractPrefix = function(str) {
var all = ['es.'];
for(var i=0; i < all.length; ++i) {
var prefix = all[i];
if (str.indexOf(prefix) == 0) {
return str.substr(prefix.length);
}
}
return str;
}