# HG changeset patch # User Marcin Kuzminski # Date 2017-02-02 22:11:07 # Node ID 970f8533914c588722771b5e288cdb8f231a8420 # Parent 0d5c781fa9a40ffe20925e94960792196ea5a0d2 core: added metadata for control upgrades. diff --git a/rhodecode/config/middleware.py b/rhodecode/config/middleware.py --- a/rhodecode/config/middleware.py +++ b/rhodecode/config/middleware.py @@ -52,7 +52,8 @@ from rhodecode.lib.middleware.https_fixu from rhodecode.lib.middleware.vcs import VCSMiddleware from rhodecode.lib.plugins.utils import register_rhodecode_plugin from rhodecode.lib.utils2 import aslist as rhodecode_aslist -from rhodecode.subscribers import scan_repositories_if_enabled +from rhodecode.subscribers import ( + scan_repositories_if_enabled, write_metadata_if_needed) log = logging.getLogger(__name__) @@ -296,6 +297,7 @@ def includeme(config): # Add subscribers. config.add_subscriber(scan_repositories_if_enabled, ApplicationCreated) + config.add_subscriber(write_metadata_if_needed, ApplicationCreated) # Set the authorization policy. authz_policy = ACLAuthorizationPolicy() diff --git a/rhodecode/subscribers.py b/rhodecode/subscribers.py --- a/rhodecode/subscribers.py +++ b/rhodecode/subscribers.py @@ -18,11 +18,12 @@ # RhodeCode Enterprise Edition, including its added features, Support services, # and proprietary license terms, please see https://rhodecode.com/licenses/ - +import datetime import logging import pylons import Queue import subprocess32 +import os from pyramid.i18n import get_localizer from pyramid.threadlocal import get_current_request @@ -134,6 +135,40 @@ def scan_repositories_if_enabled(event): repo2db_mapper(repositories, remove_obsolete=False) +def write_metadata_if_needed(event): + """ + Writes upgrade metadata + """ + import rhodecode + from rhodecode.lib import system_info + from rhodecode.lib import ext_json + + def write(): + fname = '.rcmetadata.json' + ini_loc = os.path.dirname(rhodecode.CONFIG.get('__file__')) + metadata_destination = os.path.join(ini_loc, fname) + + dbinfo = system_info.SysInfo(system_info.database_info)()['value'] + del dbinfo['url'] + metadata = dict( + desc='upgrade metadata info', + created_on=datetime.datetime.utcnow().isoformat(), + usage=system_info.SysInfo(system_info.usage_info)()['value'], + platform=system_info.SysInfo(system_info.platform_type)()['value'], + database=dbinfo, + cpu=system_info.SysInfo(system_info.cpu)()['value'], + memory=system_info.SysInfo(system_info.memory)()['value'], + ) + + with open(metadata_destination, 'wb') as f: + f.write(ext_json.json.dumps(metadata)) + + try: + write() + except Exception: + pass + + class Subscriber(object): """ Base class for subscribers to the pyramid event system.