trackers.py 文件源码

python
阅读 18 收藏 0 点赞 0 评论 0

项目:django-trackstats 作者: pennersr 项目源码 文件源码
def track(self, qs):
        to_date = date.today()
        start_date = self.get_start_date(qs)
        if not start_date:
            return
        if self.period == Period.LIFETIME:
            # Intentionally recompute last stat, as we may have computed
            # that the last time when the day was not over yet.
            upto_date = start_date
            while upto_date <= to_date:
                self.track_lifetime_upto(qs, upto_date)
                upto_date += timedelta(days=1)
        elif self.period == Period.DAY:
            values_fields = ['ts_date'] + self.get_track_values()
            connection = connections[qs.db]
            tzname = (
                timezone.get_current_timezone_name()
                if settings.USE_TZ else None)

            is_datetime = isinstance(qs.model._meta.get_field(
                self.date_field), models.DateTimeField)
            if is_datetime:
                date_sql, tz_params = connection.ops.datetime_cast_date_sql(
                    self.date_field,
                    tzname)
                vals = qs.extra(
                    select={"ts_date": date_sql},
                    select_params=tz_params)
                start_dt = datetime.combine(
                    start_date, time()) - timedelta(days=1)
                if tzname:
                    start_dt = timezone.make_aware(
                        start_dt,
                        timezone.get_current_timezone())
            else:
                vals = qs.extra(select={"ts_date": self.date_field})
                start_dt = start_date
            vals = vals.filter(
                **{self.date_field + '__gte': start_dt}).values(
                *values_fields).order_by().annotate(ts_n=self.aggr_op)
            # TODO: Bulk create
            for val in vals:
                self.statistic_model.objects.record(
                    metric=self.metric,
                    value=val['ts_n'],
                    date=val['ts_date'],
                    period=self.period,
                    **self.get_record_kwargs(val))
        else:
            raise NotImplementedError
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号