class Fluent::TextParser::JuniperAnalyticsdParser

Public Instance Methods

configure(conf) click to toggle source

This method is called after config_params have read configuration parameters

Calls superclass method
# File lib/fluent/plugin/parser_juniper_analyticsd.rb, line 12
def configure(conf)
  super

  ## Check if "output_format" has a valid value
  unless  @output_format.to_s == "structured" ||
          @output_format.to_s == "flat" ||
          @output_format.to_s == "statsd"

    raise ConfigError, "output_format value '#{@output_format}' is not valid. Must be : structured, flat or statsd"
  end
end
parse(text) { |json_time, record| ... } click to toggle source
# File lib/fluent/plugin/parser_juniper_analyticsd.rb, line 24
def parse(text)

  payload = JSON.parse(text)

  ## Extract contextual info
  record_type = payload["record-type"]
  record_time = payload["time"]
  device_name = payload["router-id"]
  port_name = payload["port"]

  ## Record time is in microsecond and until 0.14 Fluentd do not support lower than 1s
  ## We need to trim record time for now to fit fluentd
  json_time = (record_time/1000000).to_i

  if record_type == 'traffic-stats'

    ## Delete contextual info
    payload.delete("record-type")
    payload.delete("time")
    payload.delete("router-id")
    payload.delete("port")

    payload.each do |key, value|

      # Save all info extracted on a list
      sensor_data = []
      sensor_data.push({ 'device' => device_name })
      sensor_data.push({ 'interface' => port_name })
      sensor_data.push({ 'type' => record_type + '.' + key })
      sensor_data.push({ 'value' => value })

      record = build_record(output_format, sensor_data)
      yield json_time, record
    end
  elsif record_type == 'queue-stats'

    ## Delete contextual info
    payload.delete("record-type")
    payload.delete("time")
    payload.delete("router-id")
    payload.delete("port")

    payload.each do |key, value|

      sensor_data = []
      sensor_data.push({ 'device' => device_name })
      sensor_data.push({ 'interface' => port_name })
      sensor_data.push({ 'type' => record_type + '.' + key })
      sensor_data.push({ 'value' => value })

      record = build_record(output_format, sensor_data)
      yield json_time, record
    end
  else
    $log.warn "Recard type '#{record_type}' not supported"
  end
end