Skip to main content
Version: 0.11

Validate

note

All the application code here is available from the docs git repository.

The validate example adds the concept of scripts to the trickle file. In this script we validate the schema of the input json against some requirements and only let events through that do satisfy them. Other events are dropped. Those changes are entirely inside the example.trickle.

Environment

In the example.trickle we define a script that validates the schema that the field hello is a string and the field selected is a boolean. If both conditions are true we pass it on, otherwise it'll drop.

All other configuration is the same as per the previous example, and is elided here for brevity.

Business Logic

define script validate                                                          # define the script
script
match event of
case %{ present hello, present selected } # Record pattern, validating field presence
when type::is_string(event.hello) and type::is_bool(event.selected) # guards
=> emit event # propagate if valid
default => drop # discard or reroute
end
end;

Command line testing during logic development

Run a the query against a sample input.json

$ tremor run -i input.json example.trickle
>> {"hello": "world"}

Deploy the solution into a docker environment

$ docker-compose up
>> {"hello": "again", "selected": true}

Inject test messages via websocat

note

Can be installed via cargo install websocat for the lazy/impatient amongst us

$ cat inputs.txt | websocat ws://localhost:4242
...

Injecting bad messages to verify validation.

$ cat invalids.txt | websocat ws://localhost:4242
...

Discussion

We introduce the declare script and create script query language features. declare script lets declare a template for a script to be run while create script instantiates it as a part of the graph. create script takes an additional as <name> argument, which if omitted, will cause the operator to have the same name as the declaration.

tip

Scripts themselves can not connect to elements inside the graph, a select statement is needed to glue scripts and other logic together.