Test: Added test that uses an agg in a trigger.
Original commit: elastic/x-pack-elasticsearch@ad87b18aa5
This commit is contained in:
parent
3965cb194c
commit
45ee1d2d9b
|
@ -122,6 +122,24 @@ public abstract class AbstractAlertingTests extends ElasticsearchIntegrationTest
|
||||||
return internalTestCluster().getInstance(AlertsClient.class);
|
return internalTestCluster().getInstance(AlertsClient.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void assertAlertTriggeredExact(final String alertName, final long expectedAlertActionsWithActionPerformed) throws Exception {
|
||||||
|
assertBusy(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
ClusterState state = client().admin().cluster().prepareState().get().getState();
|
||||||
|
String[] alertHistoryIndices = state.metaData().concreteIndices(IndicesOptions.lenientExpandOpen(), AlertActionManager.ALERT_HISTORY_INDEX_PREFIX + "*");
|
||||||
|
assertThat(alertHistoryIndices, not(emptyArray()));
|
||||||
|
for (String index : alertHistoryIndices) {
|
||||||
|
IndexRoutingTable routingTable = state.getRoutingTable().index(index);
|
||||||
|
assertThat(routingTable, notNullValue());
|
||||||
|
assertThat(routingTable.allPrimaryShardsActive(), is(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
assertThat(findNumberOfPerformedActions(alertName), equalTo(expectedAlertActionsWithActionPerformed));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
protected void assertAlertTriggered(final String alertName, final long minimumExpectedAlertActionsWithActionPerformed) throws Exception {
|
protected void assertAlertTriggered(final String alertName, final long minimumExpectedAlertActionsWithActionPerformed) throws Exception {
|
||||||
assertAlertTriggered(alertName, minimumExpectedAlertActionsWithActionPerformed, true);
|
assertAlertTriggered(alertName, minimumExpectedAlertActionsWithActionPerformed, true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,12 @@ import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertRequest;
|
||||||
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertResponse;
|
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertResponse;
|
||||||
import org.elasticsearch.alerts.transport.actions.put.PutAlertResponse;
|
import org.elasticsearch.alerts.transport.actions.put.PutAlertResponse;
|
||||||
import org.elasticsearch.common.bytes.BytesReference;
|
import org.elasticsearch.common.bytes.BytesReference;
|
||||||
|
import org.elasticsearch.index.query.FilterBuilders;
|
||||||
|
import org.elasticsearch.index.query.QueryBuilders;
|
||||||
import org.elasticsearch.script.ScriptService;
|
import org.elasticsearch.script.ScriptService;
|
||||||
|
import org.elasticsearch.search.aggregations.AggregationBuilders;
|
||||||
|
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogram;
|
||||||
|
import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
|
||||||
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
@ -158,6 +163,55 @@ public class BasicAlertingTest extends AbstractAlertingTests {
|
||||||
assertThat(triggered, equalTo(findNumberOfPerformedActions("1")));
|
assertThat(triggered, equalTo(findNumberOfPerformedActions("1")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAggregations() throws Exception {
|
||||||
|
class R implements Runnable {
|
||||||
|
|
||||||
|
private final long sleepTime;
|
||||||
|
private final long totalTime;
|
||||||
|
|
||||||
|
R(long sleepTime, long totalTime) {
|
||||||
|
this.sleepTime = sleepTime;
|
||||||
|
this.totalTime = totalTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
while ((System.currentTimeMillis() - startTime) < totalTime) {
|
||||||
|
client().prepareIndex("my-index", "my-type").setCreate(true).setSource("{}").get();
|
||||||
|
try {
|
||||||
|
Thread.sleep(sleepTime);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
Thread.currentThread().interrupt();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assertAcked(prepareCreate("my-index").addMapping("my-type", "_timestamp", "enabled=true"));
|
||||||
|
SearchRequest searchRequest = createTriggerSearchRequest("my-index").source(
|
||||||
|
searchSource()
|
||||||
|
.query(QueryBuilders.constantScoreQuery(FilterBuilders.rangeFilter("_timestamp").from("{{SCHEDULED_FIRE_TIME}}||-1m").to("{{SCHEDULED_FIRE_TIME}}")))
|
||||||
|
.aggregation(AggregationBuilders.dateHistogram("rate").field("_timestamp").interval(DateHistogram.Interval.SECOND).order(Histogram.Order.COUNT_DESC))
|
||||||
|
);
|
||||||
|
BytesReference reference = createAlertSource("* 0/1 * * * ? *", searchRequest, "aggregations.rate.buckets[0]?.doc_count > 5");
|
||||||
|
alertClient().preparePutAlert("rate-alert").setAlertSource(reference).get();
|
||||||
|
|
||||||
|
Thread indexThread = new Thread(new R(500, 60000));
|
||||||
|
indexThread.start();
|
||||||
|
indexThread.join();
|
||||||
|
|
||||||
|
assertAlertTriggeredExact("rate-alert", 0);
|
||||||
|
assertNoAlertTrigger("rate-alert", 1);
|
||||||
|
|
||||||
|
indexThread = new Thread(new R(100, 60000));
|
||||||
|
indexThread.start();
|
||||||
|
indexThread.join();
|
||||||
|
assertAlertTriggered("rate-alert", 1);
|
||||||
|
}
|
||||||
|
|
||||||
private final SearchSourceBuilder searchSourceBuilder = searchSource().query(
|
private final SearchSourceBuilder searchSourceBuilder = searchSource().query(
|
||||||
filteredQuery(matchQuery("event_type", "a"), rangeFilter("_timestamp").from("{{SCHEDULED_FIRE_TIME}}||-30s").to("{{SCHEDULED_FIRE_TIME}}"))
|
filteredQuery(matchQuery("event_type", "a"), rangeFilter("_timestamp").from("{{SCHEDULED_FIRE_TIME}}||-30s").to("{{SCHEDULED_FIRE_TIME}}"))
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue