#failure #panic #chaos #fault-injection

emergency_brake

emergency_brake 是一个简单易用的进程或服务监控工具,当关键依赖失败时,将立即终止进程或服务的执行。

1 个不稳定版本

0.1.0 2023 年 9 月 25 日

#511 in 测试

Apache-2.0

12KB
147 代码行

紧急制动

emergency_brake 是一个简单易用的进程或服务监控工具,当关键依赖失败时,将立即终止进程或服务的执行。

用法

eBrake 创建一个包含最后 N 个样本的移动样本窗口。如果样本窗口中的失败次数超过阈值,则将终止进程或服务。样本窗口是一个循环缓冲区,因此最老的样本将被最新的样本替换。

use emergency_brake::*;

fn main() {
    let sample_window_size = 25;
    let threshold = 3;
    let mut ebrake = EBrake::new(sample_window_size, threshold);
    loop:
        // Check service status
        let service_status: bool = check_service_status('service.foo.com');
        // Add the sample to the sample window and trigger if necessary
        ebrake.add_sample(service_status);
        ebrake.trigger();
        // Do something critical
        ...
}

lib.rs:

eBrake 创建一个包含最后 N 个样本的移动样本窗口。如果样本窗口中的失败次数超过阈值,则将终止进程或服务。样本窗口是一个循环缓冲区,因此最老的样本将被最新的样本替换。

示例

这将分别使用样本和触发函数。

use emergency_brake::*;
let sample_window_size = 25;
let failure_threshold = 3;
let mut ebrake = EBrake::new(sample_window_size, failure_threshold);
for _ in 0..sample_window_size {
   ebrake.add_sample(true);
}
assert_eq!(ebrake.trigger(&Trigger::Panic), false);

这将使用触发_on_sample 函数。

use emergency_brake::*;
let sample_window_size = 25;
let failure_threshold = 3;
let mut ebrake = EBrake::new(sample_window_size, failure_threshold);
for _ in 0..sample_window_size {
  ebrake.trigger_on_sample(true, &Trigger::Panic);
}
assert_eq!(ebrake.trigger(&Trigger::Panic), false);

Kelsea Blackwell (c) 2023 请参阅 LICENSE 了解许可信息。

依赖项

~0.3–15MB
~150K SLoC