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)
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)
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()
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()
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))
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()
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()
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)
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)
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_
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_
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_
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)