12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- 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/huginn/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
|