#流处理 #yaml配置 #配置文件 #Python #命令行界面 #处理器 #输入

应用程序 fiddler-cli

用Rust编写的数据流处理器命令行界面

5个不稳定版本

0.3.1 2024年4月15日
0.3.0 2024年4月14日
0.2.1 2024年4月8日
0.1.1 2024年3月31日
0.1.0 2024年3月31日

#31 in 配置

Download history 1/week @ 2024-05-16 2/week @ 2024-05-23 2/week @ 2024-06-27 17/week @ 2024-07-04

每月下载量 254次

自定义许可协议

30KB
383

Fiddler Crates.io Apache 2.0 licensed Documentation


Fiddler是一个使用基于yaml的配置文件语法来映射输入、处理器和输出的Rust构建的流处理器。

例如

input:
    stdin: {}
pipeline:
  max_in_flight: 10
  processors:
    - python: 
        string: true
        code: |
            import json
            msg = json.loads(root)
            msg['Python'] = 'rocks'
            root = json.dumps(msg)
output:
  switch:
    - check:
        condition: '\"Hello World\" > `5`'
        output:
          validate: 
            expected: []
    - stdout: {}

主内联消息处理由Python提供,需要Python共享库。

在Ubuntu上安装Python共享库:sudo apt install python3-dev 在基于RPM的发行版(例如Fedora、Red Hat、SuSE)上安装Python共享库,安装python3-devel包。

在fiddler运行的操作系统上必须安装Python使用的任何第三方包。

输入和输出的消息格式简单,事件源存储在名为root的局部变量中;执行代码后获取的输出应命名为root。默认情况下,root是消息的字节,除非证明有string: true参数,在这种情况下,root将被转换为字符串。

通过使用checkswitch插件可以获得处理步骤的条件执行或输出选择。对于处理,它看起来像

- switch:
    - check: 
        condition: '\"Hello World\" <= `5`'
        processors:
            - python: 
                string: true
                code: |
                    import json
                    new_string = f\"python: {root}\"
                    root = new_string
            - echo: {}
    - label: my_cool_mapping
        echo: {}

所使用的条件格式使用[jmespath](https://jmespath.org/specification.html)语法进行评估。因此,它只能与JSON文档一起使用。

安装

  1. 在这里下载适用于您的操作系统的版本 这里
  2. 使用Cargo安装 cargo install fiddler

运行

  1. fiddler运行-c<配置文件路径> [ -c... ]

代码检查

  1. Fiddler代码检查-c<配置文件路径> [ -c... ]

测试

测试文件格式应为 <filename>_test.yaml。例如,如果您有一个配置 input.yaml,期望的文件名是 input_test.yaml。测试文件语法如下

- name: name_of_test
  inputs:
   - list of expected input strings
  expected_outputs:
   - list of expected output strings

可以使用以下命令运行测试:fiddler-cli test -c <path_to_configuration>.yaml

构建

使用 Cargo 构建 cargo build --release --features all

插件

输入

文件

input:
  file: 
    filename: tests/data/input.txt
    codec: ToEnd
  • filename: string: 要读取的文件的路径
  • codec: string: 可能的值:ToEnd: 在一个消息中读取整个文件。 Lines: 逐行读取文件

标准输入

input:
  stdin: {}

处理器

processors:
  - lines: {}

无操作

processors:
  - noop: {}

Python

processors:
  - python: 
      string: true
      code: |
          import json
          msg = json.loads(root)
          msg['Python'] = 'rocks'
          root = json.dumps(msg)
  • string: bool: 消息内容是否作为字符串或字节传递(默认值)
  • code: string: 要执行的Python代码

检查

processors:
  - check: 
      condition: '\"Hello World\" <= `5`'
      processors:
        - python: 
            string: true
            code: |
              import json
              new_string = f\"python: {root}\"
              root = new_string
  • condition: string: 当处理器运行时,要评估的jmespath表达式
  • processors: list: 当条件满足时运行的处理器列表

开关

processors:
  - switch:
      - check: 
          condition: '\"Hello World\" <= `5`'
          processors:
            - python: 
                string: true
                code: |
                  import json
                  new_string = f\"python: {root}\"
                  root = new_string
            - echo: {}
      - echo: {}
  • array: 要运行的处理器数组,通常与 check 处理器一起使用。一旦处理器成功,将不会运行其他处理器

输出

标准输出

output:
  stdout: {}

检查

output:
  check:
    condition: '\"Hello World\" > `5`'
    output:
      stdout: {}
  • condition: string: 当处理器运行时,要评估的jmespath表达式
  • output: object: 如果检查为真,则使用此输出

开关

output:
  switch:
    - check:
        condition: '\"Hello World\" > `5`'
        output:
          validate: 
            expected: []
  • array: 输出数组,通常与 check 输出一起使用。

Elasticsearch

output:
  elasticsearch:
    url: http://example.com:9200
    username: user
    password: password
    cloud_id: some_cloud_id
    index: example
  • url: 如果不使用Elasticsearch云,指定ES集群的URL。例如,http://127.0.0.1:9200
  • username: 身份验证用户名
  • password: 身份验证密码
  • cloud_id: 如果使用Elasticsearch云,指定cloud_id
  • index: 将事件插入的索引

注意:变量可以从环境变量中收集,因此当提供密码时,您可以将它设置为 password: "{{ ElasticSearchPassword }}",并且ElasticSearchPassword将来自环境变量并提供给配置。

贡献

欢迎并鼓励贡献!贡献可以有多种形式。您可以

  1. 提交功能请求或错误报告作为 issue
  2. 请求改进文档作为 issue
  3. 需要反馈的issue 上发表评论。
  4. 通过 pull requests 贡献代码。

请注意,除非您明确声明,否则您提交给fiddler的任何贡献都将根据Apache License,Version 2.0许可,没有任何附加条款或条件。

已知问题

  • 在Windows上编译时,Cargo在开关插件上显示警告,实际上它们并未被跳过。
  • build.rs在Windows上编译时不验证Python是否存在
  • 在windows GHA上,集成测试失败

依赖项

~29–45MB
~791K SLoC