Module: Fluent::Plugin::RenameKeyUtil

Included in:
RenameKeyFilter, RenameKeyOutput
Defined in:
lib/fluent/plugin/rename_key_util.rb

Constant Summary collapse

CONF_RENAME =
'rename_rule'
CONF_REPLACE =
'replace_rule'

Instance Method Summary collapse

Instance Method Details

#create_rename_rules(conf) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/fluent/plugin/rename_key_util.rb', line 6

def create_rename_rules(conf)
  @rename_rules = []
  rule_keys = conf.keys.select { |k| k.strip.start_with? CONF_RENAME }.
      sort_by { |k| k.sub(CONF_RENAME, '').to_i }

  rule_keys.each do |rule_key|
    rule = parse_rename_rule conf[rule_key]

    if @rename_rules.any? { |existing_rule| existing_rule[:key_regexp] == rule[:key_regexp] }
      raise Fluent::ConfigError, "Duplicated rules for key #{rule[:key_regexp].source}: #{@rename_rules}"
    end

    @rename_rules << rule
    log.info "Added rename key rule: #{rule_key} #{@rename_rules.last}"
  end
end

#create_replace_rules(conf) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/fluent/plugin/rename_key_util.rb', line 23

def create_replace_rules(conf)
  @replace_rules = []
  rule_keys = conf.keys.select { |k| k.strip.start_with? CONF_REPLACE }.
      sort_by { |k| k.sub(CONF_REPLACE, '').to_i }

  rule_keys.each do |rule_key|
    rule = parse_replace_rule conf[rule_key]

    if @replace_rules.any? { |existing_rule| existing_rule[:key_regexp] == rule[:key_regexp] }
      raise Fluent::ConfigError, "Duplicated rules for key #{rule[:key_regexp].source}: #{@replace_rules}"
    end

    @replace_rules << rule
    log.info "Added replace key rule: #{rule_key} #{@replace_rules.last}"
  end
end

#rename_key(record) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/fluent/plugin/rename_key_util.rb', line 40

def rename_key record
  new_record = {}

  record.each do |key, value|

    @rename_rules.each do |rule|
      match_data = key.match rule[:key_regexp]
      next unless match_data # next rule

      placeholder = get_placeholder match_data
      key = rule[:new_key].gsub /\${md\[\d+\]}/, placeholder
      break
    end

    if @deep_rename
      if value.is_a? Hash
        value = rename_key value
      elsif value.is_a? Array
        value = value.map { |v| v.is_a?(Hash) ? rename_key(v) : v }
      end
    end

    new_record[key] = value
  end

  new_record
end

#replace_key(record) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/fluent/plugin/rename_key_util.rb', line 68

def replace_key record
  new_record = {}

  record.each do |key, value|

    @replace_rules.each do |rule|
      match_data = key.match rule[:key_regexp]
      next unless match_data # next rule

      placeholder = get_placeholder match_data
      key = key.gsub rule[:key_regexp], rule[:replacement].gsub(/\${md\[\d+\]}/, placeholder)
      break
    end

    if @deep_rename
      if value.is_a? Hash
        value = replace_key value
      elsif value.is_a? Array
        value = value.map { |v| v.is_a?(Hash) ? replace_key(v) : v }
      end
    end

    new_record[key] = value
  end

  new_record
end