From 2a00519b93afeffe638f0a27b1e204adbf66d59f Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Mon, 8 Nov 2021 15:07:58 -0500 Subject: [PATCH] Move CHANGELOG_RETENTION to dyanmic configuration --- docs/configuration/dynamic-settings.md | 12 ++++++++++++ docs/configuration/optional-settings.md | 12 ------------ netbox/extras/admin.py | 2 +- netbox/extras/management/commands/housekeeping.py | 10 ++++++---- netbox/netbox/config/parameters.py | 7 +++++++ netbox/netbox/configuration.example.py | 3 --- netbox/netbox/settings.py | 1 - 7 files changed, 26 insertions(+), 21 deletions(-) diff --git a/docs/configuration/dynamic-settings.md b/docs/configuration/dynamic-settings.md index 765e1d0f1..bb8fb33d7 100644 --- a/docs/configuration/dynamic-settings.md +++ b/docs/configuration/dynamic-settings.md @@ -31,6 +31,18 @@ This defines custom content to be displayed on the login page above the login fo --- +## CHANGELOG_RETENTION + +Default: 90 + +The number of days to retain logged changes (object creations, updates, and deletions). Set this to `0` to retain +changes in the database indefinitely. + +!!! warning + If enabling indefinite changelog retention, it is recommended to periodically delete old entries. Otherwise, the database may eventually exceed capacity. + +--- + ## ENFORCE_GLOBAL_UNIQUE Default: False diff --git a/docs/configuration/optional-settings.md b/docs/configuration/optional-settings.md index d3b82e995..49a4a776b 100644 --- a/docs/configuration/optional-settings.md +++ b/docs/configuration/optional-settings.md @@ -25,18 +25,6 @@ BASE_PATH = 'netbox/' --- -## CHANGELOG_RETENTION - -Default: 90 - -The number of days to retain logged changes (object creations, updates, and deletions). Set this to `0` to retain -changes in the database indefinitely. - -!!! warning - If enabling indefinite changelog retention, it is recommended to periodically delete old entries. Otherwise, the database may eventually exceed capacity. - ---- - ## CORS_ORIGIN_ALLOW_ALL Default: False diff --git a/netbox/extras/admin.py b/netbox/extras/admin.py index 752c8c83d..a905367c5 100644 --- a/netbox/extras/admin.py +++ b/netbox/extras/admin.py @@ -31,7 +31,7 @@ class ConfigRevisionAdmin(admin.ModelAdmin): 'fields': ('NAPALM_USERNAME', 'NAPALM_PASSWORD', 'NAPALM_TIMEOUT', 'NAPALM_ARGS'), }), ('Miscellaneous', { - 'fields': ('MAINTENANCE_MODE', 'MAPS_URL'), + 'fields': ('MAINTENANCE_MODE', 'CHANGELOG_RETENTION', 'MAPS_URL'), }), ('Config Revision', { 'fields': ('comment',), diff --git a/netbox/extras/management/commands/housekeeping.py b/netbox/extras/management/commands/housekeeping.py index a4d617c9a..0607a16c2 100644 --- a/netbox/extras/management/commands/housekeeping.py +++ b/netbox/extras/management/commands/housekeeping.py @@ -10,12 +10,14 @@ from django.utils import timezone from packaging import version from extras.models import ObjectChange +from netbox.config import Config class Command(BaseCommand): help = "Perform nightly housekeeping tasks. (This command can be run at any time.)" def handle(self, *args, **options): + config = Config() # Clear expired authentication sessions (essentially replicating the `clearsessions` command) if options['verbosity']: @@ -37,10 +39,10 @@ class Command(BaseCommand): # Delete expired ObjectRecords if options['verbosity']: self.stdout.write("[*] Checking for expired changelog records") - if settings.CHANGELOG_RETENTION: - cutoff = timezone.now() - timedelta(days=settings.CHANGELOG_RETENTION) + if config.CHANGELOG_RETENTION: + cutoff = timezone.now() - timedelta(days=config.CHANGELOG_RETENTION) if options['verbosity'] >= 2: - self.stdout.write(f"\tRetention period: {settings.CHANGELOG_RETENTION} days") + self.stdout.write(f"\tRetention period: {config.CHANGELOG_RETENTION} days") self.stdout.write(f"\tCut-off time: {cutoff}") expired_records = ObjectChange.objects.filter(time__lt=cutoff).count() if expired_records: @@ -58,7 +60,7 @@ class Command(BaseCommand): self.stdout.write("\tNo expired records found.", self.style.SUCCESS) elif options['verbosity']: self.stdout.write( - f"\tSkipping: No retention period specified (CHANGELOG_RETENTION = {settings.CHANGELOG_RETENTION})" + f"\tSkipping: No retention period specified (CHANGELOG_RETENTION = {config.CHANGELOG_RETENTION})" ) # Check for new releases (if enabled) diff --git a/netbox/netbox/config/parameters.py b/netbox/netbox/config/parameters.py index 8bf1d6dc5..7b9f6a1f7 100644 --- a/netbox/netbox/config/parameters.py +++ b/netbox/netbox/config/parameters.py @@ -130,6 +130,13 @@ PARAMS = ( description="Enable maintenance mode", field=forms.BooleanField ), + ConfigParam( + name='CHANGELOG_RETENTION', + label='Changelog retention', + default=90, + description="Days to retain changelog history (set to zero for unlimited)", + field=forms.IntegerField + ), ConfigParam( name='MAPS_URL', label='Maps URL', diff --git a/netbox/netbox/configuration.example.py b/netbox/netbox/configuration.example.py index 189e98d11..947ed6d53 100644 --- a/netbox/netbox/configuration.example.py +++ b/netbox/netbox/configuration.example.py @@ -76,9 +76,6 @@ ADMINS = [ # BASE_PATH = 'netbox/' BASE_PATH = '' -# Maximum number of days to retain logged changes. Set to 0 to retain changes indefinitely. (Default: 90) -CHANGELOG_RETENTION = 90 - # API Cross-Origin Resource Sharing (CORS) settings. If CORS_ORIGIN_ALLOW_ALL is set to True, all origins will be # allowed. Otherwise, define a list of allowed origins using either CORS_ORIGIN_WHITELIST or # CORS_ORIGIN_REGEX_WHITELIST. For more information, see https://github.com/ottoyiu/django-cors-headers diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index f4f6c2f32..c91a5e75b 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -80,7 +80,6 @@ ADMINS = getattr(configuration, 'ADMINS', []) BASE_PATH = getattr(configuration, 'BASE_PATH', '') if BASE_PATH: BASE_PATH = BASE_PATH.strip('/') + '/' # Enforce trailing slash only -CHANGELOG_RETENTION = getattr(configuration, 'CHANGELOG_RETENTION', 90) CORS_ORIGIN_ALLOW_ALL = getattr(configuration, 'CORS_ORIGIN_ALLOW_ALL', False) CORS_ORIGIN_REGEX_WHITELIST = getattr(configuration, 'CORS_ORIGIN_REGEX_WHITELIST', []) CORS_ORIGIN_WHITELIST = getattr(configuration, 'CORS_ORIGIN_WHITELIST', [])