#tera-templates #random #template #data #generation #fake

tera-rand

为Tera模板引擎提供一组随机数据生成函数

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 中使用

MIT/Apache

72KB
1K SLoC

tera-rand

build status docs rustc version 1.72+

tera-rand

tera-rand latest version

tera-rand 是为 Tera 模板引擎提供的随机数据生成函数库。

要在项目中使用 tera-rand,请将以下内容添加到您的 Cargo.toml

[dependencies]
tera-rand = "0.1.2"

有关使用 tera-rand 函数的示例,请参阅 tera-rand 文档

tera-rand-cli

tera-rand-cli latest version

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_sizebatch_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

此工具旨在帮助以下场景

  1. 生成的记录应该尽可能区分开,即不应该是重复一千次的相同记录,或者
  2. 模式可能经常变化,或者存在足够多的数据类型,维护一组模板比直接在代码中实现等效的数据生成器更容易。虽然此工具可能方便进行基准测试,但它并不旨在尽可能快。它的速度比在编译时定义模板或模式的速度慢。

依赖关系

约 8–19MB
约 244K SLoC