transition
Performs various actions based on a changed field
Field Name | Description | Type | Default |
---|---|---|---|
condition | Only run this action if the condition the specified condition is met | expression | - |
watch-field | A field that is watched for changes | field | - |
elapsed-output-field | A field that will be used to store elapsed time between state changes | field | - |
time-field | A field containing a time value | iso time field | - |
marker | Generate a new event, depending on if a transition has happened | array of strings | - |
value-at-last-change-output-field | Contains state value of before transition happened | field | - |
time-at-last-change-output-field | Contains timestamp of before transition happened | field | - |
time-at-last-change-output-format | The time format to be used for the time-at-last-change-output-field | time format | - |
candidate-time-at-transition-output-field | The time field of the record that caused the transition | field | - |
threshold-count | Number of times a value must have been seen in a row, to consider a state change a transition | integer | 1 |
threshold-count-output-field | A field to record the action threshold count at the time of change | field | - |
group-by | Allows tracking transitions individually in the case of aggregated data | field | - |
save-file | A file to persist state, to know where we left off in the case where the Pipe is restarted | path | - |
maximum-age | The maximum age of any recorded history | string | - |
maximum-age-marker | The marker in the event stream to watch for to trigger a maximum age record sweep | string | - |
condition
Only run this action if the condition the specified condition is met
Type: expression
watch-field
A field that is watched for changes
The field value may be a string, number or boolean
Type: field
Example
input:
input:
exec:
command:
echo '{"state":0}';
sleep 1;
echo '{"state":1}';
sleep 1;
echo '{"state":1}';
raw: true
no-strip-linefeeds: true
action:
transition:
watch: state
elapsed-output-field: elapsed
output:
{"state":0,"elapsed":0}
{"state":1,"elapsed":0}
{"state":1,"elapsed":1002}
elapsed-output-field
A field that will be used to store elapsed time between state changes
Type: field
time-field
A field containing a time value
If not specified, system time is used instead.
Type: iso time field
Example
input:
{"time":"2020-02-03T15:34:55.149Z","state":0}
{"time":"2020-02-03T15:34:56.149Z","state":1}
{"time":"2020-02-03T15:34:57.149Z","state":1}
action:
transition:
watch: state
elapsed-output-field: elapsed
time-field: time
output:
{"time":"2020-02-03T15:34:55.149Z","state":0,"elapsed":0}
{"time":"2020-02-03T15:34:56.149Z","state":1,"elapsed":0}
{"time":"2020-02-03T15:34:57.149Z","state":1,"elapsed":1000}
marker
Generate a new event, depending on if a transition has happened
Type: array of strings
Example
input:
{"time":"2020-02-03T15:34:55.149Z","state":0}
{"time":"2020-02-03T15:34:56.149Z","state":1}
{"time":"2020-02-03T15:34:57.149Z","state":1}
{"time":"2020-02-03T15:34:58.149Z","state":0}
action:
transition:
watch: state
elapsed-output-field: elapsed
time-field: time
marker:
- marker
output:
{"time":"2020-02-03T15:34:55.149Z","state":0}
{"_marker":"marker","state":1,"elapsed":1000}
{"time":"2020-02-03T15:34:56.149Z","state":1}
{"time":"2020-02-03T15:34:57.149Z","state":1}
{"_marker":"marker","state":0,"elapsed":2000}
{"time":"2020-02-03T15:34:58.149Z","state":0}
value-at-last-change-output-field
Contains state value of before transition happened
This is useful for associating states with their duration
Type: field
Example
input:
{"time":"2020-02-03T15:34:55.149Z","state":0}
{"time":"2020-02-03T15:34:56.149Z","state":1}
{"time":"2020-02-03T15:34:57.149Z","state":1}
{"time":"2020-02-03T15:34:58.149Z","state":0}
action:
transition:
watch: state
elapsed-output-field: elapsed
time-field: time
marker:
- marker
value-at-last-change-output-field: previous
output:
{"time":"2020-02-03T15:34:55.149Z","state":0}
{"_marker":"marker","state":1,"elapsed":1000,"previous":0}
{"time":"2020-02-03T15:34:56.149Z","state":1}
{"time":"2020-02-03T15:34:57.149Z","state":1}
{"_marker":"marker","state":0,"elapsed":2000,"previous":1}
{"time":"2020-02-03T15:34:58.149Z","state":0}
time-at-last-change-output-field
Contains timestamp of before transition happened
Type: field
Example
input:
{"time":"2020-02-03T15:34:55.149Z","state":0}
{"time":"2020-02-03T15:34:56.149Z","state":1}
{"time":"2020-02-03T15:34:57.149Z","state":1}
{"time":"2020-02-03T15:34:58.149Z","state":0}
action:
transition:
watch: state
elapsed-output-field: elapsed
time-field: time
time-at-last-change-output-field: previous
output:
{"time":"2020-02-03T15:34:55.149Z","state":0,"elapsed":0,"previous":"2020-02-03T15:34:55.149Z"}
{"time":"2020-02-03T15:34:56.149Z","state":1,"elapsed":0,"previous":"2020-02-03T15:34:56.149Z"}
{"time":"2020-02-03T15:34:57.149Z","state":1,"elapsed":1000,"previous":"2020-02-03T15:34:56.149Z"}
{"time":"2020-02-03T15:34:58.149Z","state":0,"elapsed":0,"previous":"2020-02-03T15:34:58.149Z"}
Example: With a marker
input:
{"time":"2020-02-03T15:34:55.149Z","state":0}
{"time":"2020-02-03T15:34:56.149Z","state":1}
{"time":"2020-02-03T15:34:57.149Z","state":1}
{"time":"2020-02-03T15:34:58.149Z","state":0}
action:
transition:
watch: state
elapsed-output-field: elapsed
time-field: time
marker:
- marker
time-at-last-change-output-field: previous
output:
{"time":"2020-02-03T15:34:55.149Z","state":0}
{"_marker":"marker","state":1,"elapsed":1000,"previous":"2020-02-03T15:34:56.149Z"}
{"time":"2020-02-03T15:34:56.149Z","state":1}
{"time":"2020-02-03T15:34:57.149Z","state":1}
{"_marker":"marker","state":0,"elapsed":2000,"previous":"2020-02-03T15:34:58.149Z"}
{"time":"2020-02-03T15:34:58.149Z","state":0}
time-at-last-change-output-format
The time format to be used for the time-at-last-change-output-field
Type: time format
candidate-time-at-transition-output-field
The time field of the record that caused the transition
Type: field
threshold-count
Number of times a value must have been seen in a row, to consider a state change a transition
Note: This results in the watch
field modified
Type: integer
Example
input:
{"time":"2020-02-03T15:34:45.149Z","state":0}
{"time":"2020-02-03T15:34:46.149Z","state":1}
{"time":"2020-02-03T15:34:47.149Z","state":1}
{"time":"2020-02-03T15:34:48.149Z","state":1}
{"time":"2020-02-03T15:34:49.149Z","state":0}
{"time":"2020-02-03T15:34:50.149Z","state":1}
{"time":"2020-02-03T15:34:51.149Z","state":0}
{"time":"2020-02-03T15:34:52.149Z","state":1}
{"time":"2020-02-03T15:34:53.149Z","state":0}
{"time":"2020-02-03T15:34:54.149Z","state":0}
action:
transition:
watch: state
elapsed-output-field: elapsed
time-field: time
threshold-count: 2
output:
{"time":"2020-02-03T15:34:45.149Z","state":0,"elapsed":0}
{"time":"2020-02-03T15:34:46.149Z","state":1,"elapsed":1000}
{"time":"2020-02-03T15:34:47.149Z","state":1,"elapsed":2000}
{"time":"2020-02-03T15:34:48.149Z","state":1,"elapsed":3000}
{"time":"2020-02-03T15:34:49.149Z","state":1,"elapsed":4000}
{"time":"2020-02-03T15:34:50.149Z","state":1,"elapsed":5000}
{"time":"2020-02-03T15:34:51.149Z","state":1,"elapsed":6000}
{"time":"2020-02-03T15:34:52.149Z","state":1,"elapsed":7000}
{"time":"2020-02-03T15:34:53.149Z","state":1,"elapsed":8000}
{"time":"2020-02-03T15:34:54.149Z","state":0,"elapsed":1000}
Example
input:
{"time":"2020-02-03T15:34:45.149Z","state":0}
{"time":"2020-02-03T15:34:46.149Z","state":1}
{"time":"2020-02-03T15:34:47.149Z","state":1}
{"time":"2020-02-03T15:34:48.149Z","state":1}
{"time":"2020-02-03T15:34:49.149Z","state":0}
{"time":"2020-02-03T15:34:50.149Z","state":1}
{"time":"2020-02-03T15:34:51.149Z","state":0}
{"time":"2020-02-03T15:34:52.149Z","state":1}
{"time":"2020-02-03T15:34:53.149Z","state":0}
{"time":"2020-02-03T15:34:54.149Z","state":0}
action:
transition:
watch: state
elapsed-output-field: elapsed
time-field: time
threshold-count: 1
output:
{"time":"2020-02-03T15:34:45.149Z","state":0,"elapsed":0}
{"time":"2020-02-03T15:34:46.149Z","state":1,"elapsed":0}
{"time":"2020-02-03T15:34:47.149Z","state":1,"elapsed":1000}
{"time":"2020-02-03T15:34:48.149Z","state":1,"elapsed":2000}
{"time":"2020-02-03T15:34:49.149Z","state":0,"elapsed":0}
{"time":"2020-02-03T15:34:50.149Z","state":1,"elapsed":0}
{"time":"2020-02-03T15:34:51.149Z","state":0,"elapsed":0}
{"time":"2020-02-03T15:34:52.149Z","state":1,"elapsed":0}
{"time":"2020-02-03T15:34:53.149Z","state":0,"elapsed":0}
{"time":"2020-02-03T15:34:54.149Z","state":0,"elapsed":1000}
threshold-count-output-field
A field to record the action threshold count at the time of change
Type: field
group-by
Allows tracking transitions individually in the case of aggregated data
Type: field
Example
input:
{"time":"2020-02-03T15:34:45.149Z","name":"john","state":0}
{"time":"2020-02-03T15:34:46.149Z","name":"jane","state":0}
{"time":"2020-02-03T15:34:47.149Z","name":"john","state":1}
{"time":"2020-02-03T15:34:48.149Z","name":"jane","state":1}
{"time":"2020-02-03T15:34:49.149Z","name":"john","state":1}
{"time":"2020-02-03T15:34:50.149Z","name":"jane","state":1}
action:
transition:
watch: state
elapsed-output-field: elapsed
time-field: time
group-by: name
output:
{"time":"2020-02-03T15:34:45.149Z","name":"john","state":0,"elapsed":0}
{"time":"2020-02-03T15:34:46.149Z","name":"jane","state":0,"elapsed":0}
{"time":"2020-02-03T15:34:47.149Z","name":"john","state":1,"elapsed":0}
{"time":"2020-02-03T15:34:48.149Z","name":"jane","state":1,"elapsed":0}
{"time":"2020-02-03T15:34:49.149Z","name":"john","state":1,"elapsed":2000}
{"time":"2020-02-03T15:34:50.149Z","name":"jane","state":1,"elapsed":2000}
Example: Without group-by
usage
input:
{"time":"2020-02-03T15:34:45.149Z","name":"john","state":0}
{"time":"2020-02-03T15:34:46.149Z","name":"jane","state":0}
{"time":"2020-02-03T15:34:47.149Z","name":"john","state":1}
{"time":"2020-02-03T15:34:48.149Z","name":"jane","state":1}
{"time":"2020-02-03T15:34:49.149Z","name":"john","state":1}
{"time":"2020-02-03T15:34:50.149Z","name":"jane","state":1}
action:
transition:
watch: state
elapsed-output-field: elapsed
time-field: time
output:
{"time":"2020-02-03T15:34:45.149Z","name":"john","state":0,"elapsed":0}
{"time":"2020-02-03T15:34:46.149Z","name":"jane","state":0,"elapsed":1000}
{"time":"2020-02-03T15:34:47.149Z","name":"john","state":1,"elapsed":0}
{"time":"2020-02-03T15:34:48.149Z","name":"jane","state":1,"elapsed":1000}
{"time":"2020-02-03T15:34:49.149Z","name":"john","state":1,"elapsed":2000}
{"time":"2020-02-03T15:34:50.149Z","name":"jane","state":1,"elapsed":3000}
save-file
A file to persist state, to know where we left off in the case where the Pipe is restarted
Type: path
Example
input:
{"time":"2020-02-03T15:34:55.149Z","state":0}
{"time":"2020-02-03T15:34:56.149Z","state":1}
{"time":"2020-02-03T15:34:57.149Z","state":1}
action:
transition:
watch: state
elapsed-output-field: elapsed
time-field: time
save-file: transition-state.yml
output:
{"time":"2020-02-03T15:34:55.149Z","state":0,"elapsed":0}
{"time":"2020-02-03T15:34:56.149Z","state":1,"elapsed":0}
{"time":"2020-02-03T15:34:57.149Z","state":1,"elapsed":1000}
maximum-age
The maximum age of any recorded history
Type: string
maximum-age-marker
The marker in the event stream to watch for to trigger a maximum age record sweep
Type: string