def test_check_needs_escalation(): data_store = comet_core.data_store.DataStore("sqlite://") test_fingerprint1 = "f1" test_fingerprint2 = "f2" test_fingerprint3 = "f3" one = EventRecord(received_at=datetime(2018, 2, 19, 0, 0, 11), source_type="datastoretest", owner="a", data={}) one.fingerprint = test_fingerprint1 two = EventRecord(received_at=datetime.utcnow(), source_type="datastoretest", owner="a", data={}) two.fingerprint = test_fingerprint1 three = EventRecord(received_at=datetime.utcnow() - timedelta(hours=23), source_type="datastoretest", owner="a", data={}) three.fingerprint = test_fingerprint2 four = EventRecord(received_at=datetime.utcnow(), source_type="datastoretest", owner="a", data={}) four.fingerprint = test_fingerprint2 five = EventRecord(received_at=datetime.utcnow(), source_type="datastoretest", owner="a", data={}) four.fingerprint = test_fingerprint3 data_store.add_record(one) data_store.add_record(two) data_store.add_record(three) data_store.add_record(four) data_store.add_record(five) three.fingerprint = test_fingerprint2 assert data_store.check_needs_escalation(timedelta(days=1), two) assert not data_store.check_needs_escalation(timedelta(days=1), four) assert not data_store.check_needs_escalation(timedelta(days=1), five)
def test_check_snoozed_event_fingerprint(): data_store = comet_core.data_store.DataStore('sqlite://') test_fingerprint1 = 'f1' test_fingerprint2 = 'f2' assert not data_store.fingerprint_is_ignored(test_fingerprint1) data_store.ignore_event_fingerprint(test_fingerprint1, ignore_type=IgnoreFingerprintRecord.SNOOZE, expires_at=datetime.utcnow() + timedelta(days=30)) assert data_store.fingerprint_is_ignored(test_fingerprint1) test_snooze_record = IgnoreFingerprintRecord(fingerprint=test_fingerprint2, ignore_type=IgnoreFingerprintRecord.SNOOZE, reported_at=datetime(2018, 2, 22, 0, 0, 11), expires_at=datetime(2018, 2, 23, 0, 0, 11)) data_store.add_record(test_snooze_record) assert not data_store.fingerprint_is_ignored(test_fingerprint2)
def test_date_sorting(): data_store = comet_core.data_store.DataStore("sqlite://") old = EventRecord(received_at=datetime(2018, 2, 19, 0, 0, 11), source_type="datastoretest", data={"fingerprint": "same"}) new = EventRecord(received_at=datetime(2018, 2, 20, 0, 0, 11), source_type="datastoretest", data={"fingerprint": "same"}) old.fingerprint = "same" new.fingerprint = "same" data_store.add_record(old) data_store.add_record(new) oldest = data_store.get_oldest_event_with_fingerprint("same") latest = data_store.get_latest_event_with_fingerprint("same") assert oldest.received_at == old.received_at assert latest.received_at == new.received_at
def test_date_sorting(): data_store = comet_core.data_store.DataStore('sqlite://') old = EventRecord(received_at=datetime(2018, 2, 19, 0, 0, 11), source_type='datastoretest', data={'fingerprint': 'same'}) new = EventRecord(received_at=datetime(2018, 2, 20, 0, 0, 11), source_type='datastoretest', data={'fingerprint': 'same'}) old.fingerprint = 'same' new.fingerprint = 'same' data_store.add_record(old) data_store.add_record(new) oldest = data_store.get_oldest_event_with_fingerprint('same') latest = data_store.get_latest_event_with_fingerprint('same') assert oldest.received_at == old.received_at assert latest.received_at == new.received_at
def data_store_with_test_events(): data_store = comet_core.data_store.DataStore("sqlite://") one = EventRecord(received_at=datetime(2018, 7, 7, 9, 0, 0), source_type="datastoretest", owner="a", data={}) one.fingerprint = "f1" two = EventRecord(received_at=datetime(2018, 7, 7, 9, 30, 0), source_type="datastoretest", owner="a", data={}) two.fingerprint = "f2" three = EventRecord( received_at=datetime(2018, 7, 7, 9, 0, 0), source_type="datastoretest2", # Note that this is another source type! owner="b", data={}, ) three.fingerprint = "f3" data_store.add_record(one) data_store.add_record(two) data_store.add_record(three) yield data_store
def data_store_with_test_events(): data_store = comet_core.data_store.DataStore('sqlite://') one = EventRecord(received_at=datetime(2018, 7, 7, 9, 0, 0), source_type='datastoretest', owner='a', data={}) one.fingerprint = 'f1' two = EventRecord(received_at=datetime(2018, 7, 7, 9, 30, 0), source_type='datastoretest', owner='a', data={}) two.fingerprint = 'f2' three = EventRecord( received_at=datetime(2018, 7, 7, 9, 0, 0), source_type='datastoretest2', # Note that this is another source type! owner='b', data={}) three.fingerprint = 'f3' data_store.add_record(one) data_store.add_record(two) data_store.add_record(three) yield data_store
def test_check_if_new(*_): data_store = comet_core.data_store.DataStore('sqlite://') timestamp = datetime.utcnow() one_a = EventRecord(source_type='test_type', fingerprint='f1', received_at=timestamp) timestamp = datetime.utcnow() - timedelta(days=1) one_b = EventRecord(source_type='test_type', fingerprint='f1', received_at=timestamp, processed_at=timestamp) timestamp = datetime.utcnow() - timedelta(days=8) one_c = EventRecord(source_type='test_type', fingerprint='f1', received_at=timestamp, processed_at=timestamp) assert data_store.check_if_new('f1', timedelta(days=7)) data_store.add_record(one_a) # processed_at is None for that one, so f1 should still be considered new assert data_store.check_if_new('f1', timedelta(days=7)) data_store.add_record(one_c) # older than 7 days, so f1 should still be considered new (kind of "new again") assert data_store.check_if_new('f1', timedelta(days=7)) data_store.add_record(one_b) # more recent than 7 days ago and processed_at is set, so f1 should not be flagged new assert not data_store.check_if_new('f1', timedelta(days=7))
def test_may_send_escalation(): data_store = comet_core.data_store.DataStore("sqlite://") data_store.add_record(EventRecord(source_type="type1", escalated_at=None)) assert data_store.may_send_escalation("type1", timedelta(days=7)) data_store.add_record( EventRecord(source_type="type1", escalated_at=datetime.utcnow() - timedelta(days=8))) assert data_store.may_send_escalation("type1", timedelta(days=7)) data_store.add_record( EventRecord(source_type="type1", escalated_at=datetime.utcnow() - timedelta(days=6))) assert not data_store.may_send_escalation("type1", timedelta(days=7)) data_store.add_record(EventRecord(source_type="type2", escalated_at=None)) assert data_store.may_send_escalation("type2", timedelta(days=7))
def test_check_if_previously_escalated(): data_store = comet_core.data_store.DataStore('sqlite://') one = EventRecord(source_type='test_type', fingerprint='f1', escalated_at=None) data_store.add_record(one) two = EventRecord(source_type='test_type', fingerprint='f2', escalated_at=datetime.utcnow() - timedelta(days=1)) data_store.add_record(two) assert not data_store.check_if_previously_escalated(one) assert data_store.check_if_previously_escalated(two) data_store.add_record(EventRecord(source_type='test_type', fingerprint='f1', escalated_at=datetime.utcnow() - timedelta(days=1))) assert data_store.check_if_previously_escalated(one)
def test_data_store(): data_store = comet_core.data_store.DataStore("sqlite://") for event in get_all_test_messages(): data_store.add_record(event.get_record())
def test_get_open_issues(*_): data_store = comet_core.data_store.DataStore("sqlite://") one = EventRecord(source_type="test_type", fingerprint="f1", received_at=datetime.utcnow(), owner="test") data_store.add_record(one) two = EventRecord(source_type="test_type", fingerprint="f2", received_at=datetime.utcnow() - timedelta(days=0.9), owner="test") data_store.add_record(two) three = EventRecord(source_type="test_type", fingerprint="f3", received_at=datetime.utcnow() - timedelta(days=2), owner="test") data_store.add_record(three) four = EventRecord(source_type="test_type", fingerprint="f4", received_at=datetime.utcnow(), owner="not_test") data_store.add_record(four) five = EventRecord(source_type="test_type", fingerprint="f5", received_at=datetime.utcnow() - timedelta(days=1.5), owner="not_test") data_store.add_record(five) six = EventRecord(source_type="test_type", fingerprint="f2", received_at=datetime.utcnow() - timedelta(days=0.2), owner="test") data_store.add_record(six) open_issues = data_store.get_open_issues(["test"]) assert len(open_issues) == 2 open_issues = data_store.get_open_issues(["test", "not_test"]) assert len(open_issues) == 3 test_snooze_record = IgnoreFingerprintRecord( fingerprint="f1", ignore_type=IgnoreFingerprintRecord.SNOOZE, reported_at=datetime(2018, 2, 22, 0, 0, 11), expires_at=datetime(3000, 2, 23, 0, 0, 11), ) data_store.add_record(test_snooze_record) open_issues = data_store.get_open_issues(["test"]) assert len(open_issues) == 1
def test_check_any_issue_needs_reminder(): data_store = comet_core.data_store.DataStore("sqlite://") test_fingerprint1 = "f1" test_fingerprint2 = "f2" test_fingerprint3 = "f3" one_a = EventRecord(sent_at=datetime.utcnow() - timedelta(days=9), source_type="datastoretest") one_a.fingerprint = test_fingerprint1 one_b = EventRecord(sent_at=datetime.utcnow() - timedelta(days=3), source_type="datastoretest") one_b.fingerprint = test_fingerprint1 two_a = EventRecord(sent_at=datetime.utcnow() - timedelta(days=10), source_type="datastoretest") two_a.fingerprint = test_fingerprint2 two_b = EventRecord(sent_at=datetime.utcnow() - timedelta(days=8), source_type="datastoretest") two_b.fingerprint = test_fingerprint2 two_c = EventRecord(source_type="datastoretest") # sent_at NULL two_c.fingerprint = test_fingerprint2 three_a = EventRecord(source_type="datastoretest") # sent_at NULL three_a.fingerprint = test_fingerprint3 data_store.add_record(one_a) data_store.add_record(two_a) data_store.add_record(two_b) data_store.add_record(two_c) data_store.add_record(three_a) # issue \ time ---> # 1 --------a------|--------------> # 2 ----a-------b--|--------------> (2c sent_at == NULL) # 3 ---------------|--------------> (3a sent_at == NULL) # ^ # -7days assert data_store.check_any_issue_needs_reminder(timedelta(days=7), [one_a, two_a, three_a]) data_store.add_record(one_b) # issue \ time ---> # 1 --------a------|-----b--------> # 2 ----a-------b--|--------------> (2c sent_at == NULL) # 3 ---------------|--------------> (3a sent_at == NULL) # ^ # -7days assert not data_store.check_any_issue_needs_reminder( timedelta(days=7), [one_a, two_a, three_a])
def test_get_open_issues(*_): data_store = comet_core.data_store.DataStore('sqlite://') one = EventRecord(source_type='test_type', fingerprint='f1', received_at=datetime.utcnow(), owner='test') data_store.add_record(one) two = EventRecord(source_type='test_type', fingerprint='f2', received_at=datetime.utcnow() - timedelta(days=.9), owner='test') data_store.add_record(two) three = EventRecord(source_type='test_type', fingerprint='f3', received_at=datetime.utcnow() - timedelta(days=2), owner='test') data_store.add_record(three) four = EventRecord(source_type='test_type', fingerprint='f4', received_at=datetime.utcnow(), owner='not_test') data_store.add_record(four) five = EventRecord(source_type='test_type', fingerprint='f5', received_at=datetime.utcnow() - timedelta(days=1.5), owner='not_test') data_store.add_record(five) six = EventRecord(source_type='test_type', fingerprint='f2', received_at=datetime.utcnow() - timedelta(days=.2), owner='test') data_store.add_record(six) open_issues = data_store.get_open_issues(['test']) assert len(open_issues) == 2 open_issues = data_store.get_open_issues(['test', 'not_test']) assert len(open_issues) == 3 test_snooze_record = IgnoreFingerprintRecord( fingerprint='f1', ignore_type=IgnoreFingerprintRecord.SNOOZE, reported_at=datetime(2018, 2, 22, 0, 0, 11), expires_at=datetime(3000, 2, 23, 0, 0, 11)) data_store.add_record(test_snooze_record) open_issues = data_store.get_open_issues(['test']) assert len(open_issues) == 1