4个版本
0.2.0 | 2023年10月20日 |
---|---|
0.1.2 | 2023年8月26日 |
0.1.1 | 2023年8月26日 |
0.1.0 | 2023年8月26日 |
#194 在 模板引擎 中
每月 39 次下载
在 tera-rand-cli 中使用
72KB
1K SLoC
tera-rand
tera-rand
tera-rand
是为 Tera 模板引擎提供的随机数据生成函数库。
要在项目中使用 tera-rand
,请将以下内容添加到您的 Cargo.toml
[dependencies]
tera-rand = "0.1.2"
有关使用 tera-rand
函数的示例,请参阅 tera-rand
文档。
tera-rand-cli
tera-rand-cli
是一个命令行工具,用于从 Tera 模板生成随机数据流。这种随机数据对于模拟流量或填充数据存储等任务非常有用。
安装
您可以使用 cargo install [email protected]
命令从crates.io安装 tera-rand-cli
二进制文件。
或者,如果您想从源代码构建,请确保您已安装了版本1.72或更高版本的Rust。然后,检出此存储库,并在根项目目录中运行 cargo build --release
。二进制文件应位于 target/release
目录下。
示例
假设这个Tera模板位于 cpu_util.json
文件中
{"hostname": "{{ random_string() }}", "cpu_util": {{ random_uint32(start=0, end=100) }}}
如果我们运行以下命令
tera-rand-cli -f cpu_util.json
我们应该能看到 cpu_util.json
中的模板尽可能快地渲染到标准输出
{"hostname": "hZ6dguUP", "cpu_util": 4}
{"hostname": "wgRDsuEv", "cpu_util": 76}
{"hostname": "v2EHobFJ", "cpu_util": 85}
{"hostname": "gwREN077", "cpu_util": 79}
(etc.)
为了减慢数据生成的速度,我们可以提供 batch_size
和 batch_interval
选项的参数。在这里,我们告诉 tera-rand-cli 每秒只生成5条记录
tera-rand-cli -f cpu_util.json --batch-size 5 --batch-interval PT1S
在生成一定数量的记录后退出,请使用 --record-limit
。同样地,--time-limit
告诉程序在一段时间后退出。如果同时使用这两个选项,程序将在任一退出条件满足时立即退出。此工具建立在 Tera 模板库之上,因此其所有高级功能都可以用于构建这些模板。以下是一个使用随机函数的 Tera 模板的更复杂示例。此模板将 count
变量初始化为 1 到 10 之间的随机整数,然后在名为 src_ports
的数组中生成恰好 count
个随机整数。
{
"protocol": "{{ random_from_file(path="tera-rand-cli/resources/test/protocol.txt") }}",
{% set count = random_uint32(start=1, end=10) -%}
"count": {{ count }},
"timestamp": "{{ now() }}",
"flow_id": "{{ random_uuid() }}",
"src_hostname": "{{ random_string(length=10) }}",
"src_addr": "{{ random_ipv4() }}",
"src_ports": [
{% for i in range(end=count) -%}
{{ random_uint32(start=49152, end=65535) }}{% if not loop.last %}, {% endif %}
{%- endfor %}
],
"src_app": "{{ random_string() }}",
"dst_hostname": "{{ random_string(length=10) }}",
"dst_addr": "{{ random_ipv4() }}",
"dst_port": {{ random_uint32(end=49151) }},
"dst_app": "{{ random_string() }}"
}
该模板的渲染输出可能如下所示
{
"protocol": "UDP",
"count": 8,
"timestamp": "2023-08-25T21:50:20.836769600-04:00",
"flow_id": "3944799d-1f60-40fc-9b0d-35c02ab017ec",
"src_hostname": "trEi25xe44",
"src_addr": "213.203.1.172",
"src_ports": [
58382, 51005, 63169, 59766, 64632, 52953, 55543, 63626
],
"src_app": "YEl34jzn",
"dst_hostname": "lTnsk5uVZC",
"dst_addr": "28.85.27.180",
"dst_port": 29036,
"dst_app": "wybCthJU"
}
有关模板的更多详细信息,请参阅 Tera 文档。
用例
我们可以将此输出重定向到 curl 命令以模拟 REST 端点的流量
tera-rand-cli -f cpu_util.json | curl -H "Content-Type: application/json" -X POST -d @- http://localhost:80
或者我们可以将其输出到 Kafka 主题
tera-rand-cli -f cpu_util.json | kafka-console-producer --bootstrap-server localhost:9092 --topic cpu-util
此工具旨在帮助以下场景
- 生成的记录应该尽可能区分开,即不应该是重复一千次的相同记录,或者
- 模式可能经常变化,或者存在足够多的数据类型,维护一组模板比直接在代码中实现等效的数据生成器更容易。虽然此工具可能方便进行基准测试,但它并不旨在尽可能快。它的速度比在编译时定义模板或模式的速度慢。
依赖关系
约 8–19MB
约 244K SLoC