コード例 #1
0
 def hour_range(key,
                uid='',
                xid='',
                label='',
                day=lambda: today(),
                hour=-1,
                value='',
                name=None,
                save=True,
                sep='|',
                sub='-',
                default=None):
     """ 获取当前时间整点所在的整点区间 """
     """ 例如, 当前时间的整点是10点, value为'3-8|9-14|15-23', 则10在区间[9, 14]之间,
             返回的值是[9, 14]
     """
     groups = StatsLog.group(key,
                             uid=uid,
                             xid=xid,
                             label=label,
                             day=day,
                             hour=hour,
                             value=value,
                             name=name,
                             save=save,
                             sep=sep,
                             sub=sub)
     if not groups:
         return None
     h = datetime.now().hour
     for x in groups:
         if x[0] <= h <= x[1]:
             return x
     return default
コード例 #2
0
 def list(key,
          uid='',
          xid='',
          label='',
          day=lambda: today(),
          hour=-1,
          value='',
          name=None,
          save=True,
          sep='|',
          coerce=int):
     """ 将特定格式的字符串转为一维数组 """
     """ 例如, 字符串格式为'1|2|3|4', 返回的是[1, 2, 3, 4] """
     text = StatsLog.text(key,
                          uid=uid,
                          xid=xid,
                          label=label,
                          day=day,
                          hour=hour,
                          value=value,
                          name=name,
                          save=save)
     if not text:
         return None
     texts = text.split(sep)
     return [coerce(x) for x in texts]
コード例 #3
0
 def group(key,
           uid='',
           xid='',
           label='',
           day=lambda: today(),
           hour=-1,
           value='',
           name=None,
           save=True,
           sep='|',
           sub='-',
           coerce=int):
     """ 将特定格式的字符串转为二维数组 """
     """ 例如, 字符串格式为'1-3|4-9|10-32|64-128', 
         返回的是[[1, 3], [4, 9], [10, 32], [64, 128]]
     """
     text = StatsLog.text(key,
                          uid=uid,
                          xid=xid,
                          label=label,
                          day=day,
                          hour=hour,
                          value=value,
                          name=name,
                          save=save)
     if not text:
         return None
     texts = text.split(sep)
     return [[coerce(y) for y in x.split(sub)] for x in texts]
コード例 #4
0
ファイル: models.py プロジェクト: xiongxianzhu/qingmi
    def set_bool(key, uid='', xid='', label='', day=lambda: today(), hour=-1,
                 value=False, name=None, save=True):
        """ 设置值(布尔值) """
        if not isinstance(value, bool):
            raise ValueError('The type of value is not bool.')
        if callable(day):
            day = day()
        day = str(day)[:10]

        params = dict(set__value=value, set__updated_at=datetime.now())
        if name is not None:
            params['set__name'] = name
        log = StatsLog.objects(key=key, uid=uid, xid=xid, label=label, day=day,
                               hour=hour).modify(**params)
        if log:
            return value
        if save:
            StatsLog(
                key=key,
                data_type=StatsLog.TYPE.BOOLEAN,
                uid=uid,
                xid=xid,
                label=label,
                day=day,
                hour=hour,
                value=value,
                name=name).save()
            return value
        return None
コード例 #5
0
ファイル: models.py プロジェクト: xiongxianzhu/qingmi
    def bool(key, uid='', xid='', label='', day=lambda: today(), hour=-1,
             value=False, name=None, save=True):
        """ 取值(布尔值) """
        if not isinstance(value, bool):
            raise ValueError('The type of value is not bool.')
        if callable(day):
            day = day()
        day = str(day)[:10]

        log = StatsLog.objects(key=key, uid=uid, xid=xid, label=label,
                               day=day, hour=hour).first()
        if log:
            if name is not None:
                log.name = name
                log.save()
            return True if log.value in ['true', 'True', True] else False
        if save:
            StatsLog(
                key=key,
                data_type=StatsLog.TYPE.BOOLEAN,
                uid=uid,
                xid=xid,
                label=label,
                day=day,
                hour=hour,
                value=value,
                name=name).save()
            return value
        return None
コード例 #6
0
ファイル: models.py プロジェクト: xiongxianzhu/qingmi
    def set_text(key, uid='', xid='', label='', day=lambda: today(),
                 hour=-1, value='', name=None, save=True):
        """ 设置值(字符串) """
        if callable(day):
            day = day()
        day = str(day)[:10]

        params = dict(set__value=value, set__updated_at=datetime.now())
        if name is not None:
            params['set__name'] = name
        log = StatsLog.objects(key=key, uid=uid, xid=xid, label=label,
                               day=day, hour=hour).modify(**params)
        if log:
            return value
        if save:
            StatsLog(
                key=key,
                data_type=StatsLog.TYPE.STRING,
                uid=uid,
                xid=xid,
                label=label,
                day=day,
                hour=hour,
                value=value,
                name=name).save()
            return value
        return None
コード例 #7
0
ファイル: models.py プロジェクト: xiongxianzhu/qingmi
 def text(key, uid='', xid='', label='', day=lambda: today(),
          hour=-1, value='', name=None, save=True):
     """ 取值(字符串) """
     if callable(day):
         day = day()
     day = str(day)[:10]
     log = StatsLog.objects(key=key, uid=uid, xid=xid, label=label,
                            day=day, hour=hour).first()
     if log:
         if name is not None:
             log.name = name
             log.save()
         return log.value
     if save:
         StatsLog(
             key=key,
             data_type=StatsLog.TYPE.STRING,
             uid=uid,
             xid=xid,
             label=label,
             day=day,
             hour=hour,
             value=value,
             name=name).save()
         return value
     return None
コード例 #8
0
ファイル: models.py プロジェクト: xiongxianzhu/qingmi
    def inc(key, uid='', xid='', label='', day=lambda: today(),
            hour=-1, start=0, value=1, name=None, save=True):
        """ 递增(整型/浮点型) """
        if callable(day):
            day = day()
        day = str(day)[:10]

        data_type = StatsLog.TYPE.FLOAT if isinstance(
            value, float) else StatsLog.TYPE.INT
        params = dict(
            inc__value=value,
            set__data_type=data_type,
            set__updated_at=datetime.now())
        if name is not None:
            params['set__name'] = name
        log = StatsLog.objects(key=key, uid=uid, xid=xid, label=label,
                               day=day, hour=hour).modify(**params)
        if log:
            return log.value + value
        if save:
            StatsLog(
                key=key,
                data_type=data_type,
                uid=uid,
                xid=xid,
                label=label,
                day=day,
                hour=hour,
                value=start + value,
                name=name).save()
            return start + value
        return None
コード例 #9
0
ファイル: models.py プロジェクト: xiongxianzhu/qingmi
 def choice(key, uid='', xid='', label='', day=lambda: today(),
            hour=-1, value='', name=None, save=True, sep='|', coerce=str):
     return coerce(
         random.choice(
             StatsLog.text(
                 key,
                 uid=uid,
                 xid=xid,
                 label=label,
                 day=day,
                 hour=hour,
                 value=value,
                 name=name,
                 save=save).split(sep)))
コード例 #10
0
 def get(key,
         uid='',
         xid='',
         label='',
         day=lambda: today(),
         hour=-1,
         value=0,
         name=None,
         save=True):
     """ 取值(整型/浮点型) """
     if callable(day):
         day = day()
     day = str(day)[:10]
     log = StatsLog.objects(key=key,
                            uid=uid,
                            xid=xid,
                            label=label,
                            day=day,
                            hour=hour).first()
     if log:
         if name is not None:
             log.name = name
             log.save()
         try:
             if log.data_type == StatsLog.TYPE.INT:
                 return int(log.value)
             if log.data_type == StatsLog.TYPE.FLOAT:
                 return float(log.value)
         except ValueError as e:
             return 0
     if save:
         data_type = StatsLog.TYPE.FLOAT if type(
             value) is float else StatsLog.TYPE.INT
         StatsLog(key=key,
                  data_type=data_type,
                  uid=uid,
                  xid=xid,
                  label=label,
                  day=day,
                  hour=hour,
                  value=value,
                  name=name).save()
         return value
     return None