Flows

DAMPER

Source plugins/base

Config

[[flows.damper]]
    ## damper makes the stream of records to be delayed by the given duration.
    ## It collects records those _ts time is older thant now-"interval" time, 
    ## and send them to the next flow in a time.
    interval = "3s"

Example

Run

Output

DUMP

Source plugins/base

Config

[[flows.dump]]
    ## dump writes the record to the log with the given log level.
    ## DEBUG | INFO | WARN | ERROR  (default: DEBUG)
	level = "DEBUG"
    ## The decimal format for float fields. (default: -1 which means no rounding)
    decimal = 2
    ## The time format for time fields. (default: "2006-01-02 15:04:05")
    timeformat = "2006-01-02 15:04:05"

Example

Run

Output

EXEC

Source plugins/exec

Config

[[flows.exec]]
    ## Commands array
    ## Access the field and tag values in the command by using 
    ## the uppercase field name prefixed with "$FIELD_{name}"
    ## and uppercase tag name prefixed with "$TAG_{name}"
    commands = ["echo", "$FOO", "$FIELD_SOME", "$TAG__IN"]

    ## Environment variables
    ## Array of "key=value" pairs
    ## e.g. ["key1=value1", "key2=value2"]
    environments = ["FOO=BAR"]

    ## Timeout
    timeout = "3s"

    ## Ignore non-zero exit code
    ignore_error = false

    ## Trim space of output
    trim_space = false

    ## Separator for splitting output
    separator = ""

    ## Field name for stdout
    stdout_field = "stdout"

    ## Field name for stderr
    stderr_field = "stderr"

Example

[[inlets.file]]
    data = [
        "a,1",
        "b,2",
    ]
    format = "csv"
[[flows.exec]]
    commands = ["sh", "-c", "echo hello $FOO $FIELD_0 $FIELD_1"]
    environments = ["FOO=BAR"]
    trim_space = true
    ignore_error = true
    stdout_field = "output"
[[flows.select]]
    includes= ["#_ts", "*"]
[[outlets.file]]
    path = "-"
    format = "json"

Run

tine run example.toml

Output

{"_ts":1721954798,"output":"hello BAR a 1"}
{"_ts":1721954799,"output":"hello BAR b 2"}

MERGE

Source plugins/base

Config

[[flows.merge]]
    wait_limit = "2s"
    name_infix = "_"

Example

[[inlets.cpu]]
    percpu = false
    interval = "1s"
    count = 3
[[inlets.load]]
    loads = [1, 5]
    interval = "1s"
    count = 2
[[flows.merge]]
    wait_limit = "1s"
[[outlets.file]]
    path = "-"
    format = "json"
    decimal = 2

Run

tine run example.toml

Output

{"_ts":1723248243,"cpu_total_percent":8.16,"load_load1":1.90,"load_load5":1.94}
{"_ts":1723248244,"cpu_total_percent":11.67,"load_load1":1.90,"load_load5":1.94}
{"_ts":1723248245,"cpu_total_percent":15.56}

UPDATE

Source plugins/base

Config

[[flows.update]]
    ## Update name and value of fields and tags in a record with the new value and name.
    ## The toml syntax does not allow newlines within inline tables, 
    ## so all fields are specified in a single line
    set = [
        ## "field" is the field name to be updated.
        ## "name" is the new name of the field. If not specified, the original name is used.
        ## "value" is the new value of the field. If not specified, the original value is used.
        { field = "my_name", name = "new_name" },
        { field = "my_int", value = 10 },
        { field = "my_float", value = 9.87, name = "new_float" },
        { field = "flag", value = true, name = "new_flag" },
        { tag = "_in", value = "my" },
    ]

Example

Run

Output

SELECT

Source plugins/base

Config

[[flows.select]]
    ## Selects fields in a record with the given field names.
    ## "*" means all fields.
    ## if item starts with "#", it specifies a tag name.
    ## '**' means all tags and fields which is default and equivalent to ["#*", "*"]
    includes = ["#_ts", "#_in", "*"]

Example

Run

Output

INJECT

Source plugins/base

[[flows.inject]]
    id = "my_flow"

This flow creates an injection point for the pipeline, allowing applications to inject their own functions as flows with the specified ID.

Example

Run

Output

OLLAMA

Source plugins/ollama

Config

## Ollama plugin configuration
## It takes variables from the input record
## The record should have the following keys:
## "prompt" string field
## "model" string field (e.g. "phi3")
## "stream" boolean field (default is false)
[[flows.ollama]]
    ## Ollama server address
    address = "http://127.0.0.1:11434"
    ## default model if the input record does not have the "model" field
    model = "phi3"
    ## timeout for waiting the response from the Ollama server
    timeout = "15s"

Example

Run

Output

QRCODE

Source plugins/qrcode

Config

[[flows.qrcode]]
    ## The input field to generate QRCode
    input_field = "url"
    ## The output field to store the QRCode image (in png format)
    output_field = "qrcode"

    # QRCode width should be < 256
    width = 11

    ## if the background_transparent is true, the background_color will be ignored
    background_transparent = true

    ## The background color of the QRCode image
    background_color = "#ffffff"

    ## The foreground color of the QRCode image
    foreground_color = "#000000"

    # logo image should only has 1/5 width of QRCode at most (.png or .jpeg)
    logo = "./tine_x64.png"

    ## Half tone image should be a .jpeg or .png file
    halftone = "./test.jpeg"

Example

[[inlets.args]]
[[flows.qrcode]]
    input_field = "in"
    output_field = "qrcode"
    # QRCode width should be < 256
    width = 11
    # background_transparent = true
    background_color = "#ffffff"
    foreground_color = "#000000"
[[outlets.image]]
    path_field = "out"
    image_fields = ["qrcode"]
    overwrite = true

Run

tine run ./example.toml -- in="https://tine.thingsme.xyz" out=./output.png

Output

Last updated