Exemple #1
0
 def set_db_version(self):
     ver = DbMigrateVersion()
     ver.version = __dbversion__
     ver.repository_id = 'rhodecode_db_migrations'
     ver.repository_path = 'versions'
     self.sa.add(ver)
     log.info('db version set to: %s' % __dbversion__)
Exemple #2
0
 def set_db_version(self):
     ver = DbMigrateVersion()
     ver.version = __dbversion__
     ver.repository_id = 'rhodecode_db_migrations'
     ver.repository_path = 'versions'
     self.sa.add(ver)
     log.info('db version set to: %s' % __dbversion__)
Exemple #3
0
 def set_db_version(self):
     ver = DbMigrateVersion()
     ver.version = __dbversion__
     ver.repository_id = "rhodecode_db_migrations"
     ver.repository_path = "versions"
     self.sa.add(ver)
     log.info("db version set to: %s" % __dbversion__)
Exemple #4
0
 def set_db_version(self):
     try:
         ver = DbMigrateVersion()
         ver.version = __dbversion__
         ver.repository_id = 'rhodecode_db_migrations'
         ver.repository_path = 'versions'
         self.sa.add(ver)
         self.sa.commit()
     except:
         self.sa.rollback()
         raise
     log.info('db version set to: %s', __dbversion__)
Exemple #5
0
    def get_server_info(self, environ=None):
        import platform
        import rhodecode
        import pkg_resources
        from rhodecode.model.meta import Base as sql_base, Session
        from sqlalchemy.engine import url
        from rhodecode.lib.base import get_server_ip_addr, get_server_port
        from rhodecode.lib.vcs.backends.git import discover_git_version
        from rhodecode.model.gist import GIST_STORE_LOC

        try:
            # cygwin cannot have yet psutil support.
            import psutil
        except ImportError:
            psutil = None

        environ = environ or {}
        _NA = 'NOT AVAILABLE'
        _memory = _NA
        _uptime = _NA
        _boot_time = _NA
        _cpu = _NA
        _disk = dict(percent=0, used=0, total=0, error='')
        _load = {'1_min': _NA, '5_min': _NA, '15_min': _NA}

        model = VcsSettingsModel()
        storage_path = model.get_repos_location()
        gist_storage_path = os.path.join(storage_path, GIST_STORE_LOC)
        archive_storage_path = rhodecode.CONFIG.get('archive_cache_dir', '')
        search_index_storage_path = rhodecode.CONFIG.get('search.location', '')

        if psutil:
            # disk storage
            try:
                _disk = dict(psutil.disk_usage(storage_path)._asdict())
            except Exception as e:
                log.exception('Failed to fetch disk info')
                _disk = {'percent': 0, 'used': 0, 'total': 0, 'error': str(e)}

            # memory
            _memory = dict(psutil.virtual_memory()._asdict())
            _memory['percent2'] = psutil._common.usage_percent(
                (_memory['total'] - _memory['free']), _memory['total'], 1)

            # load averages
            if hasattr(psutil.os, 'getloadavg'):
                _load = dict(
                    zip(['1_min', '5_min', '15_min'], psutil.os.getloadavg()))
            _uptime = time.time() - psutil.boot_time()
            _boot_time = psutil.boot_time()
            _cpu = psutil.cpu_percent(0.5)

        mods = dict([(p.project_name, p.version)
                     for p in pkg_resources.working_set])

        def get_storage_size(storage_path):
            sizes = []
            for file_ in os.listdir(storage_path):
                storage_file = os.path.join(storage_path, file_)
                if os.path.isfile(storage_file):
                    try:
                        sizes.append(os.path.getsize(storage_file))
                    except OSError:
                        log.exception('Failed to get size of storage file %s',
                                      storage_file)
                        pass

            return sum(sizes)

        # archive cache storage
        _disk_archive = {'percent': 0, 'used': 0, 'total': 0}
        try:
            archive_storage_path_exists = os.path.isdir(archive_storage_path)
            if archive_storage_path and archive_storage_path_exists:
                used = get_storage_size(archive_storage_path)
                _disk_archive.update({
                    'used': used,
                    'total': used,
                })
        except Exception as e:
            log.exception('failed to fetch archive cache storage')
            _disk_archive['error'] = str(e)

        # search index storage
        _disk_index = {'percent': 0, 'used': 0, 'total': 0}
        try:
            search_index_storage_path_exists = os.path.isdir(
                search_index_storage_path)
            if search_index_storage_path_exists:
                used = get_storage_size(search_index_storage_path)
                _disk_index.update({
                    'percent': 100,
                    'used': used,
                    'total': used,
                })
        except Exception as e:
            log.exception('failed to fetch search index storage')
            _disk_index['error'] = str(e)

        # gist storage
        _disk_gist = {'percent': 0, 'used': 0, 'total': 0, 'items': 0}
        try:
            items_count = 0
            used = 0
            for root, dirs, files in os.walk(safe_str(gist_storage_path)):
                if root == gist_storage_path:
                    items_count = len(dirs)

                for f in files:
                    try:
                        used += os.path.getsize(os.path.join(root, f))
                    except OSError:
                        pass
            _disk_gist.update({
                'percent': 100,
                'used': used,
                'total': used,
                'items': items_count
            })
        except Exception as e:
            log.exception('failed to fetch gist storage items')
            _disk_gist['error'] = str(e)

        # GIT info
        git_ver = discover_git_version()

        # SVN info
        # TODO: johbo: Add discover_svn_version to replace this code.
        try:
            import svn.core
            svn_ver = svn.core.SVN_VERSION
        except ImportError:
            svn_ver = None

        # DB stuff
        db_info = url.make_url(rhodecode.CONFIG['sqlalchemy.db1.url'])
        db_type = db_info.__to_string__()
        try:
            engine = sql_base.metadata.bind
            db_server_info = engine.dialect._get_server_version_info(
                Session.connection(bind=engine))
            db_version = '%s %s' % (db_info.drivername, '.'.join(
                map(str, db_server_info)))
        except Exception:
            log.exception('failed to fetch db version')
            db_version = '%s %s' % (db_info.drivername, '?')

        db_migrate = DbMigrateVersion.query().filter(
            DbMigrateVersion.repository_id == 'rhodecode_db_migrations').one()
        db_migrate_version = db_migrate.version

        info = {
            'py_version':
            ' '.join(platform._sys_version()),
            'py_path':
            sys.executable,
            'py_modules':
            sorted(mods.items(), key=lambda k: k[0].lower()),
            'platform':
            safe_unicode(platform.platform()),
            'storage':
            storage_path,
            'archive_storage':
            archive_storage_path,
            'index_storage':
            search_index_storage_path,
            'gist_storage':
            gist_storage_path,
            'db_type':
            db_type,
            'db_version':
            db_version,
            'db_migrate_version':
            db_migrate_version,
            'rhodecode_version':
            rhodecode.__version__,
            'rhodecode_config_ini':
            rhodecode.CONFIG.get('__file__'),
            'server_ip':
            '%s:%s' % (get_server_ip_addr(
                environ, log_errors=False), get_server_port(environ)),
            'server_id':
            rhodecode.CONFIG.get('instance_id'),
            'git_version':
            safe_unicode(git_ver),
            'hg_version':
            mods.get('mercurial'),
            'svn_version':
            svn_ver,
            'uptime':
            _uptime,
            'boot_time':
            _boot_time,
            'load':
            _load,
            'cpu':
            _cpu,
            'memory':
            _memory,
            'disk':
            _disk,
            'disk_archive':
            _disk_archive,
            'disk_gist':
            _disk_gist,
            'disk_index':
            _disk_index,
        }
        return info