Skip to content

Instantly share code, notes, and snippets.

@snopoke
Last active April 1, 2019 08:49
Show Gist options
  • Save snopoke/43462ea5b7322d3422e979e02cc0ea39 to your computer and use it in GitHub Desktop.
Save snopoke/43462ea5b7322d3422e979e02cc0ea39 to your computer and use it in GitHub Desktop.
Mobile UCR SQL Log
from casexml.apps.phone.tests.utils import call_fixture_generator
from corehq.apps.app_manager.fixtures.mobile_ucr import report_fixture_generator
from casexml.apps.phone.models import OTARestoreCommCareUser
from corehq.apps.users.models import CommCareUser
from corehq.apps.app_manager.models import Application
from datetime import date
import logging
from corehq.apps.app_manager.models import ReportModule
from corehq.apps.app_manager.fixtures.mobile_ucr import ReportFixturesProvider
import json
class CustomFileHandler(logging.FileHandler):
msgs = []
def emit(self, record):
if 'log this' in record.msg:
super(CustomFileHandler, self).emit(record)
if 'config_report_icds-cas' in record.msg:
self.msgs.append('--start\n{}\n--end'.format(record.msg.replace('%s', "'%s'")))
if record.msg == '%r' and self.msgs:
args = tuple([
a.strftime('%Y-%m-%d') if isinstance(a, date) else a
for a in record.args[0].params
])
msg = self.msgs.pop(0)
record.msg = msg
record.args = args
super(CustomFileHandler, self).emit(record)
def clear_handlers(logger):
for h in logger.handlers:
logger.removeHandler(h)
clear_handlers(logging.getLogger(''))
for d in logging.Logger.manager.loggerDict:
clear_handlers(logging.getLogger(d))
logger = logging.getLogger('sqlalchemy.engine')
logger.setLevel(logging.INFO)
clear_handlers(logger)
logger.addHandler(CustomFileHandler('sql.log'))
logger.addHandler(logging.FileHandler('all.log'))
app_id = '<app id>'
app = Application.get(app_id)
username = '<username>'
user = CommCareUser.get_by_username(username)
ruser = OTARestoreCommCareUser(user.domain, user)
#call_fixture_generator(report_fixture_generator, ruser, app=app)
apps = [app]
report_configs = [
report_config
for app_ in apps
for module in app_.modules if isinstance(module, ReportModule)
for report_config in module.report_configs
]
for i, rc in enumerate(report_configs):
logger.info('log this: {}: {}'.format(i, json.dumps(rc.to_json())))
ReportFixturesProvider.report_config_to_v1_fixture(rc, ruser)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment