diff --git a/rhodecode/controllers/admin/settings.py b/rhodecode/controllers/admin/settings.py --- a/rhodecode/controllers/admin/settings.py +++ b/rhodecode/controllers/admin/settings.py @@ -49,7 +49,7 @@ from rhodecode.lib.compat import Ordered from rhodecode.lib.ext_json import json from rhodecode.lib.utils import jsonify -from rhodecode.model.db import RhodeCodeUi, Repository +from rhodecode.model.db import RhodeCodeUi, Repository, User from rhodecode.model.forms import ApplicationSettingsForm, \ ApplicationUiSettingsForm, ApplicationVisualisationForm, \ LabsSettingsForm, IssueTrackerPatternsForm @@ -60,6 +60,7 @@ from rhodecode.model.meta import Session from rhodecode.model.settings import ( IssueTrackerSettingsModel, VcsSettingsModel, SettingNotFound, SettingsModel) + from rhodecode.model.supervisor import SupervisorModel, SUPERVISOR_MASTER @@ -524,6 +525,7 @@ class SettingsController(BaseController) def settings_system(self): """GET /admin/settings/system: All items in the collection""" # url('admin_settings_system') + snapshot = str2bool(request.GET.get('snapshot')) c.active = 'system' defaults = self._form_defaults() @@ -558,6 +560,35 @@ class SettingsController(BaseController) except TypeError: c.system_memory = 'NOT AVAILABLE' + rhodecode_ini_safe = rhodecode.CONFIG.copy() + blacklist = [ + 'rhodecode_license_key', + 'routes.map', + 'pylons.h', + 'pylons.app_globals', + 'pylons.environ_config', + 'sqlalchemy.db1.url', + ('app_conf', 'sqlalchemy.db1.url') + ] + for k in blacklist: + if isinstance(k, tuple): + section, key = k + if section in rhodecode_ini_safe: + rhodecode_ini_safe[section].pop(key, None) + else: + rhodecode_ini_safe.pop(k, None) + + c.rhodecode_ini_safe = rhodecode_ini_safe + + # TODO: marcink, figure out how to allow only selected users to do this + c.allowed_to_snapshot = False + + if snapshot: + if c.allowed_to_snapshot: + return render('admin/settings/settings_system_snapshot.html') + else: + h.flash('You are not allowed to do this', category='warning') + return htmlfill.render( render('admin/settings/settings.html'), defaults=defaults, diff --git a/rhodecode/templates/admin/settings/settings_system.html b/rhodecode/templates/admin/settings/settings_system.html --- a/rhodecode/templates/admin/settings/settings_system.html +++ b/rhodecode/templates/admin/settings/settings_system.html @@ -45,12 +45,15 @@

${_('System Info')}

+ % if c.allowed_to_snapshot: + ${_('create snapshot')} + % endif
%for dt, dd, tt in elems: -
${dt}:
-
${dd}
+
${dt}:
+
${dd}
%endfor
@@ -69,7 +72,7 @@ %for key, value in c.py_modules: - ${key} + ${key} ${value} %endfor diff --git a/rhodecode/templates/admin/settings/settings_system_snapshot.html b/rhodecode/templates/admin/settings/settings_system_snapshot.html new file mode 100644 --- /dev/null +++ b/rhodecode/templates/admin/settings/settings_system_snapshot.html @@ -0,0 +1,75 @@ +<% + elems = [ + ## general + (_('RhodeCode Enterprise version'), c.rhodecode_version, ''), + (_('Upgrade info endpoint'), c.rhodecode_update_url, ''), + (_('Configuration INI file'), c.rhodecode_config_ini, ''), + ## systems stats + (_('RhodeCode Enterprise Server IP'), c.server_ip, ''), + (_('RhodeCode Enterprise Server ID'), c.server_id, ''), + (_('Platform'), c.platform, ''), + (_('Uptime'), c.uptime_age, ''), + (_('Storage location'), c.storage, ''), + (_('Storage disk space'), "%s/%s, %s%% used%s" % (h.format_byte_size_binary(c.disk['used']), h.format_byte_size_binary(c.disk['total']),(c.disk['percent']), ' %s' % c.disk['error'] if 'error' in c.disk else ''), ''), + + (_('Search index storage'), c.index_storage, ''), + (_('Search index size'), "%s %s" % (h.format_byte_size_binary(c.disk_index['used']), ' %s' % c.disk_index['error'] if 'error' in c.disk_index else ''), ''), + + (_('Gist storage'), c.gist_storage, ''), + (_('Gist storage size'), "%s (%s items)%s" % (h.format_byte_size_binary(c.disk_gist['used']),c.disk_gist['items'], ' %s' % c.disk_gist['error'] if 'error' in c.disk_gist else ''), ''), + + (_('Archive cache'), c.archive_storage, ''), + (_('Archive cache size'), "%s%s" % (h.format_byte_size_binary(c.disk_archive['used']), ' %s' % c.disk_archive['error'] if 'error' in c.disk_archive else ''), ''), + + (_('System memory'), c.system_memory, ''), + (_('CPU'), '%s %%' %(c.cpu), ''), + (_('Load'), '1min: %s, 5min: %s, 15min: %s' %(c.load['1_min'],c.load['5_min'],c.load['15_min']), ''), + + ## rhodecode stuff + (_('Python version'), c.py_version, ''), + (_('Python path'), c.py_path, ''), + (_('GIT version'), c.git_version, ''), + (_('HG version'), c.hg_version, ''), + (_('SVN version'), c.svn_version, ''), + (_('Database'), "%s @ version: %s" % (c.db_type, c.db_migrate_version), ''), + (_('Database version'), c.db_version, ''), + + ] +%> + +
+SYSTEM INFO
+-----------
+
+% for dt, dd, tt in elems:
+${dt}: ${dd}
+% endfor
+
+PYTHON PACKAGES
+---------------
+
+% for key, value in c.py_modules:
+${key}: ${value}
+% endfor
+
+SYSTEM SETTINGS
+---------------
+
+% for key, value in sorted(c.rhodecode_ini_safe.items()):
+  % if isinstance(value, dict):
+
+    % for key2, value2 in value.items():
+[${key}]${key2}: ${value2}
+    % endfor
+
+  % else:
+${key}: ${value}
+  % endif
+% endfor
+
+
+ + + + +