fluent-plugin-sumologic_output 1.7.2 → 1.7.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/.github/CODEOWNERS +5 -0
- data/.gitignore +2 -1
- data/README.md +1 -0
- data/Vagrantfile +27 -0
- data/fluent-plugin-sumologic_output.gemspec +1 -1
- data/lib/fluent/plugin/out_sumologic.rb +8 -5
- data/test/plugin/test_out_sumologic.rb +84 -0
- data/vagrant/README.md +43 -0
- data/vagrant/provision.sh +27 -0
- metadata +6 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 52b0c77e900d61ba360421933440383208033b29b0f08b012250519189872f24
         | 
| 4 | 
            +
              data.tar.gz: ff86f952744e650e30ba94d1185f4d270a3d8d6e7bfee5f30a0810e043a9483f
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 74c43d262f35e2767d170a05dbec58911590c0851a724f6c4adb0047a26601383e4d8fa5e2671c845bbd89a65781fb0d35e4bc2f8d7ed6bd0f0e376d6c7ec958
         | 
| 7 | 
            +
              data.tar.gz: 73b8ea2a6dbf4593eca7d4a702eeea14f27728bd7aa28ddc15e968301a5a2eb21f76ae18f1be2dd759f42cb357c2ceda92aec49e136755d76c954ebded889cdd
         | 
    
        data/.github/CODEOWNERS
    ADDED
    
    
    
        data/.gitignore
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -28,6 +28,7 @@ Configuration options for fluent.conf are: | |
| 28 28 | 
             
              * json_merge - Same as json but merge content of `log_key` into the top level and strip `log_key`
         | 
| 29 29 | 
             
            * `log_key` - Used to specify the key when merging json or sending logs in text format (default `message`)
         | 
| 30 30 | 
             
            * `open_timeout` - Set timeout seconds to wait until connection is opened.
         | 
| 31 | 
            +
            * `send_timeout` - Timeout for sending to SumoLogic in seconds. Don't modify unless you see `HTTPClient::SendTimeoutError` in your Fluentd logs. (default `120`)
         | 
| 31 32 | 
             
            * `add_timestamp` - Add `timestamp` (or `timestamp_key`) field to logs before sending to sumologic (default `true`)
         | 
| 32 33 | 
             
            * `timestamp_key` - Field name when `add_timestamp` is on (default `timestamp`)
         | 
| 33 34 | 
             
            * `proxy_uri` - Add the `uri` of the `proxy` environment if present.
         | 
    
        data/Vagrantfile
    ADDED
    
    | @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            # -*- mode: ruby -*-
         | 
| 2 | 
            +
            # vi: set ft=ruby :
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            unless Vagrant.has_plugin?("vagrant-disksize")
         | 
| 5 | 
            +
              puts "vagrant-disksize plugin unavailable\n" +
         | 
| 6 | 
            +
                   "please install it via 'vagrant plugin install vagrant-disksize'"
         | 
| 7 | 
            +
              exit 1
         | 
| 8 | 
            +
            end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            Vagrant.configure('2') do |config|
         | 
| 11 | 
            +
              config.vm.box = 'ubuntu/focal64'
         | 
| 12 | 
            +
              config.disksize.size = '50GB'
         | 
| 13 | 
            +
              config.vm.box_check_update = false
         | 
| 14 | 
            +
              config.vm.host_name = 'fluentd-output-sumologic'
         | 
| 15 | 
            +
              config.vm.network :private_network, ip: "192.168.78.45"
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              config.vm.provider 'virtualbox' do |vb|
         | 
| 18 | 
            +
                vb.gui = false
         | 
| 19 | 
            +
                vb.cpus = 8
         | 
| 20 | 
            +
                vb.memory = 16384
         | 
| 21 | 
            +
                vb.name = 'fluentd-output-sumologic'
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              config.vm.provision 'shell', path: 'vagrant/provision.sh'
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              config.vm.synced_folder ".", "/sumologic"
         | 
| 27 | 
            +
            end
         | 
| @@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) | |
| 4 4 |  | 
| 5 5 | 
             
            Gem::Specification.new do |gem|
         | 
| 6 6 | 
             
              gem.name          = "fluent-plugin-sumologic_output"
         | 
| 7 | 
            -
              gem.version       = "1.7. | 
| 7 | 
            +
              gem.version       = "1.7.3"
         | 
| 8 8 | 
             
              gem.authors       = ["Steven Adams", "Frank Reno"]
         | 
| 9 9 | 
             
              gem.email         = ["stevezau@gmail.com", "frank.reno@me.com"]
         | 
| 10 10 | 
             
              gem.description   = %q{Output plugin to SumoLogic HTTP Endpoint}
         | 
| @@ -1,5 +1,6 @@ | |
| 1 1 | 
             
            require 'fluent/plugin/output'
         | 
| 2 2 | 
             
            require 'net/https'
         | 
| 3 | 
            +
            require 'json'
         | 
| 3 4 | 
             
            require 'yajl'
         | 
| 4 5 | 
             
            require 'httpclient'
         | 
| 5 6 | 
             
            require 'zlib'
         | 
| @@ -12,10 +13,10 @@ class SumologicConnection | |
| 12 13 | 
             
              COMPRESS_DEFLATE = 'deflate'
         | 
| 13 14 | 
             
              COMPRESS_GZIP = 'gzip'
         | 
| 14 15 |  | 
| 15 | 
            -
              def initialize(endpoint, verify_ssl, connect_timeout, proxy_uri, disable_cookies, sumo_client, compress_enabled, compress_encoding)
         | 
| 16 | 
            +
              def initialize(endpoint, verify_ssl, connect_timeout, send_timeout, proxy_uri, disable_cookies, sumo_client, compress_enabled, compress_encoding)
         | 
| 16 17 | 
             
                @endpoint = endpoint
         | 
| 17 18 | 
             
                @sumo_client = sumo_client
         | 
| 18 | 
            -
                create_http_client(verify_ssl, connect_timeout, proxy_uri, disable_cookies)
         | 
| 19 | 
            +
                create_http_client(verify_ssl, connect_timeout, send_timeout, proxy_uri, disable_cookies)
         | 
| 19 20 | 
             
                @compress = compress_enabled
         | 
| 20 21 | 
             
                @compress_encoding = (compress_encoding ||= COMPRESS_GZIP).downcase
         | 
| 21 22 |  | 
| @@ -69,10 +70,11 @@ class SumologicConnection | |
| 69 70 | 
             
                verify_ssl==true ? OpenSSL::SSL::VERIFY_PEER : OpenSSL::SSL::VERIFY_NONE
         | 
| 70 71 | 
             
              end
         | 
| 71 72 |  | 
| 72 | 
            -
              def create_http_client(verify_ssl, connect_timeout, proxy_uri, disable_cookies)
         | 
| 73 | 
            +
              def create_http_client(verify_ssl, connect_timeout, send_timeout, proxy_uri, disable_cookies)
         | 
| 73 74 | 
             
                @http                        = HTTPClient.new(proxy_uri)
         | 
| 74 75 | 
             
                @http.ssl_config.verify_mode = ssl_options(verify_ssl)
         | 
| 75 76 | 
             
                @http.connect_timeout        = connect_timeout
         | 
| 77 | 
            +
                @http.send_timeout           = send_timeout
         | 
| 76 78 | 
             
                if disable_cookies
         | 
| 77 79 | 
             
                  @http.cookie_manager       = nil
         | 
| 78 80 | 
             
                end
         | 
| @@ -126,6 +128,7 @@ class Fluent::Plugin::Sumologic < Fluent::Plugin::Output | |
| 126 128 | 
             
              config_param :verify_ssl, :bool, :default => true
         | 
| 127 129 | 
             
              config_param :delimiter, :string, :default => "."
         | 
| 128 130 | 
             
              config_param :open_timeout, :integer, :default => 60
         | 
| 131 | 
            +
              config_param :send_timeout, :integer, :default => 120
         | 
| 129 132 | 
             
              config_param :add_timestamp, :bool, :default => true
         | 
| 130 133 | 
             
              config_param :timestamp_key, :string, :default => 'timestamp'
         | 
| 131 134 | 
             
              config_param :proxy_uri, :string, :default => nil
         | 
| @@ -210,6 +213,7 @@ class Fluent::Plugin::Sumologic < Fluent::Plugin::Output | |
| 210 213 | 
             
                  conf['endpoint'],
         | 
| 211 214 | 
             
                  conf['verify_ssl'],
         | 
| 212 215 | 
             
                  conf['open_timeout'].to_i,
         | 
| 216 | 
            +
                  conf['send_timeout'].to_i,
         | 
| 213 217 | 
             
                  conf['proxy_uri'],
         | 
| 214 218 | 
             
                  conf['disable_cookies'],
         | 
| 215 219 | 
             
                  conf['sumo_client'],
         | 
| @@ -249,8 +253,7 @@ class Fluent::Plugin::Sumologic < Fluent::Plugin::Output | |
| 249 253 | 
             
              def dump_log(log)
         | 
| 250 254 | 
             
                log.delete('_sumo_metadata')
         | 
| 251 255 | 
             
                begin
         | 
| 252 | 
            -
                   | 
| 253 | 
            -
                  hash = parser.parse(log[@log_key])
         | 
| 256 | 
            +
                  hash = JSON.parse(log[@log_key])
         | 
| 254 257 | 
             
                  log[@log_key] = hash
         | 
| 255 258 | 
             
                  Yajl.dump(log)
         | 
| 256 259 | 
             
                rescue
         | 
| @@ -713,4 +713,88 @@ class SumologicOutput < Test::Unit::TestCase | |
| 713 713 | 
             
                                 times:1
         | 
| 714 714 | 
             
              end
         | 
| 715 715 |  | 
| 716 | 
            +
              def test_emit_fields_string_based
         | 
| 717 | 
            +
                config = %{
         | 
| 718 | 
            +
                  endpoint        https://collectors.sumologic.com/v1/receivers/http/1234
         | 
| 719 | 
            +
                  log_format      fields
         | 
| 720 | 
            +
                  source_category test
         | 
| 721 | 
            +
                  source_host     test
         | 
| 722 | 
            +
                  source_name     test
         | 
| 723 | 
            +
              
         | 
| 724 | 
            +
                }
         | 
| 725 | 
            +
                driver = create_driver(config)
         | 
| 726 | 
            +
                time = event_time
         | 
| 727 | 
            +
                stub_request(:post, 'https://collectors.sumologic.com/v1/receivers/http/1234')
         | 
| 728 | 
            +
                driver.run do
         | 
| 729 | 
            +
                  driver.feed("output.test", time, {'message' => '{"foo": "bar", "message": "test"}'})
         | 
| 730 | 
            +
                end
         | 
| 731 | 
            +
                assert_requested :post, "https://collectors.sumologic.com/v1/receivers/http/1234",
         | 
| 732 | 
            +
                                 headers: {'X-Sumo-Category'=>'test', 'X-Sumo-Client'=>'fluentd-output', 'X-Sumo-Host'=>'test', 'X-Sumo-Name'=>'test'},
         | 
| 733 | 
            +
                                 body: /\A{"timestamp":\d+.,"message":{"foo":"bar","message":"test"}}\z/,
         | 
| 734 | 
            +
                                 times:1
         | 
| 735 | 
            +
              end
         | 
| 736 | 
            +
              
         | 
| 737 | 
            +
              def test_emit_fields_invalid_json_string_based_1
         | 
| 738 | 
            +
                config = %{
         | 
| 739 | 
            +
                  endpoint        https://collectors.sumologic.com/v1/receivers/http/1234
         | 
| 740 | 
            +
                  log_format      fields
         | 
| 741 | 
            +
                  source_category test
         | 
| 742 | 
            +
                  source_host     test
         | 
| 743 | 
            +
                  source_name     test
         | 
| 744 | 
            +
              
         | 
| 745 | 
            +
                }
         | 
| 746 | 
            +
                driver = create_driver(config)
         | 
| 747 | 
            +
                time = event_time
         | 
| 748 | 
            +
                stub_request(:post, 'https://collectors.sumologic.com/v1/receivers/http/1234')
         | 
| 749 | 
            +
                driver.run do
         | 
| 750 | 
            +
                  driver.feed("output.test", time, {'message' => '{"foo": "bar", "message": "test"'})
         | 
| 751 | 
            +
                end
         | 
| 752 | 
            +
                assert_requested :post, "https://collectors.sumologic.com/v1/receivers/http/1234",
         | 
| 753 | 
            +
                                 headers: {'X-Sumo-Category'=>'test', 'X-Sumo-Client'=>'fluentd-output', 'X-Sumo-Host'=>'test', 'X-Sumo-Name'=>'test'},
         | 
| 754 | 
            +
                                 body: /\A{"timestamp":\d+.,"message":"{\\"foo\\": \\"bar\\", \\"message\\": \\"test\\""}\z/,
         | 
| 755 | 
            +
                                 times:1
         | 
| 756 | 
            +
              end
         | 
| 757 | 
            +
              
         | 
| 758 | 
            +
              def test_emit_fields_invalid_json_string_based_2
         | 
| 759 | 
            +
                config = %{
         | 
| 760 | 
            +
                  endpoint        https://collectors.sumologic.com/v1/receivers/http/1234
         | 
| 761 | 
            +
                  log_format      fields
         | 
| 762 | 
            +
                  source_category test
         | 
| 763 | 
            +
                  source_host     test
         | 
| 764 | 
            +
                  source_name     test
         | 
| 765 | 
            +
              
         | 
| 766 | 
            +
                }
         | 
| 767 | 
            +
                driver = create_driver(config)
         | 
| 768 | 
            +
                time = event_time
         | 
| 769 | 
            +
                stub_request(:post, 'https://collectors.sumologic.com/v1/receivers/http/1234')
         | 
| 770 | 
            +
                driver.run do
         | 
| 771 | 
            +
                  driver.feed("output.test", time, {'message' => '{"foo": "bar", "message"'})
         | 
| 772 | 
            +
                end
         | 
| 773 | 
            +
                assert_requested :post, "https://collectors.sumologic.com/v1/receivers/http/1234",
         | 
| 774 | 
            +
                                 headers: {'X-Sumo-Category'=>'test', 'X-Sumo-Client'=>'fluentd-output', 'X-Sumo-Host'=>'test', 'X-Sumo-Name'=>'test'},
         | 
| 775 | 
            +
                                 body: /\A{"timestamp":\d+.,"message":"{\\"foo\\": \\"bar\\", \\"message\\""}\z/,
         | 
| 776 | 
            +
                                 times:1
         | 
| 777 | 
            +
              end
         | 
| 778 | 
            +
              
         | 
| 779 | 
            +
              def test_emit_fields_invalid_json_string_based_3
         | 
| 780 | 
            +
                config = %{
         | 
| 781 | 
            +
                  endpoint        https://collectors.sumologic.com/v1/receivers/http/1234
         | 
| 782 | 
            +
                  log_format      fields
         | 
| 783 | 
            +
                  source_category test
         | 
| 784 | 
            +
                  source_host     test
         | 
| 785 | 
            +
                  source_name     test
         | 
| 786 | 
            +
              
         | 
| 787 | 
            +
                }
         | 
| 788 | 
            +
                driver = create_driver(config)
         | 
| 789 | 
            +
                time = event_time
         | 
| 790 | 
            +
                stub_request(:post, 'https://collectors.sumologic.com/v1/receivers/http/1234')
         | 
| 791 | 
            +
                driver.run do
         | 
| 792 | 
            +
                  driver.feed("output.test", time, {'message' => '"foo\": \"bar\", \"mess'})
         | 
| 793 | 
            +
                end
         | 
| 794 | 
            +
                assert_requested :post, "https://collectors.sumologic.com/v1/receivers/http/1234",
         | 
| 795 | 
            +
                                 headers: {'X-Sumo-Category'=>'test', 'X-Sumo-Client'=>'fluentd-output', 'X-Sumo-Host'=>'test', 'X-Sumo-Name'=>'test'},
         | 
| 796 | 
            +
                                 body: /\A{"timestamp":\d+.,"message":"\\"foo\\\\\\": \\\\\\"bar\\\\\\", \\\\\\"mess"}\z/,
         | 
| 797 | 
            +
                                 times:1
         | 
| 798 | 
            +
              end  
         | 
| 799 | 
            +
             | 
| 716 800 | 
             
            end
         | 
    
        data/vagrant/README.md
    ADDED
    
    | @@ -0,0 +1,43 @@ | |
| 1 | 
            +
            # Vagrant
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            ## Prerequisites
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Please install the following:
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            - [VirtualBox](https://www.virtualbox.org/)
         | 
| 8 | 
            +
            - [Vagrant](https://www.vagrantup.com/)
         | 
| 9 | 
            +
            - [vagrant-disksize](https://github.com/sprotheroe/vagrant-disksize) plugin
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            ### MacOS
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            ```bash
         | 
| 14 | 
            +
            brew cask install virtualbox
         | 
| 15 | 
            +
            brew cask install vagrant
         | 
| 16 | 
            +
            vagrant plugin install vagrant-disksize
         | 
| 17 | 
            +
            ```
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            ## Setting up
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            You can set up the Vagrant environment with just one command:
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            ```bash
         | 
| 24 | 
            +
            vagrant up
         | 
| 25 | 
            +
            ```
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            After successfull installation you can ssh to the virtual machine with:
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            ```bash
         | 
| 30 | 
            +
            vagrant ssh
         | 
| 31 | 
            +
            ```
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            NOTICE: The directory with fluentd-output-sumologic repository on the host is synced with `/sumologic/` directory on the virtual machine.
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            ## Runing tests
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            You can run tests using following commands:
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            ```bash
         | 
| 40 | 
            +
            cd /sumologic
         | 
| 41 | 
            +
            bundle install
         | 
| 42 | 
            +
            bundle exec rake
         | 
| 43 | 
            +
            ```
         | 
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            #!/bin/bash
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            set -x
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            export DEBIAN_FRONTEND=noninteractive
         | 
| 6 | 
            +
            apt-get update
         | 
| 7 | 
            +
            apt-get --yes upgrade
         | 
| 8 | 
            +
            apt-get --yes install apt-transport-https
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            echo "export EDITOR=vim" >> /home/vagrant/.bashrc
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            # Install docker
         | 
| 13 | 
            +
            curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
         | 
| 14 | 
            +
            add-apt-repository \
         | 
| 15 | 
            +
               "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
         | 
| 16 | 
            +
               $(lsb_release -cs) \
         | 
| 17 | 
            +
               stable"
         | 
| 18 | 
            +
            apt-get install -y docker-ce docker-ce-cli containerd.io
         | 
| 19 | 
            +
            usermod -aG docker vagrant
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            # Install make
         | 
| 22 | 
            +
            apt-get install -y make
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            # install requirements for ruby
         | 
| 25 | 
            +
            snap install ruby --channel=2.6/stable --classic
         | 
| 26 | 
            +
            su vagrant -c 'gem install bundler:2.1.4'
         | 
| 27 | 
            +
            apt install -y gcc g++ libsnappy-dev libicu-dev zlib1g-dev cmake pkg-config libssl-dev
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: fluent-plugin-sumologic_output
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.7. | 
| 4 | 
            +
              version: 1.7.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Steven Adams
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 12 | 
            +
            date: 2021-10-19 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: bundler
         | 
| @@ -103,6 +103,7 @@ executables: [] | |
| 103 103 | 
             
            extensions: []
         | 
| 104 104 | 
             
            extra_rdoc_files: []
         | 
| 105 105 | 
             
            files:
         | 
| 106 | 
            +
            - ".github/CODEOWNERS"
         | 
| 106 107 | 
             
            - ".gitignore"
         | 
| 107 108 | 
             
            - ".travis.yml"
         | 
| 108 109 | 
             
            - CHANGELOG.md
         | 
| @@ -110,11 +111,14 @@ files: | |
| 110 111 | 
             
            - LICENSE
         | 
| 111 112 | 
             
            - README.md
         | 
| 112 113 | 
             
            - Rakefile
         | 
| 114 | 
            +
            - Vagrantfile
         | 
| 113 115 | 
             
            - ci/build.sh
         | 
| 114 116 | 
             
            - fluent-plugin-sumologic_output.gemspec
         | 
| 115 117 | 
             
            - lib/fluent/plugin/out_sumologic.rb
         | 
| 116 118 | 
             
            - test/helper.rb
         | 
| 117 119 | 
             
            - test/plugin/test_out_sumologic.rb
         | 
| 120 | 
            +
            - vagrant/README.md
         | 
| 121 | 
            +
            - vagrant/provision.sh
         | 
| 118 122 | 
             
            homepage: https://github.com/SumoLogic/fluentd-output-sumologic
         | 
| 119 123 | 
             
            licenses:
         | 
| 120 124 | 
             
            - Apache-2.0
         |