mirror of
https://github.com/apache/superset.git
synced 2026-04-21 00:54:44 +00:00
fix: Improve the reliability of alerts & reports (#25239)
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
|
||||
import logging
|
||||
from collections.abc import Iterator
|
||||
from datetime import datetime, timedelta, timezone as dt_timezone
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from croniter import croniter
|
||||
from pytz import timezone as pytz_timezone, UnknownTimeZoneError
|
||||
@@ -27,10 +27,10 @@ from superset import app
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def cron_schedule_window(cron: str, timezone: str) -> Iterator[datetime]:
|
||||
def cron_schedule_window(
|
||||
triggered_at: datetime, cron: str, timezone: str
|
||||
) -> Iterator[datetime]:
|
||||
window_size = app.config["ALERT_REPORTS_CRON_WINDOW_SIZE"]
|
||||
# create a time-aware datetime in utc
|
||||
time_now = datetime.now(tz=dt_timezone.utc)
|
||||
try:
|
||||
tz = pytz_timezone(timezone)
|
||||
except UnknownTimeZoneError:
|
||||
@@ -39,9 +39,9 @@ def cron_schedule_window(cron: str, timezone: str) -> Iterator[datetime]:
|
||||
logger.warning("Timezone %s was invalid. Falling back to 'UTC'", timezone)
|
||||
utc = pytz_timezone("UTC")
|
||||
# convert the current time to the user's local time for comparison
|
||||
time_now = time_now.astimezone(tz)
|
||||
start_at = time_now - timedelta(seconds=1)
|
||||
stop_at = time_now + timedelta(seconds=window_size)
|
||||
time_now = triggered_at.astimezone(tz)
|
||||
start_at = time_now - timedelta(seconds=window_size / 2)
|
||||
stop_at = time_now + timedelta(seconds=window_size / 2)
|
||||
crons = croniter(cron, start_at)
|
||||
for schedule in crons.all_next(datetime):
|
||||
if schedule >= stop_at:
|
||||
|
||||
Reference in New Issue
Block a user