20次发布
新 0.3.0-dev.5 | 2024年8月23日 |
---|---|
0.3.0-dev.3 | 2024年5月29日 |
0.2.0-beta-dev.7 | 2024年3月27日 |
#318 在 魔法豆
1,610 每月下载量
在 11 个 11 个crate(4个直接)中使用
115KB
2.5K SLoC
aitia
因果链建模的实验性库,从观察事件中推断诊断信息
需要更多的文档。
许可证:Apache-2.0
lib.rs
:
aitia,一个从因果图中获得洞察的crate
("aitia"是"etiology"的词根,意为“原因”,也是一个容易输入的回文)
在复杂系统中,当某个系统出错时,如果不进行大量的取证调查和探索性日志记录,很难缩小到某个子系统。 aitia
旨在帮助缩小可能问题范围的过程。
您定义一组关于您的系统的 Fact
,每个Fact都指定一个或多个 [Dep
](依赖)。Dep之间的因果关系简单地说就是一个图,每个Fact都连接到其他Fact。当测试您的系统时,您可以检查某个特定的Fact是否为真。如果不是真的,aitia
会递归地跟随指定的因果关系,构建一个依赖关系的图,每个依赖关系都会被检查是否为真。遍历只有在以下情况下才会停止:
- 遇到一个真实的事实,或者
- 遇到一个没有自己依赖的事实(可以说是一个“公理”)
- 发现了一个未解决的依赖循环,在这种情况下,整个分支将被丢弃。请注意,因果关系的循环是允许的,只要循环中有一个通过的事实,导致循环被打破。
结果是所有不真实事实的定向无环图(DAG),以原始事实为根。图的边代表逻辑条件或蕴涵:即图中A -> B的边表示“如果A为真,则B必须为真”,同时也表示“如果B不为真,则A不能为真”。这意味着DAG的叶子代表问题的可能根依赖,即“最上游”的已知事实,这些事实可能导致根事实不为真,因此叶子将代表系统中的位置,这些位置可以查找原始事实不为真的原因。
aitia
与您编写的事实一样有用。您可以编写非常广泛、模糊的事实,这有助于您在进一步的手动调查中专注于系统的更广部分,或者您可以编写非常具体的事实,这样您可以一眼看出可能的问题。它非常适合迭代地编写事实,最初非常广泛,然后在诊断它帮助您找到的问题时添加更多具体性。
aitia
旨在体现推导问题依赖的过程。通过将您对问题的搜索编码到aitia::Dep
中,理想情况下,您将永远不必再次寻找该特定问题。
依赖关系
~11–21MB
~274K SLoC