fluent-plugin-geoip 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +1 -1
- data/README.md +5 -5
- data/fluent-plugin-geoip.gemspec +1 -1
- data/lib/fluent/plugin/out_geoip.rb +4 -3
- data/test/plugin/test_out_geoip.rb +40 -1
- metadata +2 -2
    
        data/.travis.yml
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -44,8 +44,8 @@ $ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-geoip | |
| 44 44 | 
             
              # in the case of accessing nested value, delimit keys by dot like 'host.ip'.
         | 
| 45 45 | 
             
              geoip_lookup_key  host
         | 
| 46 46 |  | 
| 47 | 
            -
              # Specify geoip database (using bundled GeoLiteCity databse by default)
         | 
| 48 | 
            -
              geoip_database    ' | 
| 47 | 
            +
              # Specify optional geoip database (using bundled GeoLiteCity databse by default)
         | 
| 48 | 
            +
              geoip_database    '/path/to/your/GeoIPCity.dat'
         | 
| 49 49 |  | 
| 50 50 | 
             
              # Set adding field with placeholder (more than one settings are required.)
         | 
| 51 51 | 
             
              <record>
         | 
| @@ -53,10 +53,10 @@ $ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-geoip | |
| 53 53 | 
             
                latitude        ${latitude['host']}
         | 
| 54 54 | 
             
                longitude       ${longitude['host']}
         | 
| 55 55 | 
             
                country_code3   ${country_code3['host']}
         | 
| 56 | 
            -
                country         ${ | 
| 56 | 
            +
                country         ${country_code['host']}
         | 
| 57 57 | 
             
                country_name    ${country_name['host']}
         | 
| 58 | 
            -
                dma             ${ | 
| 59 | 
            -
                area            ${ | 
| 58 | 
            +
                dma             ${dma_code['host']}
         | 
| 59 | 
            +
                area            ${area_code['host']}
         | 
| 60 60 | 
             
                region          ${region['host']}
         | 
| 61 61 | 
             
              </record>
         | 
| 62 62 |  | 
    
        data/fluent-plugin-geoip.gemspec
    CHANGED
    
    | @@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) | |
| 4 4 |  | 
| 5 5 | 
             
            Gem::Specification.new do |spec|
         | 
| 6 6 | 
             
              spec.name          = "fluent-plugin-geoip"
         | 
| 7 | 
            -
              spec.version       = "0. | 
| 7 | 
            +
              spec.version       = "0.2.0"
         | 
| 8 8 | 
             
              spec.authors       = ["Kentaro Yoshida"]
         | 
| 9 9 | 
             
              spec.email         = ["y.ken.studio@gmail.com"]
         | 
| 10 10 | 
             
              spec.summary       = %q{Fluentd Output plugin to add information about geographical location of IP addresses with Maxmind GeoIP databases.}
         | 
| @@ -63,13 +63,13 @@ class Fluent::GeoipOutput < Fluent::BufferedOutput | |
| 63 63 | 
             
                    @map[k] = v
         | 
| 64 64 | 
             
                    validate_json = Proc.new { 
         | 
| 65 65 | 
             
                      begin
         | 
| 66 | 
            -
                        dummy_text = ' | 
| 67 | 
            -
                        Yajl::Parser.parse(v.gsub(REGEXP_PLACEHOLDER_SCAN, dummy_text)) | 
| 66 | 
            +
                        dummy_text = Yajl::Encoder.encode('dummy_text')
         | 
| 67 | 
            +
                        Yajl::Parser.parse(v.gsub(REGEXP_PLACEHOLDER_SCAN, dummy_text))
         | 
| 68 68 | 
             
                      rescue Yajl::ParseError => e
         | 
| 69 69 | 
             
                        raise Fluent::ConfigError, "geoip: failed to parse '#{v}' as json."
         | 
| 70 70 | 
             
                      end
         | 
| 71 71 | 
             
                    }
         | 
| 72 | 
            -
                    validate_json.call
         | 
| 72 | 
            +
                    validate_json.call if v.match(REGEXP_JSON)
         | 
| 73 73 | 
             
                  }
         | 
| 74 74 | 
             
                }
         | 
| 75 75 | 
             
                @placeholder_keys = @map.values.join.scan(REGEXP_PLACEHOLDER_SCAN).map{ |placeholder| placeholder[0] }.uniq
         | 
| @@ -135,6 +135,7 @@ class Fluent::GeoipOutput < Fluent::BufferedOutput | |
| 135 135 | 
             
              def get_address(record)
         | 
| 136 136 | 
             
                address = {}
         | 
| 137 137 | 
             
                @geoip_lookup_key.each do |field|
         | 
| 138 | 
            +
                  address.store(field, record[field]); next if not record[field].nil?
         | 
| 138 139 | 
             
                  key = field.split('.')
         | 
| 139 140 | 
             
                  obj = record
         | 
| 140 141 | 
             
                  key.each {|k|
         | 
| @@ -89,7 +89,9 @@ class GeoipOutputTest < Test::Unit::TestCase | |
| 89 89 | 
             
              def test_emit_tag_option
         | 
| 90 90 | 
             
                d1 = create_driver(%[
         | 
| 91 91 | 
             
                  geoip_lookup_key  host
         | 
| 92 | 
            -
                   | 
| 92 | 
            +
                  <record>
         | 
| 93 | 
            +
                    geoip_city      ${city['host']}
         | 
| 94 | 
            +
                  </record>
         | 
| 93 95 | 
             
                  remove_tag_prefix input.
         | 
| 94 96 | 
             
                  tag               geoip.${tag}
         | 
| 95 97 | 
             
                ], 'input.access')
         | 
| @@ -104,6 +106,43 @@ class GeoipOutputTest < Test::Unit::TestCase | |
| 104 106 | 
             
                assert_equal nil, emits[1][2]['geoip_city']
         | 
| 105 107 | 
             
              end
         | 
| 106 108 |  | 
| 109 | 
            +
              def test_emit_tag_parts
         | 
| 110 | 
            +
                d1 = create_driver(%[
         | 
| 111 | 
            +
                  geoip_lookup_key  host
         | 
| 112 | 
            +
                  <record>
         | 
| 113 | 
            +
                    geoip_city      ${city['host']}
         | 
| 114 | 
            +
                  </record>
         | 
| 115 | 
            +
                  tag               geoip.${tag_parts[1]}.${tag_parts[2..3]}.${tag_parts[-1]}
         | 
| 116 | 
            +
                ], '0.1.2.3')
         | 
| 117 | 
            +
                d1.run do
         | 
| 118 | 
            +
                  d1.emit({'host' => '66.102.3.80'})
         | 
| 119 | 
            +
                end
         | 
| 120 | 
            +
                emits = d1.emits
         | 
| 121 | 
            +
                assert_equal 1, emits.length
         | 
| 122 | 
            +
                assert_equal 'geoip.1.2.3.3', emits[0][0] # tag
         | 
| 123 | 
            +
                assert_equal 'Mountain View', emits[0][2]['geoip_city']
         | 
| 124 | 
            +
              end
         | 
| 125 | 
            +
             | 
| 126 | 
            +
              def test_emit_with_dot_key
         | 
| 127 | 
            +
                d1 = create_driver(%[
         | 
| 128 | 
            +
                  geoip_lookup_key  ip.origin, ip.dest
         | 
| 129 | 
            +
                  <record>
         | 
| 130 | 
            +
                    origin_country  ${country_code['ip.origin']}
         | 
| 131 | 
            +
                    dest_country    ${country_code['ip.dest']}
         | 
| 132 | 
            +
                  </record>
         | 
| 133 | 
            +
                  remove_tag_prefix input.
         | 
| 134 | 
            +
                  tag               geoip.${tag}
         | 
| 135 | 
            +
                ], 'input.access')
         | 
| 136 | 
            +
                d1.run do
         | 
| 137 | 
            +
                  d1.emit({'ip.origin' => '66.102.3.80', 'ip.dest' => '8.8.8.8'})
         | 
| 138 | 
            +
                end
         | 
| 139 | 
            +
                emits = d1.emits
         | 
| 140 | 
            +
                assert_equal 1, emits.length
         | 
| 141 | 
            +
                assert_equal 'geoip.access', emits[0][0] # tag
         | 
| 142 | 
            +
                assert_equal 'US', emits[0][2]['origin_country']
         | 
| 143 | 
            +
                assert_equal 'US', emits[0][2]['dest_country']
         | 
| 144 | 
            +
              end
         | 
| 145 | 
            +
             | 
| 107 146 | 
             
              def test_emit_nested_attr
         | 
| 108 147 | 
             
                d1 = create_driver(%[
         | 
| 109 148 | 
             
                  geoip_lookup_key  host.ip
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: fluent-plugin-geoip
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.2.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2014- | 
| 12 | 
            +
            date: 2014-10-21 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: bundler
         |