#env-var #environment #env #variables #change #subscription #viewing

env-watcher

一个简单的库,用于查看环境变量,并订阅更改任何变量

1 个不稳定版本

0.1.0 2021年12月16日

#561 in 配置

MIT 许可证

29KB
605

ci

一个简单的库,用于查看环境变量,并订阅更改任何变量。

实时查看变量的实现。在变量更改时,获取数据快照或更改事件(删除/编辑)。

用法

当本地使用时,必须创建一个您将控制的观察者实例。持续时间 - 定义变量的轮询时间。默认 - Duration::from_millis(5 * 100)

let env_watcher = EnvironmentWatcher::new(Duration::from_secs(5));

接下来,订阅任何密钥,所有选项都在 段落 中描述

let sub_for_all = Subscribe::All;
let (data, rx) = env_watcher.subscribe(sub_for_all)?;

在这种情况下,我们收到了订阅时的数据快照,以及我们将通过它接收事件的通道。
假设我们有一个正在运行的服务器,如果 server.port 环境变量更改,应该重新启动,让我们试试写这个!

fn listen_environment() -> Result<(), Error> {
    let env_watcher = EnvironmentWatcher::new(Duration::from_secs(5));
    
    // An analogue of this subscription can be: Subscribe::PatternEnvs(vec!["server.*".to_string()]); 
    let sub_server = Subscribe::Envs(vec!["server.host".to_string(), "server.port".to_string()]); 
    
    let (data, rx) = env_watcher.subscribe(sub_server)?;
    spawn(move || {
        let receiver = rx.clone();
        let data = data.clone();
        loop {
            let event = receiver.recv().unwrap();
            match event {
                ChangeState::Edit(k, v) => {
                    data.insert(k, v);
                    restart_server(&data);
                }
                ChangeState::Delete(k) => {
                    warn("Removed one of the server environment variables. In case of restarting the application, incorrect behavior may be expected!");
                }
            }
        }
    });
    Ok(())
}

fn restart_server(data: &HashMap<String, String>) {
    ...
    println("Restarting server");
}

您可以在 项目中看到一个更详细的例子。

数据的基础实现

EnvironmentData 作为基本快照保持者。在单独的线程中,如果环境中的值发生变化,则会更新值。

EnvironmentData 作为快照的主要存储。在单独的线程中,如果环境中的值发生变化,则会更新值。

您可以使用 data() 方法获取数据的快照

如果需要可变引用,则使用 ref_data()

派生用法

此模块提供了 3 个宏以简化您的工作。

  • init_env_watch! - 基本存储初始化
  • sub_env! - 带快照返回和事件管理通道的订阅
  • sub_env_snapshot! - 基本快照实现

订阅环境变量

总共有3种订阅选项。

  • 全部 - 订阅所有环境变量的变化
  • Envs - 仅订阅特定键的订阅
  • PatternEnvs - 通过正则表达式仅订阅特定键,得益于

版本历史

查看变更日志

许可

MIT 许可证

依赖

~3–33MB
~447K SLoC