初级
解析熔断器状态转换日志
未完成
初级参考
完整示例代码供参考,建议自己理解后重新输入
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
👑
升级 VIP
解锁全部题目,畅通无阻地学习
- ✓ 解锁全部训练包所有题目
- ✓ 查看完整参考代码和提示
- ✓ 浏览器内直接运行 Python 代码
- ✓ 自动批改 + 进度追踪
30天
¥18
1年
¥99
2年
¥158
3年
¥199