public boolean deployWatch() {
WatchSourceBuilder watchSourceBuilder = WatchSourceBuilders.watchBuilder();
watchSourceBuilder.trigger(TriggerBuilders.schedule(Schedules.cron("0 0/1 * * * ?")));
SearchRequest request = Requests.searchRequest("logstash*").source(searchSource()
.query(filteredQuery(matchQuery("error_code", "*"), boolFilter()
.must(rangeFilter("date").gt("{{ctx.trigger.scheduled_time}}"))
.must(rangeFilter("date").lt("{{ctx.execution_time}}")))));
watchSourceBuilder.input(new SearchInput(request, null));
watchSourceBuilder.condition(new ScriptCondition(Script.inline("ctx.payload.hits.total > 0").build()));
EmailTemplate.Builder emailBuilder = EmailTemplate.builder();
emailBuilder.to("xxx@yyy.com");
emailBuilder.subject("Error recently encountered");
EmailAction.Builder emailActionBuilder = EmailAction.builder(emailBuilder.build());
watchSourceBuilder.addAction("email_someone", emailActionBuilder.build());
PutWatchResponse putWatchResponse = watcherClient.preparePutWatch("my-watch")
.setSource(watchSourceBuilder)
.get();
if (!putWatchResponse.isCreated()) {
return false;
}
return true;
}
I use java client to put that watch. It get stuck after post two emails.