Class: Fluent::EverySenseInput::EverySenseParser

Inherits:
Object
  • Object
show all
Defined in:
lib/fluent/plugin/in_everysense.rb

Overview

currently EverySenseParser is only used by EverySense Plugin Parser is implemented internally. 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"
    }
  }
]

]

Instance Method Summary collapse

Constructor Details

#initialize(format, parser) ⇒ EverySenseParser

Returns a new instance of EverySenseParser.



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/fluent/plugin/in_everysense.rb', line 41

def initialize(format, parser)
  case format
  when 'json'
    @parser = parser
    return
  when 'xml'
    raise NotImplementedError, "XML parser is not implemented yet."
  else
    raise NotImplementedError, "XML parser is not implemented yet."
  end
end

Instance Method Details

#parse(messages) ⇒ Object

TODO: parser should be impelented prettier way… currently once parse JSON array is parsed and in map loop each message is re-formatted to JSON. After that it is re-parsed by fluent JSON parser which supports time_format etc. options…



57
58
59
60
61
62
63
64
65
# File 'lib/fluent/plugin/in_everysense.rb', line 57

def parse(messages)
  #$log.debug messages
  JSON.parse(messages).map do |message|
    #$log.debug message
    @parser.parse(message.to_json) do |time, record|
      yield(time, record)
    end
  end
end