From e2c2f6416757a02e12702a2c59db037857fc5c24 Mon Sep 17 00:00:00 2001 From: CyberMind-FR Date: Wed, 31 Dec 2025 11:59:35 +0100 Subject: [PATCH] feat(secubox): implement conditional debug logging MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added debugMode flag that checks URL hash or localStorage setting. Debug logging only outputs when enabled via: - URL: /#/admin/secubox/apps#debug - Console: localStorage.setItem('secubox_debug', 'true') All debug logs prefixed with [AppStore] or [Modules] for clarity. Warnings and errors remain in production for critical issues. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- .../resources/view/secubox/apps.js | 29 ++++++++++++------- .../resources/view/secubox/modules.js | 18 ++++++++++-- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/luci-app-secubox/htdocs/luci-static/resources/view/secubox/apps.js b/luci-app-secubox/htdocs/luci-static/resources/view/secubox/apps.js index 7b100b72..ec72acce 100644 --- a/luci-app-secubox/htdocs/luci-static/resources/view/secubox/apps.js +++ b/luci-app-secubox/htdocs/luci-static/resources/view/secubox/apps.js @@ -36,6 +36,13 @@ return view.extend({ categoriesData: {}, currentFilter: 'all', filterLayer: null, + debugMode: (window.location.hash.indexOf('debug') !== -1) || (localStorage.getItem('secubox_debug') === 'true'), + + debug: function() { + if (this.debugMode && console && console.log) { + console.log.apply(console, ['[AppStore]'].concat(Array.prototype.slice.call(arguments))); + } + }, load: function() { return this.refreshData(); @@ -44,20 +51,20 @@ return view.extend({ refreshData: function() { var self = this; return API.getAppstoreApps().then(function(data) { - console.log('getAppstoreApps raw response:', data); + self.debug('getAppstoreApps raw response:', data); if (!data) { - console.warn('getAppstoreApps returned empty data'); + console.warn('[AppStore] getAppstoreApps returned empty data'); return { apps: [], categories: {} }; } - console.log('Apps from API:', data.apps); - console.log('Categories from API:', data.categories); + self.debug('Apps from API:', data.apps); + self.debug('Categories from API:', data.categories); self.appsData = data.apps || []; self.categoriesData = data.categories || {}; - console.log('Stored appsData:', self.appsData); - console.log('Stored categoriesData:', self.categoriesData); + self.debug('Stored appsData:', self.appsData); + self.debug('Stored categoriesData:', self.categoriesData); return data; }).catch(function(err) { - console.error('Error loading appstore apps:', err); + console.error('[AppStore] Error loading appstore apps:', err); ui.addNotification(null, E('p', _('Failed to load app store: ') + err.message), 'error'); return { apps: [], categories: {} }; }); @@ -69,10 +76,10 @@ return view.extend({ var categories = (data && data.categories) || this.categoriesData || {}; // Debug logging - console.log('Apps render - data:', data); - console.log('Apps render - apps array:', apps); - console.log('Apps render - apps.length:', apps.length); - console.log('Apps render - categories:', categories); + self.debug('Apps render - data:', data); + self.debug('Apps render - apps array:', apps); + self.debug('Apps render - apps.length:', apps.length); + self.debug('Apps render - categories:', categories); var defaultFilter = this.currentFilter || 'all'; var container = E('div', { diff --git a/luci-app-secubox/htdocs/luci-static/resources/view/secubox/modules.js b/luci-app-secubox/htdocs/luci-static/resources/view/secubox/modules.js index f0aa26d1..ef4e5737 100644 --- a/luci-app-secubox/htdocs/luci-static/resources/view/secubox/modules.js +++ b/luci-app-secubox/htdocs/luci-static/resources/view/secubox/modules.js @@ -35,6 +35,13 @@ return view.extend({ modulesData: [], currentFilter: 'all', filterLayer: null, + debugMode: (window.location.hash.indexOf('debug') !== -1) || (localStorage.getItem('secubox_debug') === 'true'), + + debug: function() { + if (this.debugMode && console && console.log) { + console.log.apply(console, ['[Modules]'].concat(Array.prototype.slice.call(arguments))); + } + }, load: function() { return this.refreshData(); @@ -43,14 +50,17 @@ return view.extend({ refreshData: function() { var self = this; return API.getModules().then(function(data) { + self.debug('getModules raw response:', data); if (!data) { - console.warn('getModules returned empty data'); + console.warn('[Modules] getModules returned empty data'); return { modules: [] }; } + self.debug('Modules from API:', data.modules); self.modulesData = data.modules || []; + self.debug('Stored modulesData:', self.modulesData); return data; }).catch(function(err) { - console.error('Error loading modules:', err); + console.error('[Modules] Error loading modules:', err); ui.addNotification(null, E('p', _('Failed to load modules: ') + err.message), 'error'); return { modules: [] }; }); @@ -60,6 +70,10 @@ return view.extend({ var self = this; var modules = (data && data.modules) || this.modulesData || []; + self.debug('Modules render - data:', data); + self.debug('Modules render - modules array:', modules); + self.debug('Modules render - modules.length:', modules.length); + var defaultFilter = this.currentFilter || 'all'; var container = E('div', { 'class': 'secubox-modules-page',