Exemple #1
0
def sentry_report(exctype, value, tb, **tags):
    tags.update({
        'version': stoqserver.version_str,
        'stoq_version': stoq.version,
        'architecture': platform.architecture(),
        'distribution': platform.dist(),
        'python_version': tuple(sys.version_info),
        'system': platform.system(),
        'uname': platform.uname(),
    })
    # Those are inside a try/except because thy require database access.
    # If the database access is not working, we won't be able to get them
    try:
        default_store = api.get_default_store()
        tags['user_hash'] = api.sysparam.get_string('USER_HASH')
        tags['demo'] = api.sysparam.get_bool('DEMO_MODE')
        tags['postgresql_version'] = get_database_version(default_store)
        tags['plugins'] = InstalledPlugin.get_plugin_names(default_store)
        tags['cnpj'] = get_main_cnpj(default_store)
    except Exception:
        pass

    # Disable send sentry log if we are on developer mode.
    developer_mode = stoqserver.library.uninstalled
    if raven_client is not None and not developer_mode:
        if hasattr(raven_client, 'user_context'):
            raven_client.user_context({'id': tags.get('hash', None),
                                       'username': tags.get('cnpj', None)})
        raven_client.captureException((exctype, value, tb), tags=tags)
Exemple #2
0
def sentry_report(exctype, value, tb, **tags):
    tags.update({
        'version': stoqserver.version_str,
        'stoq_version': stoq.version,
        'architecture': platform.architecture(),
        'distribution': platform.dist(),
        'python_version': tuple(sys.version_info),
        'system': platform.system(),
        'uname': platform.uname(),
    })
    # Those are inside a try/except because thy require database access.
    # If the database access is not working, we won't be able to get them
    try:
        default_store = api.get_default_store()
        tags['user_hash'] = api.sysparam.get_string('USER_HASH')
        tags['demo'] = api.sysparam.get_bool('DEMO_MODE')
        tags['postgresql_version'] = get_database_version(default_store)
        tags['plugins'] = InstalledPlugin.get_plugin_names(default_store)
        tags['cnpj'] = get_main_cnpj(default_store)
    except Exception:
        pass

    # Disable send sentry log if we are on developer mode.
    developer_mode = stoqserver.library.uninstalled
    if raven_client is not None and not developer_mode:
        if hasattr(raven_client, 'user_context'):
            raven_client.user_context({
                'id': tags.get('hash', None),
                'username': tags.get('cnpj', None)
            })
        raven_client.captureException((exctype, value, tb), tags=tags)
Exemple #3
0
    def _maybe_create_database(self):
        logger.info(
            '_maybe_create_database (db_is_local=%s, enable_production=%s)' %
            (self.wizard.db_is_local, self.wizard.enable_production))
        if self.wizard.db_is_local:
            self._launch_stoqdbadmin()
            return
        elif self.wizard.enable_production:
            self._launch_stoqdbadmin()
            return

        self.wizard.write_pgpass()
        settings = self.wizard.settings
        self.wizard.config.load_settings(settings)

        store = settings.create_super_store()
        version = get_database_version(store)

        if version < (9, 1):
            store.close()
            error(
                _("Stoq requires PostgresSQL 9.1 or later, but %s found") %
                (".".join(map(str, version))))

        try:
            check_extensions(store=store)
        except ValueError:
            store.close()
            error(
                _("Missing PostgreSQL extension on the server, "
                  "please install postgresql-contrib on it"))

        store.close()
        self.process_view.feed("** Creating database\r\n")
        self._launch_stoqdbadmin()
Exemple #4
0
    def _maybe_create_database(self):
        logger.info('_maybe_create_database (db_is_local=%s, enable_production=%s)'
                    % (self.wizard.db_is_local, self.wizard.enable_production))
        if self.wizard.db_is_local:
            self._launch_stoqdbadmin()
            return
        elif self.wizard.enable_production:
            self._launch_stoqdbadmin()
            return

        self.wizard.write_pgpass()
        settings = self.wizard.settings
        self.wizard.config.load_settings(settings)

        store = settings.create_super_store()
        version = get_database_version(store)

        if version < (9, 1):
            store.close()
            error(_("Stoq requires PostgresSQL 9.1 or later, but %s found") % (
                ".".join(map(str, version))))

        try:
            check_extensions(store=store)
        except ValueError:
            store.close()
            error(_("Missing PostgreSQL extension on the server, "
                    "please install postgresql-contrib on it"))

        store.close()
        self.process_view.feed("** Creating database\r\n")
        self._launch_stoqdbadmin()
Exemple #5
0
    def test_get_database_version(self):
        store = mock.Mock()

        # Test version returned by Ubuntu
        store.execute.return_value = _FakeResults("90114")
        self.assertEqual(get_database_version(store), (9, 1, 14))

        # Test version returned by Windows
        store.execute.return_value = _FakeResults("90304")
        self.assertEqual(get_database_version(store), (9, 3, 4))

        # Test version returned by Debian (while postgresql were in beta)
        store.execute.return_value = _FakeResults("90400")
        self.assertEqual(get_database_version(store), (9, 4, 0))

        # Fake version 10.1.99
        store.execute.return_value = _FakeResults("100199")
        self.assertEqual(get_database_version(store), (10, 1, 99))
Exemple #6
0
    def test_get_database_version(self):
        store = mock.Mock()

        # Test version returned by Ubuntu
        store.execute.return_value = _FakeResults("90114")
        self.assertEqual(get_database_version(store), (9, 1, 14))

        # Test version returned by Windows
        store.execute.return_value = _FakeResults("90304")
        self.assertEqual(get_database_version(store), (9, 3, 4))

        # Test version returned by Debian (while postgresql were in beta)
        store.execute.return_value = _FakeResults("90400")
        self.assertEqual(get_database_version(store), (9, 4, 0))

        # Fake version 10.1.99
        store.execute.return_value = _FakeResults("100199")
        self.assertEqual(get_database_version(store), (10, 1, 99))
Exemple #7
0
    def _maybe_create_database(self):
        logger.info(
            '_maybe_create_database (db_is_local=%s, enable_production=%s)' %
            (self.wizard.db_is_local, self.wizard.enable_production))
        if self.wizard.db_is_local:
            self._launch_stoqdbadmin()
            return
        elif self.wizard.enable_production:
            self._launch_stoqdbadmin()
            return

        self.wizard.write_pgpass()
        settings = self.wizard.settings
        self.wizard.config.load_settings(settings)

        store = settings.create_super_store()
        version = get_database_version(store)

        if version < (9, 1):
            store.close()
            error(
                _("Stoq requires PostgresSQL 9.1 or later, but %s found") %
                (".".join(map(str, version))))

        try:
            check_extensions(store=store)
        except ValueError:
            store.close()
            error(
                _("Missing PostgreSQL extension on the server, "
                  "please install postgresql-contrib on it"))

        store.close()

        # Secondly, ask the user if he really wants to create the database,
        dbname = settings.dbname
        if yesno(
                _(u"The specified database '%s' does not exist.\n"
                  u"Do you want to create it?") % dbname, gtk.RESPONSE_YES,
                _(u"Create database"), _(u"Don't create")):
            self.process_view.feed("** Creating database\r\n")
            self._launch_stoqdbadmin()
        else:
            self.process_view.feed("** Not creating database\r\n")
            self.wizard.disable_next()
Exemple #8
0
    def _maybe_create_database(self):
        logger.info('_maybe_create_database (db_is_local=%s, enable_production=%s)'
                    % (self.wizard.db_is_local, self.wizard.enable_production))
        if self.wizard.db_is_local:
            self._launch_stoqdbadmin()
            return
        elif self.wizard.enable_production:
            self._launch_stoqdbadmin()
            return

        self.wizard.write_pgpass()
        settings = self.wizard.settings
        self.wizard.config.load_settings(settings)

        store = settings.create_super_store()
        version = get_database_version(store)

        if version < (9, 1):
            store.close()
            error(_("Stoq requires PostgresSQL 9.1 or later, but %s found") % (
                ".".join(map(str, version))))

        try:
            check_extensions(store=store)
        except ValueError:
            store.close()
            error(_("Missing PostgreSQL extension on the server, "
                    "please install postgresql-contrib on it"))

        store.close()

        # Secondly, ask the user if he really wants to create the database,
        dbname = settings.dbname
        if yesno(_(u"The specified database '%s' does not exist.\n"
                   u"Do you want to create it?") % dbname,
                 gtk.RESPONSE_YES, _(u"Create database"), _(u"Don't create")):
            self.process_view.feed("** Creating database\r\n")
            self._launch_stoqdbadmin()
        else:
            self.process_view.feed("** Not creating database\r\n")
            self.wizard.disable_next()
Exemple #9
0
    def _excepthook(exctype, value, tb):
        tags = {
            'version': ".".join(str(i) for i in stoqserver.__version__),
            'stoq_version': stoq.version,
            'architecture': platform.architecture(),
            'distribution': platform.dist(),
            'python_version': tuple(sys.version_info),
            'system': platform.system(),
            'uname': platform.uname(),
        }
        # Those are inside a try/except because thy require database access.
        # If the database access is not working, we won't be able to get them
        try:
            default_store = api.get_default_store()
            tags['user_hash'] = api.sysparam.get_string('USER_HASH')
            tags['demo'] = api.sysparam.get_bool('DEMO_MODE')
            tags['postgresql_version'] = get_database_version(default_store)
            tags['plugins'] = InstalledPlugin.get_plugin_names(default_store)
            tags['cnpj'] = get_main_cnpj(default_store)
        except Exception:
            pass

        _raven_client.captureException((exctype, value, tb), tags=tags)
        traceback.print_exception(exctype, value, tb)
Exemple #10
0
    def _excepthook(exctype, value, tb):
        tags = {
            'version': stoqserver.version_str,
            'stoq_version': stoq.version,
            'architecture': platform.architecture(),
            'distribution': platform.dist(),
            'python_version': tuple(sys.version_info),
            'system': platform.system(),
            'uname': platform.uname(),
        }
        # Those are inside a try/except because thy require database access.
        # If the database access is not working, we won't be able to get them
        try:
            default_store = api.get_default_store()
            tags['user_hash'] = api.sysparam.get_string('USER_HASH')
            tags['demo'] = api.sysparam.get_bool('DEMO_MODE')
            tags['postgresql_version'] = get_database_version(default_store)
            tags['plugins'] = InstalledPlugin.get_plugin_names(default_store)
            tags['cnpj'] = get_main_cnpj(default_store)
        except Exception:
            pass

        _raven_client.captureException((exctype, value, tb), tags=tags)
        traceback.print_exception(exctype, value, tb)
Exemple #11
0
def collect_report():
    report_ = {}

    # Date and uptime
    report_["date"] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    report_["tz"] = time.tzname
    report_["uptime"] = get_uptime()
    report_["locale"] = get_system_locale()

    # Python and System
    import platform

    report_["architecture"] = " ".join(platform.architecture())
    report_["distribution"] = " ".join(platform.dist())
    report_["python_version"] = _fix_version(sys.version_info)
    report_["uname"] = " ".join(platform.uname())
    report_["system"] = platform.system()

    # Stoq application
    info = get_utility(IAppInfo, None)
    if info and info.get("name"):
        report_["app_name"] = info.get("name")
        report_["app_version"] = _fix_version(info.get("ver"))

    # External dependencies
    import gtk

    report_["pygtk_version"] = _fix_version(gtk.pygtk_version)
    report_["gtk_version"] = _fix_version(gtk.gtk_version)

    import kiwi

    report_["kiwi_version"] = _fix_version(kiwi.__version__.version + (_get_revision(kiwi),))

    import psycopg2

    try:
        parts = psycopg2.__version__.split(" ")
        extra = " ".join(parts[1:])
        report_["psycopg_version"] = _fix_version(map(int, parts[0].split(".")) + [extra])
    except:
        report_["psycopg_version"] = _fix_version(psycopg2.__version__)

    import reportlab

    report_["reportlab_version"] = _fix_version(reportlab.Version)

    import stoqdrivers

    report_["stoqdrivers_version"] = _fix_version(stoqdrivers.__version__ + (_get_revision(stoqdrivers),))

    report_["product_key"] = get_product_key()

    try:
        from stoqlib.lib.kiwilibrary import library

        report_["bdist_type"] = library.bdist_type
    except Exception:
        pass

    # PostgreSQL database server
    try:
        from stoqlib.database.settings import get_database_version

        default_store = get_default_store()
        report_["postgresql_version"] = _fix_version(get_database_version(default_store))
        report_["demo"] = sysparam.get_bool("DEMO_MODE")
        report_["cnpj"] = get_main_cnpj(default_store)
        report_["plugins"] = ", ".join(InstalledPlugin.get_plugin_names(default_store))
    except Exception:
        pass

    # Tracebacks
    report_["tracebacks"] = {}
    for i, trace in enumerate(_tracebacks):
        t = "".join(traceback.format_exception(*trace))
        # Eliminate duplicates:
        md5sum = hashlib.md5(t).hexdigest()
        report_["tracebacks"][md5sum] = t

    if info and info.get("log"):
        report_["log"] = open(info.get("log")).read()
        report_["log_name"] = info.get("log")

    return report_
Exemple #12
0
def collect_report():
    report_ = {}

    # Date and uptime
    report_['date'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    report_['tz'] = time.tzname
    report_['uptime'] = get_uptime()
    report_['locale'] = get_system_locale()

    # Python and System
    import platform
    report_['architecture'] = platform.architecture()
    report_['distribution'] = platform.dist()
    report_['python_version'] = tuple(sys.version_info)
    report_['system'] = platform.system()
    report_['uname'] = platform.uname()

    # Stoq application
    info = get_utility(IAppInfo, None)
    if info and info.get('name'):
        report_['app_name'] = info.get('name')
        report_['app_version'] = info.get('ver')

    # External dependencies
    import gtk
    report_['pygtk_version'] = gtk.pygtk_version
    report_['gtk_version'] = gtk.gtk_version

    import kiwi
    report_['kiwi_version'] = kiwi.__version__.version + (_get_revision(kiwi),)

    import psycopg2
    try:
        parts = psycopg2.__version__.split(' ')
        extra = ' '.join(parts[1:])
        report_['psycopg_version'] = tuple(map(int, parts[0].split('.'))) + (extra,)
    except:
        report_['psycopg_version'] = psycopg2.__version__

    import reportlab
    report_['reportlab_version'] = reportlab.Version.split('.')

    import stoqdrivers
    report_['stoqdrivers_version'] = stoqdrivers.__version__ + (
        _get_revision(stoqdrivers),)

    report_['product_key'] = get_product_key()

    try:
        from stoqlib.lib.kiwilibrary import library
        report_['bdist_type'] = library.bdist_type
    except Exception:
        pass

    # PostgreSQL database server
    try:
        from stoqlib.database.settings import get_database_version
        default_store = get_default_store()
        report_['postgresql_version'] = get_database_version(default_store)
        report_['plugins'] = InstalledPlugin.get_plugin_names(default_store)
        report_['demo'] = sysparam.get_bool('DEMO_MODE')
        report_['cnpj'] = get_main_cnpj(default_store)
    except Exception:
        pass

    # Tracebacks
    report_['tracebacks'] = {}
    for i, trace in enumerate(_tracebacks):
        t = ''.join(traceback.format_exception(*trace))
        # Eliminate duplicates:
        md5sum = hashlib.md5(t).hexdigest()
        report_['tracebacks'][md5sum] = t

    if info and info.get('log'):
        report_['log'] = open(info.get('log')).read()
        report_['log_name'] = info.get('log')

    return report_
Exemple #13
0
def collect_report():
    report_ = {}

    # Date and uptime
    report_['date'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    report_['tz'] = time.tzname
    report_['uptime'] = get_uptime()
    report_['locale'] = get_system_locale()

    # Python and System
    import platform
    report_['architecture'] = ' '.join(platform.architecture())
    report_['distribution'] = ' '.join(platform.dist())
    report_['python_version'] = _fix_version(sys.version_info)
    report_['uname'] = ' '.join(platform.uname())
    report_['system'] = platform.system()

    # Stoq application
    info = get_utility(IAppInfo, None)
    if info and info.get('name'):
        report_['app_name'] = info.get('name')
        report_['app_version'] = _fix_version(info.get('ver'))

    # External dependencies
    import gi
    report_['gtk_version'] = _fix_version(gi.version_info)

    import kiwi
    report_['kiwi_version'] = _fix_version(
        kiwi.__version__.version + (_get_revision(kiwi), ))

    import psycopg2
    try:
        parts = psycopg2.__version__.split(' ')
        extra = ' '.join(parts[1:])
        report_['psycopg_version'] = _fix_version(
            list(map(int, parts[0].split('.'))) + [extra])
    except Exception:
        report_['psycopg_version'] = _fix_version(psycopg2.__version__)

    import reportlab
    report_['reportlab_version'] = _fix_version(reportlab.Version)

    import stoqdrivers
    report_['stoqdrivers_version'] = _fix_version(
        stoqdrivers.__version__ + (_get_revision(stoqdrivers), ))

    report_['product_key'] = get_product_key()

    try:
        from stoqlib.lib.kiwilibrary import library
        report_['bdist_type'] = library.bdist_type
    except Exception:
        pass

    # PostgreSQL database server
    try:
        from stoqlib.database.settings import get_database_version
        default_store = get_default_store()
        report_['postgresql_version'] = _fix_version(
            get_database_version(default_store))
        report_['demo'] = sysparam.get_bool('DEMO_MODE')
        report_['hash'] = sysparam.get_string('USER_HASH')
        report_['cnpj'] = get_main_cnpj(default_store)
        report_['plugins'] = ', '.join(
            InstalledPlugin.get_plugin_names(default_store))
    except Exception:
        pass

    # Tracebacks
    report_['tracebacks'] = {}
    for i, trace in enumerate(_tracebacks):
        t = ''.join(traceback.format_exception(*trace))
        # Eliminate duplicates:
        md5sum = hashlib.md5(t).hexdigest()
        report_['tracebacks'][md5sum] = t

    if info and info.get('log'):
        report_['log'] = open(info.get('log')).read()
        report_['log_name'] = info.get('log')

    return report_
Exemple #14
0
def post_ping_request(station):
    if is_developer_mode():
        return

    from .lib.restful import PDV_VERSION
    target = 'https://app.stoq.link:9000/api/ping'
    time_format = '%d-%m-%Y %H:%M:%S%Z'
    store = api.get_default_store()
    plugin_manager = get_plugin_manager()
    boot_time = datetime.datetime.fromtimestamp(
        psutil.boot_time()).strftime(time_format)

    def get_stoq_conf():
        with open(get_config().get_filename(), 'r') as fh:
            return fh.read().encode()

    def get_clisitef_ini():
        try:
            with open('CliSiTef.ini', 'r') as fh:
                return fh.read().encode()
        except FileNotFoundError:
            return ''.encode()

    while True:
        try:
            dpkg_list = subprocess.check_output('dpkg -l \\*stoq\\*',
                                                shell=True).decode()
        except subprocess.CalledProcessError:
            dpkg_list = ""
        stoq_packages = re.findall(r'ii\s*(\S*)\s*(\S*)', dpkg_list)
        if PDV_VERSION:
            logger.info('Running stoq_pdv {}'.format(PDV_VERSION))
        logger.info('Running stoq {}'.format(stoq_version))
        logger.info('Running stoq-server {}'.format(stoqserver_version))
        logger.info('Running stoqdrivers {}'.format(stoqdrivers_version))
        local_time = tzlocal.get_localzone().localize(datetime.datetime.now())

        response = requests.post(
            target,
            headers={
                'Stoq-Backend':
                '{}-portal'.format(api.sysparam.get_string('USER_HASH'))
            },
            data={
                'station_id':
                station.id,
                'data':
                json.dumps({
                    'platform': {
                        'architecture': platform.architecture(),
                        'distribution': platform.dist(),
                        'system': platform.system(),
                        'uname': platform.uname(),
                        'python_version': platform.python_version_tuple(),
                        'postgresql_version': get_database_version(store)
                    },
                    'system': {
                        'boot_time': boot_time,
                        'cpu_times': psutil.cpu_times(),
                        'load_average': os.getloadavg(),
                        'disk_usage': psutil.disk_usage('/'),
                        'virtual_memory': psutil.virtual_memory(),
                        'swap_memory': psutil.swap_memory()
                    },
                    'plugins': {
                        'available':
                        plugin_manager.available_plugins_names,
                        'installed':
                        plugin_manager.installed_plugins_names,
                        'active':
                        plugin_manager.active_plugins_names,
                        'versions':
                        getattr(plugin_manager, 'available_plugins_versions',
                                None)
                    },
                    'running_versions': {
                        'pdv': PDV_VERSION,
                        'stoq': stoq_version,
                        'stoqserver': stoqserver_version,
                        'stoqdrivers': stoqdrivers_version
                    },
                    'stoq_packages':
                    dict(stoq_packages),
                    'local_time':
                    local_time.strftime(time_format),
                    'stoq_conf_md5':
                    md5(get_stoq_conf()).hexdigest(),
                    'clisitef_ini_md5':
                    md5(get_clisitef_ini()).hexdigest()
                })
            })

        logger.info("POST {} {} {}".format(target, response.status_code,
                                           response.elapsed.total_seconds()))
        gevent.sleep(3600)