Adjust datetimes to be aware when using awx-manage gather_analytics

Also, make sure that an explicit `since` parameter will win over
default `until=now()` when calculating the 4-week data limit.
This commit is contained in:
Jeff Bradberry 2021-04-06 15:59:54 -04:00
parent 3742090d6f
commit 62c7554ec4
2 changed files with 21 additions and 12 deletions

View File

@ -149,11 +149,22 @@ def gather(dest=None, module=None, subset=None, since=None, until=None, collecti
from awx.main.signals import disable_activity_stream
_now = now()
until = _now if until is None else min(until, _now) # Make sure the end isn't in the future.
# Make sure that the endpoints are not in the future.
until = None if until is None else min(until, _now)
since = None if since is None else min(since, _now)
if since and not until:
# If `since` is explicit but not `until`, `since` should be used to calculate the 4-week limit
until = min(since + timedelta(weeks=4), _now)
else:
until = _now if until is None else until
horizon = until - timedelta(weeks=4)
if since is not None:
# Make sure the start isn't in the future or more than 4 weeks prior to `until`.
since = max(min(since, _now), horizon)
# Make sure the start isn't more than 4 weeks prior to `until`.
since = max(since, horizon)
if since and since >= until:
logger.warning("Start of the collection interval is later than the end, ignoring request.")
return None

View File

@ -3,7 +3,7 @@ import logging
from awx.main import analytics
from dateutil import parser
from django.core.management.base import BaseCommand
from django.utils.timezone import now
from django.utils import timezone
class Command(BaseCommand):
@ -36,14 +36,12 @@ class Command(BaseCommand):
opt_since = options.get('since') or None
opt_until = options.get('until') or None
if opt_since:
since = parser.parse(opt_since)
else:
since = None
if opt_until:
until = parser.parse(opt_until)
else:
until = now()
since = parser.parse(opt_since) if opt_since else None
if since and since.tzinfo is None:
since = since.replace(tzinfo=timezone.utc)
until = parser.parse(opt_until) if opt_until else None
if until and until.tzinfo is None:
until = until.replace(tzinfo=timezone.utc)
if opt_ship and opt_dry_run:
self.logger.error('Both --ship and --dry-run cannot be processed at the same time.')