Code Monkey home page Code Monkey logo

doctor's People

Contributors

damnever avatar hit9 avatar wooparadog avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

doctor's Issues

当前接口状态的判断和请求的处理方式不应该放在一起

Hi, 代码里把当前接口的状态的判断和当前请求处理方式的判断放到一起,我觉得是不是不太合适。

当前接口的状态由如下三个条件决定:

  • 接口当前是否健康
  • 最近一次请求的结果
  • 接口熔断持续的时间

而当前请求的处理方式决定规则如下:

  • MODE_LOCKED 都是 False
  • MODE_UNLOCKED 都是 True
  • MODE_RECOVER
    • 如果是刚从 MODE_LOCKED 转换过来,那么是 True
    • 其他情况下,bool(random.random() < float(locked_span) / self._max_recovery_time)

如果先判断当前接口的状态再判断请求的处理方式,则整个逻辑会看上去简单的多:

        locked_span = time_now - locked_at
        if (locked_status == MODE_LOCKED and
                health_ok_now and
                locked_span >= self._min_recovery_time):
            # enter into recover mode
            lock['locked_status'] = MODE_RECOVER
            lock_changed = MODE_RECOVER
        elif locked_status == MODE_RECOVER:
            if self._metrics.api_latest_state.get(key, False):
                if locked_span >= self._max_recovery_time:
                    lock['locked_at'] = 0
                    lock['locked_status'] = MODE_UNLOCKED
                    lock_changed = MODE_UNLOCKED
            else:
                # still suffering, lock it again
                lock['locked_at'] = time_now
                lock['locked_status'] = MODE_LOCKED
                lock_changed = MODE_LOCKED
        elif locked_status == MODE_UNLOCKED and \
                not health_ok_now:
            # turns BAD
            lock['locked_at'] = time_now
            lock['locked_status'] = MODE_LOCKED
            lock_changed = MODE_LOCKED

        current_locked_status = lock['locked_status']
        if current_locked_status == MODE_LOCKED:
            result = False
        elif current_locked_status == MODE_UNLOCKED:
            result = True
        elif current_locked_status == MODE_RECOVER:
            if lock_changed is not None:
                # one request will be released for health checking once
                # this api enters recover mode
                result = True
            else:
                result = bool(random.random() <
                              float(locked_span) / self._max_recovery_time)

setup.py 需要完善信息.

description="", 这个可以直接把 readme 搞进来.
url=''" 这个用 github 地址\
author='Eleme Dev', => 这个有 wangchao, wangxiangyu, 等等. 可以看看 git st 的状况.
author_email='', => 这个填你和王超的邮箱.

health checker测试的用例

  1. MinRecoveryTime未达到时不能解锁
  2. MaxRecoveryTime达到时必须解锁
  3. 最简单情形: unlocked 到 100%错误锁住
  4. locked后health变好,进入recover mode的测试

以上每个情形一个用例。

另外注意PEP8

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.