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 from awx.main.signals import disable_activity_stream
_now = now() _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) horizon = until - timedelta(weeks=4)
if since is not None: if since is not None:
# Make sure the start isn't in the future or more than 4 weeks prior to `until`. # Make sure the start isn't more than 4 weeks prior to `until`.
since = max(min(since, _now), horizon) since = max(since, horizon)
if since and since >= until: if since and since >= until:
logger.warning("Start of the collection interval is later than the end, ignoring request.") logger.warning("Start of the collection interval is later than the end, ignoring request.")
return None return None

View File

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