Beispiel #1
0
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])
Beispiel #2
0
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])
Beispiel #3
0
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])
Beispiel #4
0
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])
Beispiel #5
0
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])
Beispiel #6
0
class PerformanceViewSet(UserApiMixin, viewsets.ReadOnlyModelViewSet):
    queryset = using_stats_db(models.Performance.objects.all())
    serializer_class = serializers.PerformanceSerializer
    filter_fields = {
        'paper': ['exact', 'in'],
        'paper_id': ['exact', 'in'],
        'user': ['exact']
    }
    search_fields = ('paper__title', 'user__first_name')
    ordering_fields = ('score', 'update_time')
Beispiel #7
0
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])
Beispiel #8
0
class StatViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = using_stats_db(models.Stat.objects.all())
    serializer_class = serializers.StatSerializer
    filter_fields = {
        'id': ['in', 'exact'],
        'the_date': ['exact', 'gte', 'lte', 'range'],
        'metics': ['exact'],
        'owner_id': ['exact', 'isnull']
    }

    @decorators.action(['get'], detail=False)
    def stat(self, request):
        return do_rest_stat_action(self, stats.stats_stat)
Beispiel #9
0
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])