2017-03-28 17:23:01 -04:00
|
|
|
[[input-chain]]
|
|
|
|
=== Chain Input
|
|
|
|
|
|
|
|
Use the `chain` input to load data from multiple sources into the watch
|
|
|
|
execution context when the watch is triggered. The inputs in a chain
|
|
|
|
are processed in order and the data loaded by an input can be accessed by the
|
|
|
|
subsequent inputs in the chain.
|
|
|
|
|
|
|
|
The `chain` input enables you perform actions based on data from multiple
|
|
|
|
sources. You can also use the data collected by one input to load data
|
|
|
|
from another source.
|
|
|
|
|
|
|
|
For example, the following chain input loads data from an HTTP server using the
|
|
|
|
path set by a `simple` input:
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
"input" : {
|
|
|
|
"chain" : {
|
|
|
|
"inputs" : [ <1>
|
|
|
|
{
|
|
|
|
"first" : {
|
|
|
|
"simple" : { "path" : "/_search" }
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"second" : {
|
|
|
|
"http" : {
|
|
|
|
"request" : {
|
|
|
|
"host" : "localhost",
|
|
|
|
"port" : 9200,
|
|
|
|
"path" : "{{ctx.payload.first.path}}" <2>
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
--------------------------------------------------
|
2018-06-22 21:09:37 -04:00
|
|
|
// NOTCONSOLE
|
2017-03-28 17:23:01 -04:00
|
|
|
<1> The inputs in a chain are specified as an array to guarantee the order in
|
|
|
|
which the inputs are processed. (JSON does not guarantee the order of
|
|
|
|
arbitrary objects.)
|
|
|
|
<2> Loads the `path` set by the `first` input.
|
|
|
|
|
|
|
|
==== Accessing Chained Input Data
|
|
|
|
|
|
|
|
To reference data loaded by a particular input, you use the input's name,
|
2017-11-27 07:27:56 -05:00
|
|
|
`ctx.payload.<input-name>.<value>`.
|
|
|
|
|
|
|
|
==== Transforming Chained Input Data
|
|
|
|
|
|
|
|
In certain use-cases the output of the first input should be used as input
|
|
|
|
in a subsequent input. This requires you to do a transform, before you pass
|
|
|
|
the data on to the next input.
|
|
|
|
|
|
|
|
In order to achieve this you can use a transform input between the two
|
|
|
|
specified inputs, see the following example. Note, that the first input will
|
|
|
|
still be available in its original form in `ctx.payload.first`.
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
"input" : {
|
|
|
|
"chain" : {
|
|
|
|
"inputs" : [ <1>
|
|
|
|
{
|
|
|
|
"first" : {
|
|
|
|
"simple" : { "path" : "/_search" }
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"second" : {
|
|
|
|
"transform" : {
|
|
|
|
"script" : "return [ 'path' : 'ctx.payload.first.path' + '/' ]"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"third" : {
|
|
|
|
"http" : {
|
|
|
|
"request" : {
|
|
|
|
"host" : "localhost",
|
|
|
|
"port" : 9200,
|
|
|
|
"path" : "{{ctx.payload.second.path}}" <2>
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
--------------------------------------------------
|
2018-06-22 21:09:37 -04:00
|
|
|
// NOTCONSOLE
|