Merge pull request #9825 from jbradberry/analytics-naive-datetimes-fix

Adjust datetimes to be aware when using awx-manage gather_analytics

SUMMARY
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.
ISSUE TYPE

Bugfix Pull Request

COMPONENT NAME

API

AWX VERSION

Reviewed-by: Ryan Petrello <None>
This commit is contained in:
softwarefactory-project-zuul[bot]
2021-04-07 13:54:52 +00:00
committed by GitHub
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.')