Fixes #7425: Housekeeping command should honor zero verbosity

This commit is contained in:
jeremystretch 2021-10-01 15:29:22 -04:00
parent a1f271d7d9
commit 376c776520
2 changed files with 40 additions and 23 deletions

View File

@ -18,6 +18,7 @@
* [#7411](https://github.com/netbox-community/netbox/issues/7411) - Fix exception in UI when adding member devices to virtual chassis * [#7411](https://github.com/netbox-community/netbox/issues/7411) - Fix exception in UI when adding member devices to virtual chassis
* [#7412](https://github.com/netbox-community/netbox/issues/7412) - Fix exception in UI when adding child device to device bay * [#7412](https://github.com/netbox-community/netbox/issues/7412) - Fix exception in UI when adding child device to device bay
* [#7417](https://github.com/netbox-community/netbox/issues/7417) - Prevent exception when filtering objects list by invalid tag * [#7417](https://github.com/netbox-community/netbox/issues/7417) - Prevent exception when filtering objects list by invalid tag
* [#7425](https://github.com/netbox-community/netbox/issues/7425) - Housekeeping command should honor zero verbosity
--- ---

View File

@ -18,40 +18,51 @@ class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args, **options):
# Clear expired authentication sessions (essentially replicating the `clearsessions` command) # Clear expired authentication sessions (essentially replicating the `clearsessions` command)
if options['verbosity']:
self.stdout.write("[*] Clearing expired authentication sessions") self.stdout.write("[*] Clearing expired authentication sessions")
if options['verbosity'] >= 2: if options['verbosity'] >= 2:
self.stdout.write(f"\tConfigured session engine: {settings.SESSION_ENGINE}") self.stdout.write(f"\tConfigured session engine: {settings.SESSION_ENGINE}")
engine = import_module(settings.SESSION_ENGINE) engine = import_module(settings.SESSION_ENGINE)
try: try:
engine.SessionStore.clear_expired() engine.SessionStore.clear_expired()
if options['verbosity']:
self.stdout.write("\tSessions cleared.", self.style.SUCCESS) self.stdout.write("\tSessions cleared.", self.style.SUCCESS)
except NotImplementedError: except NotImplementedError:
if options['verbosity']:
self.stdout.write( self.stdout.write(
f"\tThe configured session engine ({settings.SESSION_ENGINE}) does not support " f"\tThe configured session engine ({settings.SESSION_ENGINE}) does not support "
f"clearing sessions; skipping." f"clearing sessions; skipping."
) )
# Delete expired ObjectRecords # Delete expired ObjectRecords
if options['verbosity']:
self.stdout.write("[*] Checking for expired changelog records") self.stdout.write("[*] Checking for expired changelog records")
if settings.CHANGELOG_RETENTION: if settings.CHANGELOG_RETENTION:
cutoff = timezone.now() - timedelta(days=settings.CHANGELOG_RETENTION) cutoff = timezone.now() - timedelta(days=settings.CHANGELOG_RETENTION)
if options['verbosity'] >= 2: if options['verbosity'] >= 2:
self.stdout.write(f"Retention period: {settings.CHANGELOG_RETENTION} days") self.stdout.write(f"\tRetention period: {settings.CHANGELOG_RETENTION} days")
self.stdout.write(f"\tCut-off time: {cutoff}") self.stdout.write(f"\tCut-off time: {cutoff}")
expired_records = ObjectChange.objects.filter(time__lt=cutoff).count() expired_records = ObjectChange.objects.filter(time__lt=cutoff).count()
if expired_records: if expired_records:
self.stdout.write(f"\tDeleting {expired_records} expired records... ", self.style.WARNING, ending="") if options['verbosity']:
self.stdout.write(
f"\tDeleting {expired_records} expired records... ",
self.style.WARNING,
ending=""
)
self.stdout.flush() self.stdout.flush()
ObjectChange.objects.filter(time__lt=cutoff)._raw_delete(using=DEFAULT_DB_ALIAS) ObjectChange.objects.filter(time__lt=cutoff)._raw_delete(using=DEFAULT_DB_ALIAS)
self.stdout.write("Done.", self.style.WARNING) if options['verbosity']:
else: self.stdout.write("Done.", self.style.SUCCESS)
self.stdout.write("\tNo expired records found.") elif options['verbosity']:
else: self.stdout.write("\tNo expired records found.", self.style.SUCCESS)
elif options['verbosity']:
self.stdout.write( self.stdout.write(
f"\tSkipping: No retention period specified (CHANGELOG_RETENTION = {settings.CHANGELOG_RETENTION})" f"\tSkipping: No retention period specified (CHANGELOG_RETENTION = {settings.CHANGELOG_RETENTION})"
) )
# Check for new releases (if enabled) # Check for new releases (if enabled)
if options['verbosity']:
self.stdout.write("[*] Checking for latest release") self.stdout.write("[*] Checking for latest release")
if settings.RELEASE_CHECK_URL: if settings.RELEASE_CHECK_URL:
headers = { headers = {
@ -59,6 +70,7 @@ class Command(BaseCommand):
} }
try: try:
if options['verbosity'] >= 2:
self.stdout.write(f"\tFetching {settings.RELEASE_CHECK_URL}") self.stdout.write(f"\tFetching {settings.RELEASE_CHECK_URL}")
response = requests.get( response = requests.get(
url=settings.RELEASE_CHECK_URL, url=settings.RELEASE_CHECK_URL,
@ -73,15 +85,19 @@ class Command(BaseCommand):
continue continue
releases.append((version.parse(release['tag_name']), release.get('html_url'))) releases.append((version.parse(release['tag_name']), release.get('html_url')))
latest_release = max(releases) latest_release = max(releases)
if options['verbosity'] >= 2:
self.stdout.write(f"\tFound {len(response.json())} releases; {len(releases)} usable") self.stdout.write(f"\tFound {len(response.json())} releases; {len(releases)} usable")
self.stdout.write(f"\tLatest release: {latest_release[0]}") if options['verbosity']:
self.stdout.write(f"\tLatest release: {latest_release[0]}", self.style.SUCCESS)
# Cache the most recent release # Cache the most recent release
cache.set('latest_release', latest_release, None) cache.set('latest_release', latest_release, None)
except requests.exceptions.RequestException as exc: except requests.exceptions.RequestException as exc:
self.stdout.write(f"\tRequest error: {exc}") self.stdout.write(f"\tRequest error: {exc}", self.style.ERROR)
else: else:
if options['verbosity']:
self.stdout.write(f"\tSkipping: RELEASE_CHECK_URL not set") self.stdout.write(f"\tSkipping: RELEASE_CHECK_URL not set")
if options['verbosity']:
self.stdout.write("Finished.", self.style.SUCCESS) self.stdout.write("Finished.", self.style.SUCCESS)