Example #1
0
  def mget_days(cls, from_datetime=py_time.now(), to_datetime=py_time.now(), fields=[]):
    delta = timedelta(hours=24)
    from_yesterday = from_datetime - delta
    to_tomorrow = to_datetime + delta
    cursors = cls.get_by_query(query={'date': {'$gte': from_yesterday, '$lt': to_tomorrow}}, only=fields)
    def total_days(from_datetime, to_datetime):
      delta = to_datetime - from_datetime
      days = int(delta.total_seconds() / ONE_DAY) if not delta.total_seconds() < 0 else -1
      return days + 1

    infos = []
    for field in fields:
      info = {}
      info["total"] = 0
      info["stats"] = [0 for i in range(total_days(from_datetime, to_datetime))]
      infos.append(info)

    for cursor in cursors:
      date = cursor['date']
      for i, field in enumerate(fields):
        data = cursor.get(field, 0)
        total = 0
        if isinstance(data, dict):
          for hour in data:
            d_time = document_datetime(date, hour)
            if not (d_time >= from_datetime and d_time <= to_datetime):
              continue
            total += data[hour]
        else:
          total = data
        which_day = total_days(from_datetime, date)
        infos[i]['total'] += total
        infos[i]['stats'][which_day] = total
    return infos
Example #2
0
  def mget_hours(cls, from_datetime=py_time.now(), to_datetime=py_time.now(), fields=[]):
    delta = timedelta(hours=24)
    from_yesterday = from_datetime - delta
    to_tomorrow = to_datetime + delta
    cursors = cls.get_by_query(query={'date': {'$gte': from_yesterday, '$lt': to_tomorrow}}, only=fields)
    infos = []

    #WARING TODO: 可能出现跨小时问题。
    def total_hours(from_datetime, to_datetime): #统计总共需要返回多少个小时
      delta = to_datetime - from_datetime
      return int(delta.total_seconds() / ONE_HOUR)

    for field in fields: #初始化数组,给默认值
      info = {}
      info['total'] = 0
      info["stats"] = [0 for i in range(total_hours(from_datetime, to_datetime))]
      infos.append(info)

    # F*****g!!!Dirty code.
    for cursor in cursors:
      date = cursor['date']
      for i, field in enumerate(fields): #迭代每个field
        data = cursor.get(field, 0)
        if isinstance(data, dict): #如果是dict,表明统计的是时间
          for hour in data:
            d_time = document_datetime(date, hour) #lazy的做法,将小时加上document的date,和请求时间比较
            if not (d_time >= from_datetime and d_time <= to_datetime):
              continue
            infos[i]["total"] += data[hour]
            which_hour = total_hours(from_datetime, d_time) #在返回值的具体位置上设置
            infos[i]["stats"][which_hour] = data[hour]
        else:
          infos[i]["total"] += data
          infos[i]["stats"] = data
    return infos
Example #3
0
  def mget_days(cls, from_datetime=py_time.now(), to_datetime=py_time.now(), fields=[]):
    delta = timedelta(hours=24)
    from_yesterday = from_datetime - delta
    to_tomorrow = to_datetime + delta
    cursors = cls.get_by_query(query={'date': {'$gte': from_yesterday, '$lt': to_tomorrow}}, only=fields)

    infos = {
      "total": 0,
      "stats": time_dict(from_datetime, to_datetime, using='days')
    }

    def which_date(datetime):
      if datetime.date == from_datetime.date:
        return datetime_to_str(from_datetime)
      elif datetime.date == to_datetime.date:
        return datetime_to_str(to_datetime)
      else:
        return datetime.strftime('%Y-%m-%d 00:00:00')

    field = fields[0]
    for cursor in cursors:
      date = cursor['date']
      data = cursor.get(field, 0)
      total = 0
      if isinstance(data, dict):
        for hour in data:
          d_time = document_datetime(date, hour)
          if not (d_time >= from_datetime and d_time <= to_datetime):
            continue
          total += data[hour]
      else:
        total = data

      infos['total'] += total
      infos['stats'][which_date(date)] = total
    return infos
Example #4
0
  def mget_hours(cls, from_datetime=py_time.now(), to_datetime=py_time.now(), fields=[]):
    delta = timedelta(hours=24)
    from_yesterday = from_datetime - delta
    to_tomorrow = to_datetime + delta
    cursors = cls.get_by_query(query={'date': {'$gte': from_yesterday, '$lt': to_tomorrow}}, only=fields)
    infos = {
      'total': 0,
      'stats': time_dict(from_datetime, to_datetime, using='hours')
    }

    field = fields[0]
    for cursor in cursors:
      date = cursor['date']
      data = cursor.get(field, 0)
      if isinstance(data, dict):
        for hour in data:
          d_time = document_datetime(date, hour)
          if not (d_time >= from_datetime and d_time <= to_datetime):
            continue
          infos["total"] += data[hour]
          infos["stats"][datetime_to_str(d_time)] = data[hour]
      else:
        infos["total"] += data
    return infos