Skip to content

Commit 8b9eaac

Browse files
authored
Merge pull request #1097 from rschirin/fix-scan-timeframe
fix scan timeframe with use_terms_query
2 parents a6276a1 + 295ca06 commit 8b9eaac

File tree

3 files changed

+25
-3
lines changed

3 files changed

+25
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
- Add support for Kibana 8.6 for Kibana Discover - [#1080](https://github.com/jertel/elastalert2/pull/1080) - @nsano-rururu
1515
- Modify schema to allow string and boolean for `*_ca_certs` to allow for one to specify a cert bundle for SSL certificate verification - [#1082](https://github.com/jertel/elastalert2/pull/1082) - @goggin
1616
- Fix UnicodeEncodeError in PagerDutyAlerter - [#1091](https://github.com/jertel/elastalert2/pull/1091) - @nsano-rururu
17+
- The scan_entire_timeframe setting, when used with use_count_query or use_terms_query will now scan entire timeframe on subsequent rule runs - [#1097](https://github.com/jertel/elastalert2/pull/1097) - @rschirin
1718

1819
# 2.9.0
1920

elastalert/elastalert.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,8 @@ def set_starttime(self, rule, endtime):
698698
# Query from the end of the last run, if it exists, otherwise a run_every sized window
699699
rule['starttime'] = rule.get('previous_endtime', endtime - self.run_every)
700700
else:
701-
rule['starttime'] = rule.get('previous_endtime', endtime - rule['timeframe'])
701+
#Based on PR 3141 old Yelp/elastalert - rschirin
702+
rule['starttime'] = endtime - rule['timeframe']
702703

703704
def adjust_start_time_for_overlapping_agg_query(self, rule):
704705
if rule.get('aggregation_query_element'):

tests/base_test.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -876,8 +876,7 @@ def test_set_starttime(ea):
876876
ea.set_starttime(ea.rules[0], end)
877877
assert ea.rules[0]['starttime'] == end - ea.buffer_time
878878

879-
# scan_entire_timeframe
880-
ea.rules[0].pop('previous_endtime')
879+
# scan_entire_timeframe without use_count_query or use_terms_query
881880
ea.rules[0].pop('starttime')
882881
ea.rules[0]['timeframe'] = datetime.timedelta(days=3)
883882
ea.rules[0]['scan_entire_timeframe'] = True
@@ -886,6 +885,27 @@ def test_set_starttime(ea):
886885
ea.set_starttime(ea.rules[0], end)
887886
assert ea.rules[0]['starttime'] == end - datetime.timedelta(days=3)
888887

888+
# scan_entire_timeframe with use_count_query, first run
889+
ea.rules[0].pop('starttime')
890+
ea.rules[0]['timeframe'] = datetime.timedelta(days=3)
891+
ea.rules[0]['scan_entire_timeframe'] = True
892+
ea.rules[0]['use_count_query'] = True
893+
with mock.patch.object(ea, 'get_starttime') as mock_gs:
894+
mock_gs.return_value = None
895+
ea.set_starttime(ea.rules[0], end)
896+
assert ea.rules[0]['starttime'] == end - datetime.timedelta(days=3)
897+
898+
# scan_entire_timeframe with use_count_query, subsequent run
899+
ea.rules[0].pop('starttime')
900+
ea.rules[0]['timeframe'] = datetime.timedelta(days=3)
901+
ea.rules[0]['scan_entire_timeframe'] = True
902+
ea.rules[0]['use_count_query'] = True
903+
ea.rules[0]['previous_endtime'] = end
904+
with mock.patch.object(ea, 'get_starttime') as mock_gs:
905+
mock_gs.return_value = None
906+
ea.set_starttime(ea.rules[0], end)
907+
assert ea.rules[0]['starttime'] == end - datetime.timedelta(days=3)
908+
889909

890910
def test_rule_changes(ea):
891911
ea.rule_hashes = {'rules/rule1.yaml': 'ABC',

0 commit comments

Comments
 (0)