因为是在 Kibana 里面运行,所以从 ES 拿到的只有 payload(也就是查询响应),所以把里面的 ctx. 都删掉了。
好,然后创建插件:
cd kibana-4.3.0-darwin-x64/src/plugins
mkdir alert
在自定义插件目录底下创建 package.json 描述:
{
"name": "alert",
"version": "0.0.1"
}
以及最终的 index.js 代码:
'use strict';
module.exports = function (kibana) {
var later = require('later');
var _ = require('lodash');
var mustache = require('mustache');
return new kibana.Plugin({
init: function init(server) {
var client = server.plugins.elasticsearch.client;
var sched = later.parse.text('every 10 minute');
later.setInterval(doalert, sched);
function doalert() {
getCount().then(function(resp){
getWatcher(resp.count).then(function(resp){
_.each(resp.hits.hits, function(hit){
var watch = hit._source;
var every = watch.trigger.schedule.interval;
var watchSched = later.parse.recur().every(every).second();
var wt = later.setInterval(watching, watchSched);
function watching() {
var request = watch.input.search.request;
var condition = watch.condition.script.script;
var transform = watch.transform.search.request;
var actions = watch.actions;
client.search(request).then(function(payload){
var ret = eval(condition);
if (ret) {
client.search(transform).then(function(payload) {
_.each(_.values(actions), function(action){
if(_.has(action, 'email')) {
var subject = mustache.render(action.email.subject, {"payload":payload});
var body = mustache.render(action.email.body, {"payload":payload});
console.log(subject, body);
}
});
});
}
});
}
});
});
});
}
function getCount() {
return client.count({
index:'watcher',
type:"watch"
});
}
function getWatcher(count) {
return client.search({
index:'watcher',
type:"watch",
size:count
});
}
}
});
};