Skip to content

Commit

Permalink
Round update_after to whole minutes. #332
Browse files Browse the repository at this point in the history
  • Loading branch information
lemon24 committed May 30, 2024
1 parent 6beedcc commit a073569
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 10 deletions.
1 change: 1 addition & 0 deletions src/reader/_update.py
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,7 @@ def set_number(name, src, dst, type, min=0, max=float('inf')): # type: ignore
def next_update_after(now: datetime, interval: int, jitter: float = 0) -> datetime:
now_s = (now.replace(tzinfo=None) - UPDATE_AFTER_START).total_seconds()
rv_s = int((now_s // interval + 1 + random.random() * jitter) * interval)
rv_s = rv_s // 60 * 60
rv = datetime.utcfromtimestamp(rv_s + EPOCH_OFFSET).replace(tzinfo=now.tzinfo)
return rv

Expand Down
12 changes: 2 additions & 10 deletions tests/test_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -999,22 +999,14 @@ def test_update_after_invalid_config(reader, config, config_is_global):
(datetime(2010, 1, 2), 3600 * 24 * 3, 0, 0, datetime(2010, 1, 5)),
(datetime(2010, 1, 4, 23), 3600 * 24 * 3, 0, 0, datetime(2010, 1, 5)),
(datetime(2010, 1, 5), 3600 * 24 * 3, 0, 0, datetime(2010, 1, 8)),
# an arbitrary interval; acknowledging the start date is 1970-01-05
(datetime(1970, 1, 5), 1234, 0, 0, datetime(1970, 1, 5, 0, 20, 34)),
(datetime(1970, 1, 5, 0, 20, 33), 1234, 0, 0, datetime(1970, 1, 5, 0, 20, 34)),
(datetime(1970, 1, 5, 0, 20, 34), 1234, 0, 0, datetime(1970, 1, 5, 0, 41, 8)),
# >>> (datetime(1970, 1, 5) - datetime(2010, 1, 1)) % timedelta(seconds=1234)
# datetime.timedelta(seconds=338)
(datetime(2010, 1, 1), 1234, 0, 0, datetime(2010, 1, 1, 0, 5, 38)),
# jitter
(datetime(2010, 1, 1), 3600 * 8, 1, 0, datetime(2010, 1, 1, 8)),
(datetime(2010, 1, 1), 3600 * 8, 1, 0.5, datetime(2010, 1, 1, 12)),
(datetime(2010, 1, 1), 3600 * 8, 1, 1, datetime(2010, 1, 1, 16)),
(datetime(2010, 1, 1), 3600 * 8, 0.5, 0.5, datetime(2010, 1, 1, 10)),
(datetime(2010, 1, 1), 3600 * 8, 0.5, 0.1, datetime(2010, 1, 1, 8, 24)),
(datetime(2010, 1, 1), 3600 * 8, 0.5, 0.12, datetime(2010, 1, 1, 8, 28, 48)),
(datetime(2010, 1, 1), 3600 * 8, 0.5, 0.123, datetime(2010, 1, 1, 8, 29, 31)),
# FIXME: round to whole minutes
(datetime(2010, 1, 1), 3600 * 8, 0.5, 0.12, datetime(2010, 1, 1, 8, 28)),
(datetime(2010, 1, 1), 3600 * 8, 0.5, 0.123, datetime(2010, 1, 1, 8, 29)),
],
)
def test_next_update_after(monkeypatch, now, interval, jitter, random, expected):
Expand Down

0 comments on commit a073569

Please sign in to comment.