blob: 7696ee058845ecda1cad9e7c9f25d634b9e4ba2b [file] [log] [blame]
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
=== Processors
Decanter Processors are optional. They receive data from the collectors, apply a processing logic on the received event, and send a new event to the appenders.
The processors are listening for incoming events on `decanter/collect/*` dispatcher topics and send processed events to `decanter/process/*` dispatcher topics.
By default, the appenders are listening on `decanter/collect/*` topics. If you want to append processed events, you have to configure the appenders
to listen on `decanter/process/*` topics. To do that, you just have to change appender configuration with:
----
event.topics=decanter/process/*
----
It's possible to "chain" processors thanks to the topics.
For instance, you can have the first processor listening on `decanter/collect/*` topic (containing events coming from the collectors), and
sending processed events to `decanter/process/first`. Then, a second processor can listen on `decanter/process/first` topic and send processed
data to `decanter/process/second`. Finally, at the end of the chain, you have to configure the appenders to listen on
`decanter/process/second`.
==== Pass Through
This processor doesn't implement any concrete logic. It's for the example how to implement a processor.
You can install this processor using the `decanter-processor-passthrough` feature:
----
karaf@root()> feature:install decanter-processor-passthrough
----
==== Aggregate
This processor "merges" several incoming events in a single one that is sent periodically.
You can install this processor using the `decanter-processor-aggregate` feature:
----
karaf@root()> feature:install decanter-processor-aggregate
----
By default, the "merged" event is sent every minute. You can change this using the `period` configuration.
You can provision `etc/org.apache.karaf.decanter.processor.aggregate.cfg` configuration file with:
----
period=120 # this is the period in seconds
target.topics=decanter/process/aggregate # that's the default target topic
----
You can also decide if a known property is overwritten in the aggregator or appended.
By default, properties are not overwritten, meaning that it's prefixed by the event index in the aggregator:
----
0.foo=first
0.other=bar
1.foo=second
1.other=bar
----
In the processor `etc/org.apache.karaf.decanter.processor.aggregate.cfg` configuration file, you can enable `overwrite`:
----
overwrite=true
----
Then, if a property already exist in the aggregator, its value will be overwritten by the new event value received in the aggregator.
==== GroupBy
This processor "groups" events containing same properties values during a period.
For instance, you configure the GroupBy processor to group events using `foo` and `bar` properties. Then you receive
the following three events:
1. first event containing: `{ "foo":"foo","bar":"bar","first":"value1" }`
2. second event containing: `{ "hello":"world","second":"value2" }`
3. third event containing: `{ "foo":"foo","bar":"bar","third":"value3"}`
The groupBy processor will create (and send) one event containing:
* if you choose to "flatten" the properties, the event will contain: `{ "foo":"foo", "bar":"bar", "first":"value1","third":"value3" }`
* if you chosse not to "flatten" the properties, the event will contain: `{ "events":[ { "foo":"foo","bar":"bar","first":"value1" }, { "foo":"foo","bar":"bar","third":"value3" } ] }`
You can install this processor using the `decanter-processor-groupby` feature:
----
karaf@root()> feature:install decanter-processor-groupby
----
By default, the "merged" event is sent every minute. You can change this using the `period` configuration.
The GroupBy processor is configured via `etc/org.apache.karaf.decanter.processor.groupby.cfg` configuration file:
----
#
# Decanter GroupBy processor
#
#
# Destination dispatcher topics where to send the aggregated events
#
#target.topics=decanter/process/groupby
#
# Aggregation period in seconds
#
#period=60
#
# List of grouping properties
#
#groupBy=first,second
#
# If true, grouped events properties are flatten (all properties in the event) aka Map<String,Object>
# If false, grouped events properties are inner grouped map aka Map<int, Map<String,Object>>
#
#flatten=true
----
* The `target.topics` property defines the list of Decanter topics (separated by `,`) where the resulting events will be sent.
* The `period` property defines the retention period to accumulate the incoming events
* The `groupBy` property defines the property names (separated by `,`) as grouping term
* The `flatten` property defines the way the resulting event will be created. If `true`, all events properties will be store directly (flat) in the resulting event. If `false`, the resulting event will contain an array of properties (from the original grouped events).