logstash-output-influxdb2 0.2.0 → 0.4.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/logstash/outputs/influxdb2.rb +18 -23
- data/logstash-output-influxdb2.gemspec +1 -1
- data/spec/outputs/influxdb2_spec.rb +52 -21
- 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: 3dfd75d3189d4c6d414de1de45c4bc1cc238edab17b80c46f5854b69d40bf2a2
         | 
| 4 | 
            +
              data.tar.gz: 016e508f44b388e632fa97a06fb8643691083b174495261305e48285d645da27
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 8dc471f8845297d388f0cec6954da91b4d43149119df5bc5fa6c1a92fb3be740b523352728a95acf4f01159d95d0b21c0c3494dfacceb7219eed1593f9bf8abc
         | 
| 7 | 
            +
              data.tar.gz: 3841350260e5bb965517caa45ce513a047dd6ec3046f0ff54c3e7703709158c3c5fd6eef4aef01297c9d22feeaaa7a963d15783941f93d43ac3eb9156f4e4b72
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
| @@ -14,12 +14,9 @@ class LogStash::Outputs::InfluxDB2 < LogStash::Outputs::Base | |
| 14 14 | 
             
              config :write_options, :validate => :hash, :default => {}
         | 
| 15 15 |  | 
| 16 16 | 
             
              config :measurement, :validate => :string, :required => true
         | 
| 17 | 
            -
              config :tags, :validate => :string | 
| 17 | 
            +
              config :tags, :validate => :string
         | 
| 18 18 | 
             
              config :fields, :validate => :string, :required => true
         | 
| 19 19 |  | 
| 20 | 
            -
              config :include_tags, :validate => :string, :list => true, :default => []
         | 
| 21 | 
            -
              config :exclude_tags, :validate => :string, :list => true, :default => []
         | 
| 22 | 
            -
             | 
| 23 20 | 
             
              config :escape_value, :validate => :boolean, :default => false
         | 
| 24 21 |  | 
| 25 22 | 
             
              public
         | 
| @@ -32,26 +29,24 @@ class LogStash::Outputs::InfluxDB2 < LogStash::Outputs::Base | |
| 32 29 |  | 
| 33 30 | 
             
              public
         | 
| 34 31 | 
             
              def receive(event)
         | 
| 35 | 
            -
                 | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
                   | 
| 43 | 
            -
                  fields = event.get(@fields)
         | 
| 44 | 
            -
                  unless @escape_value
         | 
| 45 | 
            -
                    fields = fields.transform_values { |v| ToStr.new(v) }
         | 
| 46 | 
            -
                  end
         | 
| 47 | 
            -
                  @write_api.write(data: InfluxDB2::Point.new(
         | 
| 48 | 
            -
                    name: event.sprintf(@measurement), tags: tags, fields: fields,
         | 
| 49 | 
            -
                    time: event.timestamp.time, precision: @precision))
         | 
| 50 | 
            -
                rescue InfluxDB2::InfluxError => ie
         | 
| 51 | 
            -
                  @logger.warn("HTTP communication error while writing to InfluxDB", :exception => ie)
         | 
| 52 | 
            -
                rescue Exception => e
         | 
| 53 | 
            -
                  @logger.warn("Non recoverable exception while writing to InfluxDB", :exception => e)
         | 
| 32 | 
            +
                fields = event.get(@fields)
         | 
| 33 | 
            +
                return unless fields.is_a?(Hash) && ! fields.empty?
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                tags = @tags.nil? ? nil : event.get(@tags)
         | 
| 36 | 
            +
                return unless tags.nil? || tags.is_a?(Hash)
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                unless @escape_value
         | 
| 39 | 
            +
                  fields = fields.transform_values { |v| ToStr.new(v) }
         | 
| 54 40 | 
             
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                @write_api.write(data: InfluxDB2::Point.new(
         | 
| 43 | 
            +
                  name: event.sprintf(@measurement), tags: tags, fields: fields,
         | 
| 44 | 
            +
                  time: event.timestamp.time, precision: @precision))
         | 
| 45 | 
            +
             | 
| 46 | 
            +
              rescue InfluxDB2::InfluxError => ie
         | 
| 47 | 
            +
                @logger.warn("HTTP communication error while writing to InfluxDB", :exception => ie)
         | 
| 48 | 
            +
              rescue Exception => e
         | 
| 49 | 
            +
                @logger.warn("Non recoverable exception while writing to InfluxDB", :exception => e)
         | 
| 55 50 | 
             
              end # def event
         | 
| 56 51 |  | 
| 57 52 | 
             
              def close
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            Gem::Specification.new do |s|
         | 
| 2 2 | 
             
              s.name          = 'logstash-output-influxdb2'
         | 
| 3 | 
            -
              s.version       = '0. | 
| 3 | 
            +
              s.version       = '0.4.0'
         | 
| 4 4 | 
             
              s.licenses      = ['Apache-2.0']
         | 
| 5 5 | 
             
              s.summary       = 'Writes metrics to InfluxDB 2.x'
         | 
| 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 gemname. This gem is not a stand-alone program'
         | 
| @@ -14,7 +14,6 @@ describe LogStash::Outputs::InfluxDB2 do | |
| 14 14 | 
             
                  "url" => "http://localhost:8086",
         | 
| 15 15 | 
             
                  "token" => "token123",
         | 
| 16 16 | 
             
                  "measurement" => "%{[kubernetes][labels][app]}",
         | 
| 17 | 
            -
                  "tags" => "[prometheus][labels]",
         | 
| 18 17 | 
             
                  "fields" => "[prometheus][metrics]"
         | 
| 19 18 | 
             
                }
         | 
| 20 19 | 
             
                end
         | 
| @@ -56,10 +55,8 @@ describe LogStash::Outputs::InfluxDB2 do | |
| 56 55 | 
             
                  expect(write_options.batch_abort_on_exception).to be false
         | 
| 57 56 |  | 
| 58 57 | 
             
                  expect(subject.instance_variable_get(:@measurement)).to eq "%{[kubernetes][labels][app]}"
         | 
| 59 | 
            -
                  expect(subject.instance_variable_get(:@tags)).to  | 
| 58 | 
            +
                  expect(subject.instance_variable_get(:@tags)).to be_nil
         | 
| 60 59 | 
             
                  expect(subject.instance_variable_get(:@fields)).to eq "[prometheus][metrics]"
         | 
| 61 | 
            -
                  expect(subject.instance_variable_get(:@include_tags)).to eq []
         | 
| 62 | 
            -
                  expect(subject.instance_variable_get(:@exclude_tags)).to eq []
         | 
| 63 60 | 
             
                  expect(subject.instance_variable_get(:@escape_value)).to be false
         | 
| 64 61 | 
             
                end
         | 
| 65 62 |  | 
| @@ -100,8 +97,6 @@ describe LogStash::Outputs::InfluxDB2 do | |
| 100 97 | 
             
                  "measurement" => "%{[kubernetes][labels][app]}",
         | 
| 101 98 | 
             
                  "tags" => "[prometheus][labels]",
         | 
| 102 99 | 
             
                  "fields" => "[prometheus][metrics]",
         | 
| 103 | 
            -
                  "include_tags" => [ "foo", "abc" ],
         | 
| 104 | 
            -
                  "exclude_tags" => [ "bar", "xyz" ],
         | 
| 105 100 | 
             
                  "escape_value" => true
         | 
| 106 101 | 
             
                }
         | 
| 107 102 | 
             
                end
         | 
| @@ -145,8 +140,6 @@ describe LogStash::Outputs::InfluxDB2 do | |
| 145 140 | 
             
                  expect(subject.instance_variable_get(:@measurement)).to eq "%{[kubernetes][labels][app]}"
         | 
| 146 141 | 
             
                  expect(subject.instance_variable_get(:@tags)).to eq "[prometheus][labels]"
         | 
| 147 142 | 
             
                  expect(subject.instance_variable_get(:@fields)).to eq "[prometheus][metrics]"
         | 
| 148 | 
            -
                  expect(subject.instance_variable_get(:@include_tags)).to eq [ "foo", "abc" ]
         | 
| 149 | 
            -
                  expect(subject.instance_variable_get(:@exclude_tags)).to eq [ "bar", "xyz" ]
         | 
| 150 143 | 
             
                  expect(subject.instance_variable_get(:@escape_value)).to be true
         | 
| 151 144 | 
             
                end
         | 
| 152 145 |  | 
| @@ -288,7 +281,7 @@ describe LogStash::Outputs::InfluxDB2 do | |
| 288 281 |  | 
| 289 282 | 
             
              end
         | 
| 290 283 |  | 
| 291 | 
            -
              context "validate payload -  | 
| 284 | 
            +
              context "validate payload - invalid event" do
         | 
| 292 285 |  | 
| 293 286 | 
             
                let(:config) do
         | 
| 294 287 | 
             
                {
         | 
| @@ -297,10 +290,7 @@ describe LogStash::Outputs::InfluxDB2 do | |
| 297 290 | 
             
                  "options" => { "bucket" => "test-bucket", "org" => "test-org", "precision" => "ms" },
         | 
| 298 291 | 
             
                  "measurement" => "%{[kubernetes][labels][app]}",
         | 
| 299 292 | 
             
                  "tags" => "[prometheus][labels]",
         | 
| 300 | 
            -
                  "fields" => "[prometheus][metrics]" | 
| 301 | 
            -
                  "include_tags" => [ "foo", "abc", "test" ],
         | 
| 302 | 
            -
                  "exclude_tags" => [ "bar", "xyz", "test" ],
         | 
| 303 | 
            -
                  "escape_value" => true
         | 
| 293 | 
            +
                  "fields" => "[prometheus][metrics]"
         | 
| 304 294 | 
             
                }
         | 
| 305 295 | 
             
                end
         | 
| 306 296 |  | 
| @@ -314,12 +304,53 @@ describe LogStash::Outputs::InfluxDB2 do | |
| 314 304 | 
             
                    "@timestamp" => "2020-01-01T00:00:00Z",
         | 
| 315 305 | 
             
                    "kubernetes" => { "labels" => { "app" => "dummy" } },
         | 
| 316 306 | 
             
                    "prometheus" => {
         | 
| 317 | 
            -
                      "labels" => {
         | 
| 318 | 
            -
             | 
| 319 | 
            -
             | 
| 320 | 
            -
             | 
| 321 | 
            -
             | 
| 322 | 
            -
             | 
| 307 | 
            +
                      "labels" => { "foo" => "bar", "abc" => "xyz" }
         | 
| 308 | 
            +
                      # Invalid: no metrics!
         | 
| 309 | 
            +
                    }
         | 
| 310 | 
            +
                  ))
         | 
| 311 | 
            +
             | 
| 312 | 
            +
                  subject.receive(LogStash::Event.new(
         | 
| 313 | 
            +
                    "@timestamp" => "2020-01-01T00:00:00Z",
         | 
| 314 | 
            +
                    "kubernetes" => { "labels" => { "app" => "dummy" } },
         | 
| 315 | 
            +
                    "prometheus" => {
         | 
| 316 | 
            +
                      "labels" => { "foo" => "bar", "abc" => "xyz" },
         | 
| 317 | 
            +
                      "metrics" => {}  # Invalid: no metrics!
         | 
| 318 | 
            +
                    }
         | 
| 319 | 
            +
                  ))
         | 
| 320 | 
            +
             | 
| 321 | 
            +
                  subject.receive(LogStash::Event.new(
         | 
| 322 | 
            +
                    "@timestamp" => "2020-01-01T00:00:00Z",
         | 
| 323 | 
            +
                    "kubernetes" => { "labels" => { "app" => "dummy" } },
         | 
| 324 | 
            +
                    "prometheus" => {
         | 
| 325 | 
            +
                      "labels" => { "foo" => "bar", "abc" => "xyz" },
         | 
| 326 | 
            +
                      "metrics" => 123.0  # Invalid: metrics are not a hash!
         | 
| 327 | 
            +
                    }
         | 
| 328 | 
            +
                  ))
         | 
| 329 | 
            +
             | 
| 330 | 
            +
                  subject.receive(LogStash::Event.new(
         | 
| 331 | 
            +
                    "@timestamp" => "2020-01-01T00:00:00Z",
         | 
| 332 | 
            +
                    "kubernetes" => { "labels" => { "app" => "dummy" } },
         | 
| 333 | 
            +
                    "prometheus" => {
         | 
| 334 | 
            +
                      # Valid: no labels!
         | 
| 335 | 
            +
                      "metrics" => { "count" => 123.0 }
         | 
| 336 | 
            +
                    }
         | 
| 337 | 
            +
                  ))
         | 
| 338 | 
            +
             | 
| 339 | 
            +
                  subject.receive(LogStash::Event.new(
         | 
| 340 | 
            +
                    "@timestamp" => "2020-01-01T00:00:00Z",
         | 
| 341 | 
            +
                    "kubernetes" => { "labels" => { "app" => "dummy" } },
         | 
| 342 | 
            +
                    "prometheus" => {
         | 
| 343 | 
            +
                      "labels" => {},  # Valid: no labels!
         | 
| 344 | 
            +
                      "metrics" => { "count" => 123.0 }
         | 
| 345 | 
            +
                    }
         | 
| 346 | 
            +
                  ))
         | 
| 347 | 
            +
             | 
| 348 | 
            +
                  subject.receive(LogStash::Event.new(
         | 
| 349 | 
            +
                    "@timestamp" => "2020-01-01T00:00:00Z",
         | 
| 350 | 
            +
                    "kubernetes" => { "labels" => { "app" => "dummy" } },
         | 
| 351 | 
            +
                    "prometheus" => {
         | 
| 352 | 
            +
                      "labels" => "test",  # Invalid: labels are not a hash!
         | 
| 353 | 
            +
                      "metrics" => { "count" => 123.0 }
         | 
| 323 354 | 
             
                    }
         | 
| 324 355 | 
             
                  ))
         | 
| 325 356 |  | 
| @@ -330,8 +361,8 @@ describe LogStash::Outputs::InfluxDB2 do | |
| 330 361 | 
             
                  write_api = subject.instance_variable_get(:@write_api)
         | 
| 331 362 |  | 
| 332 363 | 
             
                  expect(write_api).to have_received(:write_raw)
         | 
| 333 | 
            -
                    .with('dummy | 
| 334 | 
            -
                          {:bucket=>"test-bucket", :org=>"test-org", :precision=>"ms"})
         | 
| 364 | 
            +
                    .with('dummy count=123.0 1577836800000',
         | 
| 365 | 
            +
                          {:bucket=>"test-bucket", :org=>"test-org", :precision=>"ms"}).twice
         | 
| 335 366 | 
             
                end
         | 
| 336 367 |  | 
| 337 368 | 
             
              end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: logstash-output-influxdb2
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.4.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Issey Yamakoshi
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023-11- | 
| 11 | 
            +
            date: 2023-11-23 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: logstash-core-plugin-api
         |