models.py 文件源码

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

项目:minstances 作者: 0xa 项目源码 文件源码
def score_uptime(self):
        """ CW: sqlalchemy hell """
        tc = Ping.time >= sqlf.now() - timedelta(days=7)
        global_fs = sql.select([sqlf.count()]).where((Ping.instance_id==self.id) & (Ping.state==False)).as_scalar().label('gfs')
        global_ts = sql.select([sqlf.count()]).where((Ping.instance_id==self.id) & (Ping.state==True)).as_scalar().label('gts')
        recent_fs = sql.select([sqlf.count()]).where((Ping.instance_id==self.id) & (Ping.state==False) & tc).as_scalar().label('rfs')
        recent_ts = sql.select([sqlf.count()]).where((Ping.instance_id==self.id) & (Ping.state==True) & tc).as_scalar().label('rts')

        global_uptime = hsubq(self, sql.select([sqlf.coalesce(global_ts / (global_fs + global_ts), 0)]))
        recent_uptime = hsubq(self, sql.select([sqlf.coalesce(recent_ts / (recent_fs + recent_ts), 0)]))
        continuous_bonus = hlimit(dt_seconds_now(self.last_state_change) / 3600 * 24 * 7, 0, 0.2)

        if isinstance(self, Instance):
            logger.debug("score:uptime: global=%.2f recent=%.2f bonus=%.2f",
                         global_uptime, recent_uptime, continuous_bonus)

        r = hlimit(global_uptime * 0.4 + recent_uptime * 0.60 + continuous_bonus, 0, 1)
        return r
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号