def stats_login(qset=None, measures=None, period=None): from xyz_common.models import Event qset = qset if qset is not None else Event.objects.filter( name__startswith='login') qset = statutils.using_stats_db(qset) dstat = statutils.DateStat(qset, 'create_time') gm = { 'login.wechat.mp.qrcode': u'电脑扫码', 'login.wechat.mp': u'微信公号', 'login.mobile': u'手机号', 'login': u'帐号密码', 'login.temptoken': u'临时密码' } funcs = { 'today': lambda: dstat.stat( "今天", count_field="owner_id", distinct=True, only_first=True), 'yesterday': lambda: dstat.stat( "昨天", count_field="owner_id", distinct=True, only_first=True), 'all': lambda: qset.values("owner_id").distinct().count(), 'count': lambda: dstat.get_period_query_set(period).count(), 'daily': lambda: dstat.stat(period, count_field='owner_id', distinct=True), 'type': lambda: statutils.count_by(dstat.get_period_query_set(period), 'name', count_field='owner_id', distinct=True, sort="-", group_map=gm) } return dict([(m, funcs[m]()) for m in measures])
def stats_record(qset=None, measures=None, period=None, time_field=None): qset = qset if qset is not None else models.Record.objects.all() qset = statutils.using_stats_db(qset) dstat = statutils.DateStat(qset, 'the_date') funcs = { 'all': lambda: qset.count(), 'daily': lambda: dstat.group_by( period, measures=[Count('user', distinct=True), Sum('value')]), # 'exercise_done': lambda : dstat.group_by(measures=[Sum('value'), Count('user', distinct=True)]), 'user_group': lambda: statutils.group_by( dstat.get_period_query_set(period), 'user_group', measures=[Count('user', distinct=True), Sum('value')], sort="-"), 'owner': lambda: statutils.group_by( dstat.get_period_query_set(period), "owner_group,owner_name", measures=[Count('user', distinct=True), Sum('value')], sort="-"), 'owner_group': lambda: statutils.group_by( dstat.get_period_query_set(period), "owner_group", measures=[Count('user', distinct=True), Sum('value')], sort="-") } return dict([(m, funcs[m]()) for m in measures])
def stats_stat(qset=None, measures=None, period=None, time_field=None): qset = qset if qset is not None else models.Stat.objects.all() qset = statutils.using_stats_db(qset) dstat = statutils.DateStat(qset, 'the_date') funcs = { 'daily': lambda: dstat.stat(period, count_field='id', distinct=True), } return dict([(m, funcs[m]()) for m in measures])
def stats_paper(qset=None, measures=None, period=None, time_field=None): qset = qset if qset is not None else models.Paper.objects.all() qset = statutils.using_stats_db(qset) dstat = statutils.DateStat(qset, 'create_time') funcs = { 'all': lambda: qset.count(), 'tags': lambda: statutils.count_by(qset, 'tags') } return dict([(m, funcs[m]()) for m in measures])
def stats_fault(qset=None, measures=None, period=None, time_field=None): qset = qset if qset is not None else models.Fault.objects.all() qset = statutils.using_stats_db(qset) dstat = statutils.DateStat(qset, 'update_time') funcs = { 'today': lambda: dstat.stat("今天", count_field="user_id", distinct=True, only_first=True), 'count': lambda: dstat.get_period_query_set(period).count(), 'all': lambda: qset.values("user_id").distinct().count(), } return dict([(m, funcs[m]()) for m in measures])
def stats_answer(qset=None, measures=None, period=None, time_field=None): qset = qset if qset is not None else models.Answer.objects.all() qset = statutils.using_stats_db(qset) dstat = statutils.DateStat(qset, 'create_time') funcs = { 'today': lambda: dstat.stat( "今天", count_field="user_id", distinct=True, only_first=True), 'yesterday': lambda: dstat.stat( "昨天", count_field="user_id", distinct=True, only_first=True), 'all': lambda: qset.values("user_id").distinct().count(), 'count': lambda: dstat.get_period_query_set(period).count(), 'daily': lambda: dstat.stat(period, count_field='user_id', distinct=True), 'class': lambda: statutils.count_by(dstat.get_period_query_set(period), 'user__as_school_student__class__name', count_field='user_id', distinct=True, sort="-"), 'course': lambda: statutils.count_by_generic_relation( dstat.get_period_query_set(period), "paper__course_course__name", count_field='user_id', distinct=True, sort="-"), 'chapter': lambda: statutils.count_by_generic_relation( dstat.get_period_query_set(period), "paper__course_chapter__name", count_field='user_id', distinct=True, sort="-"), 'student': lambda: statutils.count_by( dstat.get_period_query_set(period), "user__as_school_student__class__name,user__as_school_student__name" ), 'student_course': lambda: statutils.count_with_generic_relation( dstat.get_period_query_set(period), "user__as_school_student__class__name,user__as_school_student__name,paper__owner", trans_map={'course.chapter': ['course__name']}), 'right': lambda: detail_group_stat(dstat.get_period_query_set(period), 'right'), 'userAnswer': lambda: detail_group_stat(dstat.get_period_query_set(period), 'userAnswer'), } return dict([(m, funcs[m]()) for m in measures])
def stats_video(qset=None, measures=None, period=None, time_field=None): qset = qset if qset is not None else models.Video.objects.all() qset = statutils.using_stats_db(qset) dstat = statutils.DateStat(qset, 'create_time') funcs = { 'today': lambda: dstat.stat("今天", count_field="id", only_first=True), 'yesterday': lambda: dstat.stat("昨天", count_field="id", only_first=True), 'all': lambda: qset.values("id").distinct().count(), 'count': lambda: dstat.get_period_query_set(period).count(), 'owner_type': lambda: statutils.count_by( dstat.get_period_query_set(period), 'owner_type__model', count_field='owner_type', distinct=True, sort="-"), 'owner_id': lambda: statutils.count_by( dstat.get_period_query_set(period), 'owner_type,owner_id', count_field='id', distinct=True, sort="-"), } return dict([(m, funcs[m]()) for m in measures])