From b8b3a933ab1abe3a60db7aede337971836a45889 Mon Sep 17 00:00:00 2001
From: Oliver Walters <oliver.henry.walters@gmail.com>
Date: Sat, 15 Aug 2020 19:48:42 +1000
Subject: [PATCH 1/3] Add django-debug-toolbar plugin

- Must be running in DEBUG mode
- Must set debug_toolbar to True in config file
---
 InvenTree/InvenTree/settings.py | 14 +++++++++++++-
 InvenTree/InvenTree/urls.py     |  8 ++++++++
 InvenTree/config_template.yaml  |  6 ++++++
 requirements.txt                |  3 ++-
 4 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py
index e5b14314b5..6d68136fb2 100644
--- a/InvenTree/InvenTree/settings.py
+++ b/InvenTree/InvenTree/settings.py
@@ -172,9 +172,16 @@ MIDDLEWARE = [
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware',
-    'InvenTree.middleware.AuthRequiredMiddleware',
+
+    'InvenTree.middleware.AuthRequiredMiddleware'
 ]
 
+# If the debug toolbar is enabled, add the modules
+if DEBUG and CONFIG.get('debug_toolbar', False):
+    print("Running with DEBUG_TOOLBAR enabled")
+    INSTALLED_APPS.append('debug_toolbar')
+    MIDDLEWARE.append('debug_toolbar.middleware.DebugToolbarMiddleware')
+
 if CONFIG.get('log_queries', False):
     MIDDLEWARE.append('InvenTree.middleware.QueryCountMiddleware')
 
@@ -377,3 +384,8 @@ DBBACKUP_STORAGE = 'django.core.files.storage.FileSystemStorage'
 DBBACKUP_STORAGE_OPTIONS = {
     'location': CONFIG.get('backup_dir', tempfile.gettempdir()),
 }
+
+# Internal IP addresses allowed to see the debug toolbar
+INTERNAL_IPS = [
+    '127.0.0.1',
+]
\ No newline at end of file
diff --git a/InvenTree/InvenTree/urls.py b/InvenTree/InvenTree/urls.py
index c2d0d0f48f..d0076714ae 100644
--- a/InvenTree/InvenTree/urls.py
+++ b/InvenTree/InvenTree/urls.py
@@ -6,6 +6,7 @@ Passes URL lookup downstream to each app as required.
 
 
 from django.conf.urls import url, include
+from django.urls import path
 from django.contrib import admin
 from django.contrib.auth import views as auth_views
 from qr_code import urls as qr_code_urls
@@ -135,5 +136,12 @@ urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
 # Media file access
 urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
 
+# Debug toolbar access (if in DEBUG mode)
+if settings.DEBUG and 'debug_toolbar' in settings.INSTALLED_APPS:
+    import debug_toolbar
+    urlpatterns = [
+        path('__debug/', include(debug_toolbar.urls)),
+    ] + urlpatterns
+
 # Send any unknown URLs to the parts page
 urlpatterns += [url(r'^.*$', RedirectView.as_view(url='/index/', permanent=False), name='index')]
diff --git a/InvenTree/config_template.yaml b/InvenTree/config_template.yaml
index 5447606337..eef3e8727e 100644
--- a/InvenTree/config_template.yaml
+++ b/InvenTree/config_template.yaml
@@ -58,8 +58,14 @@ static_root: '../inventree_static'
 #  - git
 #  - ssh
 
+# Set debug_toolbar to True to enable a debugging toolbar for InvenTree
+# Note: This will only be displayed if DEBUG mode is enabled, 
+#       and only if InvenTree is accessed from a local IP (127.0.0.1)
+debug_toolbar: False
+
 # Logging options
 # If debug mode is enabled, set log_queries to True to show aggregate database queries in the debug console
+# TODO - Remove me!
 log_queries: False
 
 # Backup options
diff --git a/requirements.txt b/requirements.txt
index f09cc35167..c668612914 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -21,4 +21,5 @@ python-coveralls==2.9.1         # Coveralls linking (for Travis)
 rapidfuzz==0.7.6                # Fuzzy string matching
 django-stdimage==5.1.1          # Advanced ImageField management
 django-tex==1.1.7               # LaTeX PDF export
-django-weasyprint==1.0.1        # HTML PDF export
\ No newline at end of file
+django-weasyprint==1.0.1        # HTML PDF export
+django-debug-toolbar==2.2       # Debug / profiling toolbar
\ No newline at end of file

From 2bb669d7de5e9cb4248fc816f3fd12e2e696b5a7 Mon Sep 17 00:00:00 2001
From: Oliver Walters <oliver.henry.walters@gmail.com>
Date: Sat, 15 Aug 2020 19:52:04 +1000
Subject: [PATCH 2/3] Remove defunct "log_queries" option

---
 InvenTree/InvenTree/middleware.py | 2 ++
 InvenTree/InvenTree/settings.py   | 3 ---
 InvenTree/config_template.yaml    | 5 -----
 3 files changed, 2 insertions(+), 8 deletions(-)

diff --git a/InvenTree/InvenTree/middleware.py b/InvenTree/InvenTree/middleware.py
index 26cbc95bbf..37b9a27c63 100644
--- a/InvenTree/InvenTree/middleware.py
+++ b/InvenTree/InvenTree/middleware.py
@@ -91,6 +91,8 @@ class QueryCountMiddleware(object):
     To enable this middleware, set 'log_queries: True' in the local InvenTree config file.
 
     Reference: https://www.dabapps.com/blog/logging-sql-queries-django-13/
+
+    Note: 2020-08-15 - This is no longer used, instead we now rely on the django-debug-toolbar addon
     """
 
     def __init__(self, get_response):
diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py
index 6d68136fb2..7a3ab02433 100644
--- a/InvenTree/InvenTree/settings.py
+++ b/InvenTree/InvenTree/settings.py
@@ -182,9 +182,6 @@ if DEBUG and CONFIG.get('debug_toolbar', False):
     INSTALLED_APPS.append('debug_toolbar')
     MIDDLEWARE.append('debug_toolbar.middleware.DebugToolbarMiddleware')
 
-if CONFIG.get('log_queries', False):
-    MIDDLEWARE.append('InvenTree.middleware.QueryCountMiddleware')
-
 ROOT_URLCONF = 'InvenTree.urls'
 
 TEMPLATES = [
diff --git a/InvenTree/config_template.yaml b/InvenTree/config_template.yaml
index eef3e8727e..1c776a6f7a 100644
--- a/InvenTree/config_template.yaml
+++ b/InvenTree/config_template.yaml
@@ -63,11 +63,6 @@ static_root: '../inventree_static'
 #       and only if InvenTree is accessed from a local IP (127.0.0.1)
 debug_toolbar: False
 
-# Logging options
-# If debug mode is enabled, set log_queries to True to show aggregate database queries in the debug console
-# TODO - Remove me!
-log_queries: False
-
 # Backup options
 # Set the backup_dir parameter to store backup files in a specific location
 # If unspecified, the local user's temp directory will be used

From 3c4cfc9a1b61a076a527efc87b0efdb86bb4d922 Mon Sep 17 00:00:00 2001
From: Oliver Walters <oliver.henry.walters@gmail.com>
Date: Sat, 15 Aug 2020 19:56:02 +1000
Subject: [PATCH 3/3] Flake fix

---
 InvenTree/InvenTree/settings.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py
index 7a3ab02433..fb68f65497 100644
--- a/InvenTree/InvenTree/settings.py
+++ b/InvenTree/InvenTree/settings.py
@@ -385,4 +385,4 @@ DBBACKUP_STORAGE_OPTIONS = {
 # Internal IP addresses allowed to see the debug toolbar
 INTERNAL_IPS = [
     '127.0.0.1',
-]
\ No newline at end of file
+]