#actor #iot #digital #command-line #actor-model #twin #stream-processing

bin+lib navactor

从管道输入创建和更新演员的 CLI 工具

23 个版本 (4 个破坏性更新)

0.5.3 2023年7月25日
0.5.2 2023年5月24日
0.4.2 2023年5月22日
0.3.1 2023年3月24日
0.1.7 2023年1月26日

并发 中排名 370

Download history 2/week @ 2024-03-08 1/week @ 2024-03-15 118/week @ 2024-03-29 24/week @ 2024-04-05

每月下载量 110

MIT 许可证

135KB
3K SLoC

Navactor

建设中 - 请参阅 NOTES.md

尚未准备好投入实际工作

作为 crate 提供:https://crates.io/crates/navactor

概述

一个用于演员编程的 CLI *nix 风格工具,作为实验室。

不是要成为一个框架 - navactor 中的演员使用是为了支持一种有偏见的实验性方法来建模和推理处理,而不是用于并发、并行或分布式计算的通用解决方案。

nv 的目的:从管道流中摄取以 CRLF 分隔的观察结果,将它们发送到演员,实现 OPERATOR 处理,并持久化。

nv 命令最终也将作为一个网络 API 服务器工作,但最初的模型是通过经典的强大且无敌的 awk 进行数据处理。

Navactor 和 DtLab 启发于 20 世纪 80 年代初关于协调语言的 元组空间 的 CS 观点,以及后来的 演员 编程模型。

状态

最初只是一个玩具实现,用于验证实现选择(Rust、Tokio、Sqlite 和 Petgraph)。

当前功能仅限于通过 *nix 管道流支持在内部观察 JSON 格式中呈现的 "gauge" 和 "counter" 观察。

{ "path": "/actors/two", "datetime": "2023-01-11T23:17:57+0000", "values": {"1": 1, "2": 2, "3": 3}}
{ "path": "/actors/two", "datetime": "2023-01-11T23:17:58+0000", "values": {"1": 100}}
{ "path": "/metadata/mainfile", "datetime": "2023-01-11T23:17:59+0000", "values": {"2": 2.1, "3": 3}}
{ "path": "/actors/two", "datetime": "2023-01-11T23:17:59+0000", "values": {"2": 2.98765, "3": 3}}

使用嵌入的 sqlite 存储的事件源工作。查询状态和跨多个运行恢复摄取工作。

使用位于 tests/data 目录中的 观察生成器,当前实现在 sqlite "预写日志"(WAL)模式下运行时,在小型磁盘和内存以及 CPU 占用下每秒处理并持久化 2000+ 观察。

代码混乱但能运行 - 我正在学习Rust语言,同时重建DtLab项目的想法。

我的目的是支持DtLab项目的所有功能 - 即:网络化的REST-like API和向外扩展的webhooks,用于有用的状态性IOT应用。

安装

#latest stable version via https://crates.io/crates/navactor
cargo install navactor

#or from this repo:
cargo install --path .

启用zsh Tab补全

nv completions -s zsh > /usr/local/share/zsh/site-functions/_nv

用法

如果从源运行,请将nv替换为cargo run --

#help
nv -h

#create an actor with telemetry
cat ./tests/data/single_observation_1_1.json | nv update actors

# inspect the state of the actor
nv inspect /actors/one

cat ./tests/data/single_observation_1_2.json | nv update actors
cat ./tests/data/single_observation_1_3.json | nv update actors
nv inspect /actors/one
cat ./tests/data/single_observation_2_2.json | nv update actors
cat ./tests/data/single_observation_2_3.json | nv update actors

上述操作将创建一个以命名空间命名的db文件 - 任何actor路径的根。在这个例子中,命名空间是'actors'。

通过以下方式启用日志记录:

#on the cli
cat ./tests/data/single_observation_1_3.json | RUST_LOG="debug,sqlx=warn" nv update actors

#or set and forget via
export RUST_LOG="debug,sqlx=warn"

开发

通过以下方式运行所有测试:

cargo test

启用日志记录运行特定测试

# EXAMPLE - runs the json decoder and assertions around datetime and json unmarshalling
# the --nocapture lets the in app logging log according to the RUST_LOG env var (see above)
cargo test --test test_json_decoder_actor -- --nocapture

nv是从Alice Ryhl的非常有指导意义的博客文章https://ryhl.io/blog/actors-with-tokio中启动的。

依赖项

~56–76MB
~1.5M SLoC