← 返回题库
初级

解析熔断器状态转换日志

未完成
初级参考 完整示例代码供参考,建议自己理解后重新输入
def solve():
    from pyodide.http import open_url
    from io import StringIO
    circuit_breaker_log_csv = open_url("https://data.zuihe.com/dbd/ms-shop/state_03/circuit_breaker_log.csv").read()
    import pandas as pd
    from io import StringIO
    log = pd.read_csv(StringIO(circuit_breaker_log_csv))
    def analyze_cb(df, service):
        svc = df[df['service']==service].sort_values('timestamp')
        open_cnt = (svc['to_state']=='Open').sum()
        closed_cnt = (svc['to_state']=='Closed').sum()
        half_cnt = (svc['to_state']=='Half-Open').sum()
        recovered = (svc['from_state']=='Half-Open') & (svc['to_state']=='Closed')
        print(f"{service}:")
        print(f"  Open次数: {open_cnt}, Half-Open: {half_cnt}, Closed(恢复): {closed_cnt}")
        print(f"  最终状态: {svc.iloc[-1]['to_state'] if len(svc)>0 else 'N/A'}")
        for _, r in svc.iterrows():
            print(f"  [{r['from_state']}]->[{r['to_state']}] reason={r['reason'][:40]}")
    for svc in log['service'].unique():
        analyze_cb(log, svc)

示例

输入
solve()
期望输出
payment-service:
  Open次数: 1, Half-Open: 1, Closed(恢复): 1
  最终状态: Closed
  [Closed]->[Open] reason=failure_rate=0.60 > threshold=0.50
  [Open]->[Half-Open] reason=timeout=30s elapsed
  [Half-Open]->[Closed] reason=probe_success
order-service:
  Open次数: 2, Half-Open: 2, Closed(恢复): 1
  最终状态: Closed
  [Closed]->[Open] reason=failure_rate=0.55 > threshold=0.50
  [Open]->[Half-Open] reason=timeout=30s elapsed
  [Half-Open]->[Open] reason=probe_failed
  [Open]->[Half-Open] reason=timeout=30s elapsed
  [Half-Open]->[Closed] reason=probe_success
Python 代码 🔒 登录后使用
🔒

登录后即可练习

注册免费账号,在浏览器中直接运行 Python 代码