首个错误在第几行

👁️ 1 人浏览 💬 0 人评论 ❤️ 添加收藏

按模型,四行里第 2 行是 ERROR,root_line(lines) 交回几?

贯穿本节的运维模型(判题机纯 Python、无网,这是它的确定模型,见 spine.py):服务上线后靠日志/指标/健康/告警盯住它。

从日志定位:每行 {"level":..,"req":..,"ts":..}root_line=首个 ERROR 行号、first_bad=首个出错的请求、failed_reqs=出过错的请求、in_window(lines,lo,hi)=时间窗内几行。

import json


def parse(line):
    return json.loads(line)


def root_line(lines):
    """第一条 ERROR 在第几行(从 1 数);没有交回 0。"""
    for i, l in enumerate(lines, 1):
        if parse(l)["level"] == "ERROR":
            return i
    return 0


def first_bad(lines):
    """第一条 ERROR 是哪个请求(req 字段)引发的;没有交回空串。"""
    for l in lines:
        e = parse(l)
        if e["level"] == "ERROR":
            return e["req"]
    return ""


def failed_reqs(lines):
    """出过 ERROR 的请求 id(去重排序)。"""
    return sorted(set(parse(l)["req"] for l in lines if parse(l)["level"] == "ERROR"))


def in_window(lines, lo, hi):
    """时间戳 ts 落在 [lo, hi] 里的日志有几行。"""
    return sum(1 for l in lines if lo <= parse(l)["ts"] <= hi)

lines = ['{"level":"INFO","req":"r1","ts":10}', '{"level":"ERROR","req":"r2","ts":20}', '{"level":"ERROR","req":"r2","ts":25}', '{"level":"INFO","req":"r3","ts":40}']
print(root_line(lines))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论