def create_or_update_stats(cls, dt: pendulum.DateTime): date = dt.date() today = utils.get_current_datetime().date() log, _ = cls.objects.get_or_create(date=date) # 如果是今天之前的记录就不在更新了 if date < today: return log log.new_user_count = sm.User.get_new_user_count_by_datetime(dt) log.active_user_count = pm.UserTrafficLog.get_active_user_count_by_datetime(dt) log.checkin_user_count = sm.UserCheckInLog.get_checkin_user_count(dt.date()) log.order_count = sm.UserOrder.get_success_order_count(dt) log.order_amount = decimal.Decimal(sm.UserOrder.get_success_order_amount(dt)) log.total_used_traffic = pm.UserTrafficLog.calc_traffic_by_datetime(dt) log.save() return log
def calc_traffic_by_datetime(cls, dt: pendulum.DateTime, user_id=None, proxy_node=None): """获取指定日期指定用户的流量,只有今天的数据会hit db""" if dt.date() == utils.get_current_datetime().date(): return cls._calc_traffic_by_datetime.uncached( cls, dt, user_id, proxy_node.id if proxy_node else None, ) return cls._calc_traffic_by_datetime( dt.start_of("day"), user_id, proxy_node.id if proxy_node else None, )
def get_active_user_count_by_datetime(cls, dt: pendulum.DateTime): """获取指定日期的活跃用户数量,只有今天的数据会hit db""" today = utils.get_current_datetime() if dt.date() == today.date(): return cls._get_active_user_count_by_datetime.uncached(cls, dt) return cls._get_active_user_count_by_datetime(dt.start_of("day"))
def _get_by_dt(self, dt: pendulum.DateTime): return self.log_dict[str(dt.date())]