Class: Fluent::Plugin::MultiConditionSelectorOutput::RubyPlaceholderExpander

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

Overview

THIS CLASS MUST BE THREAD-SAFE

Defined Under Namespace

Classes: CleanroomExpander

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params) ⇒ RubyPlaceholderExpander

Returns a new instance of RubyPlaceholderExpander.



266
267
268
269
270
# File 'lib/fluent/plugin/out_multi_condition_selector.rb', line 266

def initialize(params)
  @log = params[:log]
  @auto_typecast = params[:auto_typecast]
  @cleanroom_expander = CleanroomExpander.new
end

Instance Attribute Details

#logObject (readonly)

Returns the value of attribute log.



264
265
266
# File 'lib/fluent/plugin/out_multi_condition_selector.rb', line 264

def log
  @log
end

Instance Method Details

#expand(str, placeholders, force_stringify = false) ⇒ Object

Expand string with placeholders

Parameters:

  • str (String)


316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
# File 'lib/fluent/plugin/out_multi_condition_selector.rb', line 316

def expand(str, placeholders, force_stringify = false)
  # FIXME: tag情報は使用してなさそうなので, 不必要であれば
  @cleanroom_expander.expand(
      str,
      placeholders['tag'],
      placeholders['time'],
      placeholders['record'],
      placeholders['tag_parts'],
      placeholders['tag_prefix'],
      placeholders['tag_suffix'],
      placeholders['hostname']
  )
rescue => e
  log.warn "record_reformer: failed to expand `#{str}`", :error_class => e.class, :error => e.message
  log.warn_backtrace
  nil
end

#prepare_placeholders(placeholder_values) ⇒ Object

FIXME: 引数返すだけの関数があるので削除



309
310
311
# File 'lib/fluent/plugin/out_multi_condition_selector.rb', line 309

def prepare_placeholders(placeholder_values)
  placeholder_values
end

#preprocess_map(value, force_stringify = false) ⇒ Object

Preprocess record map to convert into ruby string expansion

Parameters:

  • value (Hash|String|Array)

    record map config

  • force_stringify (Boolean) (defaults to: false)

    the value must be string, used for hash key



280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
# File 'lib/fluent/plugin/out_multi_condition_selector.rb', line 280

def preprocess_map(value, force_stringify = false)
  new_value = nil
  if value.is_a?(String)
    if @auto_typecast and !force_stringify
      num_placeholders = value.scan('${').size
      if num_placeholders == 1 and value.start_with?('${') && value.end_with?('}')
        new_value = value[2..-2] # ${..} => ..
      end
    end
    unless new_value
      new_value = "%Q[#{value.gsub('${', '#{')}]" # xx${..}xx => %Q[xx#{..}xx]
    end
  elsif value.is_a?(Hash)
    new_value = {}
    value.each_pair do |k, v|
      new_value[preprocess_map(k, true)] = preprocess_map(v)
    end
  elsif value.is_a?(Array)
    new_value = []
    value.each_with_index do |v, i|
      new_value[i] = preprocess_map(v)
    end
  else
    new_value = value
  end
  new_value
end

#time_value(time) ⇒ Object



272
273
274
# File 'lib/fluent/plugin/out_multi_condition_selector.rb', line 272

def time_value(time)
  Time.at(time)
end