logstash-filter-http 1.4.1 → 1.4.3
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -1
- data/lib/logstash/filters/http.rb +14 -3
- data/logstash-filter-http.gemspec +1 -1
- data/spec/filters/http_spec.rb +43 -0
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 115c2c25afb8de24c53df0f55cd72b9a4e02d1fd6536a2eb8e5450c0ba4830df
         | 
| 4 | 
            +
              data.tar.gz: 6c2dcab69cdae94dc7c98aeca7ff023451ba681d674b813e575b6f5c68ee8edd
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: b4b38e4785d4a4674511d62b62f02caf7f161cb0523d2991aa375066c9c16b0c1323726a691b543dd614d9bcf6eccf291072548bd61617d63b031a59752a138a
         | 
| 7 | 
            +
              data.tar.gz: 62b3b7e17e567cb4aefd648bb25629f2c1c1b5c87ba008d4259fdf70078f8e5c2ede799f0c6339f7acb89a9692fff7e7c3c869d87514947ab0ce8ec00c818a1b
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,11 @@ | |
| 1 | 
            +
            ## 1.4.3
         | 
| 2 | 
            +
              - DOC: add clarification on sending data as json [#48](https://github.com/logstash-plugins/logstash-filter-http/pull/48)
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            ## 1.4.2
         | 
| 5 | 
            +
              - Fix: resolve content type when a content-type header contains an array [#46](https://github.com/logstash-plugins/logstash-filter-http/pull/46)
         | 
| 6 | 
            +
             | 
| 1 7 | 
             
            ## 1.4.1
         | 
| 2 | 
            -
              - Fix: don't process response body for HEAD requests [# | 
| 8 | 
            +
              - Fix: don't process response body for HEAD requests [#41](https://github.com/logstash-plugins/logstash-filter-http/pull/41)
         | 
| 3 9 |  | 
| 4 10 | 
             
            ## 1.4.0
         | 
| 5 11 | 
             
              - Feat: added ssl_supported_protocols option [#38](https://github.com/logstash-plugins/logstash-filter-http/pull/38)
         | 
| @@ -88,11 +88,12 @@ class LogStash::Filters::Http < LogStash::Filters::Base | |
| 88 88 | 
             
                elsif !code.between?(200, 299)
         | 
| 89 89 | 
             
                  @logger.error('error during HTTP request',
         | 
| 90 90 | 
             
                                :url => url_for_event, :code => code,
         | 
| 91 | 
            +
                                :headers => response_headers,
         | 
| 91 92 | 
             
                                :response => response_body)
         | 
| 92 93 | 
             
                  @tag_on_request_failure.each { |tag| event.tag(tag) }
         | 
| 93 94 | 
             
                else
         | 
| 94 95 | 
             
                  @logger.debug? && @logger.debug('success received',
         | 
| 95 | 
            -
                                                  :code => code, :body => response_body)
         | 
| 96 | 
            +
                                                  :code => code, :headers => response_headers, :body => response_body)
         | 
| 96 97 | 
             
                  process_response(response_body, response_headers, event)
         | 
| 97 98 | 
             
                  filter_matched(event)
         | 
| 98 99 | 
             
                end
         | 
| @@ -132,10 +133,10 @@ EOF | |
| 132 133 | 
             
              end
         | 
| 133 134 |  | 
| 134 135 | 
             
              def process_response(body, headers, event)
         | 
| 135 | 
            -
                content_type, _ = headers.fetch("content-type", "").split(";")
         | 
| 136 136 | 
             
                event.set(@target_headers, headers)
         | 
| 137 137 | 
             
                return if @verb == 'head' # Since HEAD requests will not contain body, we need to set only header
         | 
| 138 | 
            -
             | 
| 138 | 
            +
             | 
| 139 | 
            +
                if headers_has_json_content_type?(headers)
         | 
| 139 140 | 
             
                  begin
         | 
| 140 141 | 
             
                    parsed = LogStash::Json.load(body)
         | 
| 141 142 | 
             
                    event.set(@target_body, parsed)
         | 
| @@ -152,4 +153,14 @@ EOF | |
| 152 153 | 
             
                end
         | 
| 153 154 | 
             
              end
         | 
| 154 155 |  | 
| 156 | 
            +
              ##
         | 
| 157 | 
            +
              # @param headers [String] or [Array]
         | 
| 158 | 
            +
              # @return resolved content-type
         | 
| 159 | 
            +
              def headers_has_json_content_type?(headers)
         | 
| 160 | 
            +
                # content-type might be an array or string with ; separated
         | 
| 161 | 
            +
                headers = headers.fetch("content-type", "")
         | 
| 162 | 
            +
                headers = headers.kind_of?(Array) ? headers : headers.split(';')
         | 
| 163 | 
            +
                headers.map(&:strip).include?("application/json")
         | 
| 164 | 
            +
              end
         | 
| 165 | 
            +
             | 
| 155 166 | 
             
            end # class LogStash::Filters::Rest
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            Gem::Specification.new do |s|
         | 
| 2 2 | 
             
              s.name = 'logstash-filter-http'
         | 
| 3 | 
            -
              s.version = '1.4. | 
| 3 | 
            +
              s.version = '1.4.3'
         | 
| 4 4 | 
             
              s.licenses = ['Apache License (2.0)']
         | 
| 5 5 | 
             
              s.summary = 'This filter requests data from a RESTful Web Service.'
         | 
| 6 6 | 
             
              s.description = 'This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install logstash-filter-http. This gem is not a stand-alone program'
         | 
    
        data/spec/filters/http_spec.rb
    CHANGED
    
    | @@ -118,6 +118,7 @@ describe LogStash::Filters::Http do | |
| 118 118 | 
             
                      'Server' => 'Apache',
         | 
| 119 119 | 
             
                      'Last-Modified' => 'Mon, 18 Jul 2016 02:36:04 GMT',
         | 
| 120 120 | 
             
                      'X-Backend-Server' => 'logstash.elastic.co',
         | 
| 121 | 
            +
                      'Content-Type' => %w[application/json application/xml]
         | 
| 121 122 | 
             
                  }
         | 
| 122 123 | 
             
                  [200, response_headers, "Bom dia"]
         | 
| 123 124 | 
             
                end
         | 
| @@ -136,10 +137,12 @@ describe LogStash::Filters::Http do | |
| 136 137 | 
             
                    if ecs_select.active_mode == :disabled
         | 
| 137 138 | 
             
                      expect(event.get('headers')).to include "Server" => "Apache"
         | 
| 138 139 | 
             
                      expect(event.get('headers')).to include "X-Backend-Server" => "logstash.elastic.co"
         | 
| 140 | 
            +
                      expect(event.get('headers')).to include "Content-Type" => %w[application/json application/xml]
         | 
| 139 141 | 
             
                    else
         | 
| 140 142 | 
             
                      expect(event.include?('headers')).to be false
         | 
| 141 143 | 
             
                      expect(event.get('[@metadata][filter][http][response][headers]')).to include "Server" => "Apache"
         | 
| 142 144 | 
             
                      expect(event.get('[@metadata][filter][http][response][headers]')).to include "X-Backend-Server" => "logstash.elastic.co"
         | 
| 145 | 
            +
                      expect(event.get('[@metadata][filter][http][response][headers]')).to include "Content-Type" => %w[application/json application/xml]
         | 
| 143 146 | 
             
                    end
         | 
| 144 147 | 
             
                  end
         | 
| 145 148 |  | 
| @@ -172,6 +175,46 @@ describe LogStash::Filters::Http do | |
| 172 175 | 
             
                    subject.filter(event)
         | 
| 173 176 | 
             
                  end
         | 
| 174 177 | 
             
                end
         | 
| 178 | 
            +
             | 
| 179 | 
            +
                context "content-type header" do
         | 
| 180 | 
            +
                  let(:config) { super().merge "headers" => headers }
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                  describe 'when content-type header is an array' do
         | 
| 183 | 
            +
                    let(:headers) {{ "Content-type" => %w[application/json logstash/custom-media-type] }}
         | 
| 184 | 
            +
             | 
| 185 | 
            +
                    it "resolves the content-type" do
         | 
| 186 | 
            +
                      expect(subject).to receive(:request_http) do |verb, url, options|
         | 
| 187 | 
            +
                        expect( options.fetch(:headers, {}) ).to include(headers)
         | 
| 188 | 
            +
                      end.and_return(response)
         | 
| 189 | 
            +
             | 
| 190 | 
            +
                      expect{ subject.filter(event) }.not_to raise_error
         | 
| 191 | 
            +
                    end
         | 
| 192 | 
            +
                  end
         | 
| 193 | 
            +
             | 
| 194 | 
            +
                  describe 'when content-type header is a string' do
         | 
| 195 | 
            +
                    let(:headers) {{ "Content-type" => "application/json; logstash/custom-media-type" }}
         | 
| 196 | 
            +
             | 
| 197 | 
            +
                    it "resolves the content-type" do
         | 
| 198 | 
            +
                      expect(subject).to receive(:request_http) do |verb, url, options|
         | 
| 199 | 
            +
                        expect( options.fetch(:headers, {}) ).to include(headers)
         | 
| 200 | 
            +
                      end.and_return(response)
         | 
| 201 | 
            +
             | 
| 202 | 
            +
                      expect{ subject.filter(event) }.not_to raise_error
         | 
| 203 | 
            +
                    end
         | 
| 204 | 
            +
                  end
         | 
| 205 | 
            +
             | 
| 206 | 
            +
                  describe 'when content-type header is an empty string' do
         | 
| 207 | 
            +
                    let(:headers) {{ "Content-type" => "" }}
         | 
| 208 | 
            +
             | 
| 209 | 
            +
                    it "resolves the content-type" do
         | 
| 210 | 
            +
                      expect(subject).to receive(:request_http) do |verb, url, options|
         | 
| 211 | 
            +
                        expect( options.fetch(:headers, {}) ).to include(headers)
         | 
| 212 | 
            +
                      end.and_return(response)
         | 
| 213 | 
            +
             | 
| 214 | 
            +
                      expect{ subject.filter(event) }.not_to raise_error
         | 
| 215 | 
            +
                    end
         | 
| 216 | 
            +
                  end
         | 
| 217 | 
            +
                end
         | 
| 175 218 | 
             
              end
         | 
| 176 219 |  | 
| 177 220 | 
             
              describe "query string parameters" do
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: logstash-filter-http
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.4. | 
| 4 | 
            +
              version: 1.4.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Elastic
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2023-03-21 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              requirement: !ruby/object:Gem::Requirement
         |