class Fluent::Plugin::EverySenseInput
Public Instance Methods
configure(conf)
click to toggle source
received message format of EverySense is as follows
[
[ { "farm_uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "sensor_name": "collection_data_1", "data_class_name": "AirTemperature", "data": { "at": "2016-05-12 21:38:52 UTC", "memo": null, "value": 23, "unit": "degree Celsius" } }, { "farm_uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "sensor_name": "collection_data_2", "data_class_name": "AirHygrometer", "data": { "at": "2016-05-12 21:38:52 UTC", "memo": null, "value": 30, "unit": "%RH" } } ]
]
Calls superclass method
# File lib/fluent/plugin/in_everysense.rb, line 70 def configure(conf) super configure_parser(conf) end
configure_parser(conf)
click to toggle source
# File lib/fluent/plugin/in_everysense.rb, line 75 def configure_parser(conf) compat_parameters_convert(conf, :parser) parser_config = conf.elements('parse').first @parser = parser_create(conf: parser_config) end
emit(messages)
click to toggle source
Converted record for emission [
{"farm_uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "device": [ { "farm_uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "sensor_name": "collection_data_1", "data_class_name": "AirTemperature", "data": { "at": "2016-05-12 21:38:52 UTC", "memo": null, "value": 23, "unit": "degree Celsius" } }, { "farm_uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "sensor_name": "collection_data_2", "data_class_name": "AirHygrometer", "data": { "at": "2016-05-12 21:38:52 UTC", "memo": null, "value": 30, "unit": "%RH" } } ] }
]
# File lib/fluent/plugin/in_everysense.rb, line 135 def emit(messages) begin time, record = @parser.parse(messages) do |time, record| [time, record] end #log.debug "time: #{time.inspect}" #log.debug "record: #{record.inspect}" if record.is_a?(Array) && record[0].is_a?(Array) # Multiple devices case mes = Fluent::MultiEventStream.new record.each do |single_record| # use timestamp of the first sensor (single_record[0]) mes.add(parse_time(single_record[0]), { farm_uuid: single_record[0]["farm_uuid"], device: single_record }) end router.emit_stream(@tag, mes) elsif record.is_a?(Array) && record[0].is_a?(Hash) # Single device case # use timestamp of the first sensor (single_record[0]) router.emit(@tag, parse_time(record[0]), { farm_uuid: record[0]["farm_uuid"], device: record }) else # The other case raise Fluent::Plugin::Parser::ParserError, "Unexpected input format." end rescue Exception => e log.error error: e.to_s log.debug_backtrace(e.backtrace) end end
parse_time(record)
click to toggle source
# File lib/fluent/plugin/in_everysense.rb, line 96 def parse_time(record) if record["data"]["at"].nil? log.debug "Since time_key field is nil, Fluent::EventTime.now is used." Fluent::EventTime.now else @parser.parse_time(record["data"]["at"]) end end
shutdown()
click to toggle source
Calls superclass method
# File lib/fluent/plugin/in_everysense.rb, line 167 def shutdown shutdown_proxy super end
start()
click to toggle source
Calls superclass method
# File lib/fluent/plugin/in_everysense.rb, line 81 def start #raise StandardError.new if @tag.nil? super start_proxy timer_execute(:in_everysense, @polling_interval) do begin messages = get_messages emit(messages) if !(messages.nil? || messages.empty?) rescue Exception => e log.error error: e.to_s log.debug_backtrace(e.backtrace) end end end