mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-28 11:36:44 +00:00
add maintenance mode
This commit is contained in:
parent
45167fe2f0
commit
b783ec566c
@ -123,6 +123,11 @@ LOGGING = {
|
|||||||
'handlers': ['console'],
|
'handlers': ['console'],
|
||||||
'level': log_level,
|
'level': log_level,
|
||||||
},
|
},
|
||||||
|
'filters': {
|
||||||
|
'require_not_maintenance_mode_503': {
|
||||||
|
'()': 'maintenance_mode.logging.RequireNotMaintenanceMode503',
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
# Get a logger instance for this setup file
|
# Get a logger instance for this setup file
|
||||||
@ -252,6 +257,9 @@ INSTALLED_APPS = [
|
|||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
'django.contrib.sites',
|
'django.contrib.sites',
|
||||||
|
|
||||||
|
# Maintenance
|
||||||
|
'maintenance_mode',
|
||||||
|
|
||||||
# InvenTree apps
|
# InvenTree apps
|
||||||
'build.apps.BuildConfig',
|
'build.apps.BuildConfig',
|
||||||
'common.apps.CommonConfig',
|
'common.apps.CommonConfig',
|
||||||
@ -298,7 +306,8 @@ MIDDLEWARE = CONFIG.get('middleware', [
|
|||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
'InvenTree.middleware.AuthRequiredMiddleware'
|
'InvenTree.middleware.AuthRequiredMiddleware',
|
||||||
|
'maintenance_mode.middleware.MaintenanceModeMiddleware'
|
||||||
])
|
])
|
||||||
|
|
||||||
# Error reporting middleware
|
# Error reporting middleware
|
||||||
@ -848,6 +857,10 @@ MARKDOWNIFY_WHITELIST_ATTRS = [
|
|||||||
|
|
||||||
MARKDOWNIFY_BLEACH = False
|
MARKDOWNIFY_BLEACH = False
|
||||||
|
|
||||||
|
# Maintenance mode
|
||||||
|
MAINTENANCE_MODE_RETRY_AFTER = 60
|
||||||
|
|
||||||
|
|
||||||
# Plugins
|
# Plugins
|
||||||
PLUGIN_URL = 'plugin'
|
PLUGIN_URL = 'plugin'
|
||||||
|
|
||||||
|
@ -17,6 +17,9 @@ try:
|
|||||||
except:
|
except:
|
||||||
import importlib_metadata as metadata
|
import importlib_metadata as metadata
|
||||||
|
|
||||||
|
from maintenance_mode.core import maintenance_mode_on
|
||||||
|
from maintenance_mode.core import get_maintenance_mode, set_maintenance_mode
|
||||||
|
|
||||||
from plugin import plugins as inventree_plugins
|
from plugin import plugins as inventree_plugins
|
||||||
from plugin.integration import IntegrationPluginBase
|
from plugin.integration import IntegrationPluginBase
|
||||||
|
|
||||||
@ -35,6 +38,11 @@ class PluginAppConfig(AppConfig):
|
|||||||
def load_plugins(self):
|
def load_plugins(self):
|
||||||
"""load and activate all IntegrationPlugins"""
|
"""load and activate all IntegrationPlugins"""
|
||||||
logger.info('Start loading plugins')
|
logger.info('Start loading plugins')
|
||||||
|
# set maintanace mode
|
||||||
|
_maintenance = get_maintenance_mode()
|
||||||
|
if not _maintenance:
|
||||||
|
set_maintenance_mode(True)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# we are using the db so for migrations etc we need to try this block
|
# we are using the db so for migrations etc we need to try this block
|
||||||
self._init_plugins()
|
self._init_plugins()
|
||||||
@ -42,11 +50,20 @@ class PluginAppConfig(AppConfig):
|
|||||||
except (OperationalError, ProgrammingError):
|
except (OperationalError, ProgrammingError):
|
||||||
# Exception if the database has not been migrated yet
|
# Exception if the database has not been migrated yet
|
||||||
logger.info('Database not accessible while loading plugins')
|
logger.info('Database not accessible while loading plugins')
|
||||||
|
|
||||||
|
# remove maintenance
|
||||||
|
if not _maintenance:
|
||||||
|
set_maintenance_mode(False)
|
||||||
logger.info('Finished loading plugins')
|
logger.info('Finished loading plugins')
|
||||||
|
|
||||||
def unload_plugins(self):
|
def unload_plugins(self):
|
||||||
"""unload and deactivate all IntegrationPlugins"""
|
"""unload and deactivate all IntegrationPlugins"""
|
||||||
logger.info('Start unloading plugins')
|
logger.info('Start unloading plugins')
|
||||||
|
# set maintanace mode
|
||||||
|
_maintenance = get_maintenance_mode()
|
||||||
|
if not _maintenance:
|
||||||
|
set_maintenance_mode(True)
|
||||||
|
|
||||||
# remove all plugins from registry
|
# remove all plugins from registry
|
||||||
# plugins = settings.INTEGRATION_PLUGINS
|
# plugins = settings.INTEGRATION_PLUGINS
|
||||||
settings.INTEGRATION_PLUGINS = {}
|
settings.INTEGRATION_PLUGINS = {}
|
||||||
@ -55,12 +72,16 @@ class PluginAppConfig(AppConfig):
|
|||||||
|
|
||||||
# deactivate all integrations
|
# deactivate all integrations
|
||||||
self._deactivate_plugins()
|
self._deactivate_plugins()
|
||||||
|
|
||||||
|
# remove maintenance
|
||||||
|
if not _maintenance:
|
||||||
|
set_maintenance_mode(False)
|
||||||
logger.info('Finished unloading plugins')
|
logger.info('Finished unloading plugins')
|
||||||
|
|
||||||
def reload_plugins(self):
|
def reload_plugins(self):
|
||||||
"""safely reload IntegrationPlugins"""
|
"""safely reload IntegrationPlugins"""
|
||||||
# TODO check if the system is in maintainance mode before reloading
|
|
||||||
logger.info('Start reloading plugins')
|
logger.info('Start reloading plugins')
|
||||||
|
with maintenance_mode_on():
|
||||||
self.unload_plugins()
|
self.unload_plugins()
|
||||||
self.load_plugins()
|
self.load_plugins()
|
||||||
logger.info('Finished reloading plugins')
|
logger.info('Finished reloading plugins')
|
||||||
|
14
InvenTree/templates/503.html
Normal file
14
InvenTree/templates/503.html
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{% extends "account/base.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
{% block head_title %}
|
||||||
|
{% trans "Page is in Maintenance" %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h3>{% trans "The Page is in currently in maintenance mode" %}</h3>
|
||||||
|
|
||||||
|
<div class='alert alert-danger alert-block'>
|
||||||
|
{% trans "This page will reload each minute until the page becomes available again." %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
@ -15,6 +15,7 @@ django-error-report==0.2.0 # Error report viewer for the admin interface
|
|||||||
django-filter==2.4.0 # Extended filtering options
|
django-filter==2.4.0 # Extended filtering options
|
||||||
django-formtools==2.3 # Form wizard tools
|
django-formtools==2.3 # Form wizard tools
|
||||||
django-import-export==2.5.0 # Data import / export for admin interface
|
django-import-export==2.5.0 # Data import / export for admin interface
|
||||||
|
django-maintenance-mode==0.16.1 # Shut down application while reloading etc.
|
||||||
django-markdownify==0.8.0 # Markdown rendering
|
django-markdownify==0.8.0 # Markdown rendering
|
||||||
django-markdownx==3.0.1 # Markdown form fields
|
django-markdownx==3.0.1 # Markdown form fields
|
||||||
django-money==1.1 # Django app for currency management
|
django-money==1.1 # Django app for currency management
|
||||||
|
Loading…
x
Reference in New Issue
Block a user