|
module Agents
class JsonParseAgent < Agent
include FormConfigurable
cannot_be_scheduled!
description <<-MD
The JSON Parse Agent parses a JSON string and emits the data in a new event
`data` is the JSON to parse. Use [Liquid](https://github.com/cantino/huginn/wiki/Formatting-Events-using-Liquid) templating to specify the JSON string.
`data_key` sets the key which contains the parsed JSON data in emitted events
MD
def default_options
{
'data' => '{{ data }}',
'data_key' => 'data',
}
end
event_description do
"Events will looks like this:\n\n %s" % Utils.pretty_print(interpolated['data_key'] => {parsed: 'object'})
end
form_configurable :data
form_configurable :data_key
def validate_options
errors.add(:base, "data needs to be present") if options['data'].blank?
errors.add(:base, "data_key needs to be present") if options['data_key'].blank?
end
def working?
received_event_without_error?
end
def receive(incoming_events)
incoming_events.each do |event|
begin
mo = interpolated(event)
create_event payload: { mo['data_key'] => JSON.parse(mo['data']) }
rescue JSON::JSONError => e
error("Could not parse JSON: #{e.class} '#{e.message}'")
end
end
end
end
end
|