配置分类

Triage 会根据配置文件分析诊断数据。

概览

借助分类功能,任何人都能轻松添加新的方式来分析 fx snapshot 数据 偏离标称条件的情况。

默认情况下,配置文件的读取来源 //src/diagnostics/config/triage/*.triage。只需在其中添加新的配置文件即可。

配置文件语法为 JSON5。

每个配置文件指定四种配置:选择器和评估 (统称为“指标”)、操作次数和测试次数。

  • 选择器会加载值,以供评估和操作使用。
  • 评估值会计算值,以供评估和操作使用。
  • 操作决定着如何对特定指定值执行操作。
  • 测试包括示例数据,用于验证指定的操作是否会触发 正确。

每个 Select、Eval、Test 和 Action 都有一个名称。因此,配置的结构 文件为:

{
    "select": {
        "select1": "type:component:node/path:property",
        "select2": "type:component:node/path:property"
    },
    "eval": {
        "name1": "select1+select2",
        "name2": "select1 - select2"
    },
    "act": {
        "action1": { .... },
        "action2": { .... }
    },
    "test": {
        "test1": { .... },
        "test2": { .... }
    }
}

名称和命名空间

Select、Eval、Action、Test 和 config 文件名由 后跟零个或多个小写字符或下划线字符 字母数字字符或下划线字符。因此,“abc123”和“_abc_123”有效 但“123abc”“a.b.c”和“abc-123”。具体而言,文件名 不得包含除 .triage 扩展名之外的其他句点。

一个文件中的评估、测试和操作可以引用选择器、评估和操作 另一个文件中文件基名用作命名空间。:: 用作 分隔符。例如,如果文件 foo.triage 已加载且包含指标 名为 bar,则任何配置文件都可以引用 foo::bar

名称可以在“指标”“测试”和“操作”之间重复使用,但不能在“选择”之间重复使用 和评估。

用户定义的名称必须以小写字母开头。提供的语言 函数都以大写字母开头。

注意:程序的当前版本不一定会强制执行这些条件 限制。

选择器

选择器使用选择器格式。第一个 : 前面的文本用于选择 从 inspect.json 文件中获取组件名称。以 . 分隔的中间部分 指定检查节点名称,此名称形成一个以 第二个 :

计算

求值字符串是带有普通运算符优先级的内插数学表达式。

()。

算术运算符为 + - * / // /? //?/ 是浮点除法;// 为整数 部门。除号为 ? 的除法运算符返回 Problem::忽略除以 0 时。

函数是函数名称 '(', 逗号分隔表达式列表, ')'。 提供的功能包括:

  • 布尔值 <ph type="x-smartling-placeholder">
      </ph>
    • And(1+ args)
    • Or(1+ args)
    • Not(1 arg)
    • 如果值是 Missing 类型错误,则 Missing(value) 会返回 true 。
    • 如果值是任何类型的错误,Problem(value) 会返回 true。
    • True() 会返回 true
    • False() 返回 false
  • 数字 <ph type="x-smartling-placeholder">
      </ph>
    • Min(1+ args)
    • Max(1+ args)
    • Abs(1 arg)
  • 功能性 <ph type="x-smartling-placeholder">
      </ph>
    • Fn([name1, name2, ...], expression)
    • Map(function, vector1, vector2, ...)
    • Fold(function, vector, optional_start_value)
    • Filter(function, vector)
    • Apply(function, [arg1, arg2, ...])
    • Count(vector)
  • 时间 <ph type="x-smartling-placeholder">
      </ph>
    • Days()Hours()Minutes()Seconds()Millis()Micros()、 和 Nanos() 计算值以与单调时间戳进行比较。
    • Now() 会返回诊断数据发生时的大致时间戳 创建。
  • 其他
    • Option(value1, value2, value3...) 会返回第一个有用的值, 支持选择器迁移和默认值:第一个非空列表, 非缺失值(如果有);或者为空列表;或缺失。
    • Annotation(string) 会从 注释.json 文件(如果存在)。
    • SyslogHas(regex)KlogHas(regex)BootlogHas(regex) 退货 true 如果 syslog、内核日志或上一次启动日志包含与以下内容匹配的行 正则表达式。
    • StringMatches(value, regex) 将指定的正则表达式应用于指定的 值,如果有匹配,则返回 true。正则表达式的语法是 支持。正则表达式 crate

指标类型遵循从检查文件中读取的类型。目前,UInt 为 转换为 Int 类型。在混合 Int 和 Float 上运行可提高 转换为浮点数。

布尔运算为 > < >= <= == !=。相等性测试 ==!=比较 数字、布尔值、字符串和向量。> < >= <= 仅会比较数字。

空格在所有地方都是可选的,但建议针对 infix 运算符使用空格。

无需专门分隔指标名称(包括命名空间名称)。

函数式编程和矢量

每个选择器实际上都会返回一个向量,但单项向量 自动解封以进行算术和布尔值 计算。检查没有通配符的选择器会返回一个单项 向量,除非相同的名称在 inspect.json 中多次出现。

带通配符的选择器、bootstrap/driver_managercore/network/netstack 以及(最终)日志选择器可能会返回 多个项。为处理此类值,Triage 提供了 以下函数:

  • Fn(参数, 表达式) - 例如 Fn([a, b], a+b)
  • 映射(函数, 矢量 1, 矢量 2...)
  • Fold(function, vector) 或 Fold(function, vector, start_value)
  • 过滤器(函数、矢量)
  • 计数(向量)

值的向量以 [ expr, expr, expr ] 的形式表示。

如果 Map 的 values 参数不是矢量,则其值会应用于每个 迭代。如果所有 values 都不是向量,或者未提供 values,则 返回空矢量。如果矢量 values 长度不同,则 最短的一个值决定结果长度,其余值不予使用。

Count() 不会检查矢量 values 中的项的类型。的 非矢量 values 会返回 Missing。

如果 Fn 表达式是完整的“eval”这个表达式的名称, 表达式可用作映射、折叠或过滤器的第一个参数。

如果一个函数的参数原位错误,则是向其传递的函数 会返回 Missing。如果函数的评估失败,例如由于 则传递它的函数可能会返回部分值:

  • 地图会返回一个矢量,该矢量的某些元素可能缺失。
  • Fold 返回 Missing。
  • 过滤器要求其过滤器函数返回布尔值 true 或 false。如果 函数返回任何其他内容,包括缺失,过滤器添加缺失 值。

操作

每个 Action 都会决定如何显示指定选择器的信息。 目前,我们提供两种类型的操作:“警告”和“采样平均值”操作包括 通过为 type 字段提供适当的值来指定。

警告类型

Warning 是一种操作,用于在满足布尔值条件时发出提醒。 。

Warning 支持以下字段:

  • trigger 是必填字段,用于指定提供 布尔值。
  • print 是必填字段,用于指定在发出警告时要输出的字符串。 问题。
  • tag 是可选字段,可将代码与此 Action 相关联。
  • file_bug,可选的字符串字段,用于指定应提交 bug 位置和位置。分类不会直接提交 bug;此字段只是告知 使用者(真人用户或自动化流水线)。它可以是问题跟踪器 组件(例如“Fuchsia > Internationalization (i18n)”)或对其他问题跟踪器的引用 即消费者所理解的内容
    "actions": {
        "disk_usage_high": {
            "type": "Warning", "trigger": "disk_used / disk_total > 0.95", "print": "Disk usage is high!"
        }
    }

刻度盘类型

Gauge 是调用 Triage 时特定值的快照。 Gauge 支持以下字段:

  • value 是必填字段,指定要显示的值。
  • format 是可选字段,用于指定刻度盘值的格式规则。

格式

通过 format 字段,用户可以控制刻度盘值的显示方式。如果 未提供此字段;如果指定的值无效,则值将为 按原样显示format 支持以下值:

  • percentage:以百分比值的形式输出浮点数。
    "actions": {
        "disk_usage": {
            "type": "Gauge", "value": "disk_used / disk_total", "format": "percentage"
        }
    }

测试

每个测试都会指定以下内容:

  • 示例数据,由 inspect 键控
  • 在给定数据的情况下应触发的操作列表,由 yes 键控
  • 在给定数据的情况下不应触发的操作列表,由 no 键控

示例数据与 inspect.json 文件的格式相同:映射数组 其中,每个映射都包含 pathcontents 字段。

    "tests": {
        "test1": {
            "yes": ["action1", "action2"],
            "no": ["action3"],
            "inspect": [
                {
                    "path": "global_data",
                    "contents": {"root": {"stats":
                        {"total_bytes": 10, "used_bytes": 9}}}
                }
            ]
        }
    }