riemann-client 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 395c52ac148f9988953268a74e1e747c415e3b80c75e7e0cfef536d7f44a2d36
4
- data.tar.gz: 81051904aef015898e9abde73a6bdf2cde446cec0ed8712b0a2cd569d1a62f50
3
+ metadata.gz: 33657c1dcec6dce903bd90154f17f3a31174b6e0fa146609941dc36960c2b6e2
4
+ data.tar.gz: 372a73585a2046e5af3a16ddd84254af64e6f6d17c6911183cf6c408eb22ac07
5
5
  SHA512:
6
- metadata.gz: d016e54a3881d70914163c88506da3936f47c6c3390f092eb1a2a179c1cd1034984337d81ecbbefdcef01019efa168f8d93662918c67125f31245cffa471b1f5
7
- data.tar.gz: 330ea26290403c97dd44ac1b0d04b72ea9bebd27a147f00c0135ce9d46a09c01c4f8271daaa3c118a2feeebb84603d6dde77066ee5a994e6c7c32e8e2eb1c89a
6
+ metadata.gz: 694404b98fe75bb304f8d8da0903eb128d2600ecd83bc3b6c3d4e2b41eef2695a82e6df00c0f9c3a59115837e58314e6cdb88d56c1b10c959bd912d69ace479c
7
+ data.tar.gz: 874fdd45638f808e1bf9641616fe5342c01c3a51245f9d66542a9aec60751a093462e70c123e027a463dcedfcb608dfc98087ae4ad189fd02aa97210b8e90fdd
@@ -0,0 +1,11 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for all configuration options:
4
+ # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5
+
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: "bundler" # See documentation for possible values
9
+ directory: "/" # Location of package manifests
10
+ schedule:
11
+ interval: "daily"
@@ -13,7 +13,7 @@ jobs:
13
13
  lint:
14
14
  runs-on: ubuntu-latest
15
15
  steps:
16
- - uses: actions/checkout@v2
16
+ - uses: actions/checkout@v3
17
17
  - name: Setup ruby
18
18
  uses: ruby/setup-ruby@v1
19
19
  with:
@@ -27,12 +27,13 @@ jobs:
27
27
  strategy:
28
28
  matrix:
29
29
  ruby-version:
30
- - 2.6
31
- - 2.7
32
- - 3.0
33
- - 3.1
30
+ - '2.6'
31
+ - '2.7'
32
+ - '3.0'
33
+ - '3.1'
34
+ - '3.2'
34
35
  steps:
35
- - uses: actions/checkout@v2
36
+ - uses: actions/checkout@v3
36
37
  - name: Setup Ruby
37
38
  uses: ruby/setup-ruby@v1
38
39
  with:
@@ -55,4 +56,4 @@ jobs:
55
56
 
56
57
  while ! nc -z localhost 5555; do sleep 1; done
57
58
  - name: Run the test suite
58
- run: bundle exec bacon spec/*.rb
59
+ run: bundle exec rspec
@@ -0,0 +1,72 @@
1
+ # For most projects, this workflow file will not need changing; you simply need
2
+ # to commit it to your repository.
3
+ #
4
+ # You may wish to alter this file to override the set of languages analyzed,
5
+ # or to provide custom queries or build logic.
6
+ #
7
+ # ******** NOTE ********
8
+ # We have attempted to detect the languages in your repository. Please check
9
+ # the `language` matrix defined below to confirm you have the correct set of
10
+ # supported CodeQL languages.
11
+ #
12
+ name: "CodeQL"
13
+
14
+ on:
15
+ push:
16
+ branches: [ "main" ]
17
+ pull_request:
18
+ # The branches below must be a subset of the branches above
19
+ branches: [ "main" ]
20
+ schedule:
21
+ - cron: '33 17 * * 6'
22
+
23
+ jobs:
24
+ analyze:
25
+ name: Analyze
26
+ runs-on: ubuntu-latest
27
+ permissions:
28
+ actions: read
29
+ contents: read
30
+ security-events: write
31
+
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ language: [ 'ruby' ]
36
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
37
+ # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
38
+
39
+ steps:
40
+ - name: Checkout repository
41
+ uses: actions/checkout@v3
42
+
43
+ # Initializes the CodeQL tools for scanning.
44
+ - name: Initialize CodeQL
45
+ uses: github/codeql-action/init@v2
46
+ with:
47
+ languages: ${{ matrix.language }}
48
+ # If you wish to specify custom queries, you can do so here or in a config file.
49
+ # By default, queries listed here will override any specified in a config file.
50
+ # Prefix the list here with "+" to use these queries and those in the config file.
51
+
52
+ # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
53
+ # queries: security-extended,security-and-quality
54
+
55
+
56
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
57
+ # If this step fails, then you should remove it and run the build manually (see below)
58
+ - name: Autobuild
59
+ uses: github/codeql-action/autobuild@v2
60
+
61
+ # ℹ️ Command-line programs to run using the OS shell.
62
+ # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
63
+
64
+ # If the Autobuild fails above, remove it and uncomment the following three lines.
65
+ # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
66
+
67
+ # - run: |
68
+ # echo "Run, Build Application using script"
69
+ # ./location_of_script_within_repo/buildscript.sh
70
+
71
+ - name: Perform CodeQL Analysis
72
+ uses: github/codeql-action/analyze@v2
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --require spec_helper
2
+ --format doc
data/.rubocop.yml CHANGED
@@ -1,4 +1,6 @@
1
1
  ---
2
+ require:
3
+ - rubocop-rspec
2
4
  Metrics/AbcSize:
3
5
  Enabled: false
4
6
  Metrics/BlockLength:
data/CHANGELOG.md CHANGED
@@ -1,8 +1,26 @@
1
1
  # Changelog
2
2
 
3
- ## [1.0.1](https://github.com/riemann/riemann-ruby-client/tree/1.0.1) (2022-06-25)
3
+ ## [v1.1.0](https://github.com/riemann/riemann-ruby-client/tree/v1.1.0) (2023-01-23)
4
4
 
5
- [Full Changelog](https://github.com/riemann/riemann-ruby-client/compare/v1.0.0...1.0.1)
5
+ [Full Changelog](https://github.com/riemann/riemann-ruby-client/compare/v1.0.1...v1.1.0)
6
+
7
+ **Implemented enhancements:**
8
+
9
+ - Add support for sending events in bulk [\#44](https://github.com/riemann/riemann-ruby-client/pull/44) ([smortex](https://github.com/smortex))
10
+
11
+ **Fixed bugs:**
12
+
13
+ - Fix UDP fallback to TCP on large messages [\#46](https://github.com/riemann/riemann-ruby-client/pull/46) ([smortex](https://github.com/smortex))
14
+
15
+ **Merged pull requests:**
16
+
17
+ - Modernize unit tests [\#45](https://github.com/riemann/riemann-ruby-client/pull/45) ([smortex](https://github.com/smortex))
18
+ - Switch from Bacon to RSpec [\#43](https://github.com/riemann/riemann-ruby-client/pull/43) ([smortex](https://github.com/smortex))
19
+ - Create codeql-analysis.yml [\#40](https://github.com/riemann/riemann-ruby-client/pull/40) ([jamtur01](https://github.com/jamtur01))
20
+
21
+ ## [v1.0.1](https://github.com/riemann/riemann-ruby-client/tree/v1.0.1) (2022-06-25)
22
+
23
+ [Full Changelog](https://github.com/riemann/riemann-ruby-client/compare/v1.0.0...v1.0.1)
6
24
 
7
25
  **Merged pull requests:**
8
26
 
data/Rakefile CHANGED
@@ -10,6 +10,6 @@ GitHubChangelogGenerator::RakeTask.new :changelog do |config|
10
10
  config.user = 'riemann'
11
11
  config.project = 'riemann-ruby-client'
12
12
  config.exclude_labels = ['skip-changelog']
13
- config.future_release = Riemann::VERSION
13
+ config.future_release = "v#{Riemann::VERSION}"
14
14
  config.add_issues_wo_labels = false
15
15
  end
data/SECURITY.md ADDED
@@ -0,0 +1,42 @@
1
+ # Riemann Security and Disclosure Information
2
+ This page describes Riemann security and disclosure information.
3
+
4
+ ## Supported Versions
5
+
6
+ The currently supported version of Riemann for security-patching purposes is always the latest version.
7
+
8
+ ## Security Announcements
9
+
10
+ Will be made on the [Riemann mailing list](https://groups.google.com/g/riemann-users?pli=1).
11
+
12
+ ## Report a Vulnerability
13
+
14
+ We're extremely grateful for security researchers and users that report vulnerabilities to Riemann. All reports are thoroughly investigated by the maintainers.
15
+
16
+ To make a report, you should email the private security@riemann.io list with the details.
17
+
18
+ ## When Should I Report a Vulnerability?
19
+
20
+ * You think you discovered a potential security vulnerability in Riemann.
21
+ * You are unsure how a vulnerability affects Riemann.
22
+ * You think you discovered a vulnerability in another project that Riemann depends on
23
+
24
+ For projects with their own vulnerability reporting and disclosure process, please report it directly there.
25
+
26
+ ## When Should I NOT Report a Vulnerability?
27
+
28
+ * You need help tuning Riemann components for security
29
+ * You need help applying security related updates
30
+ * Your issue is not security related
31
+
32
+ ## Security Vulnerability Response
33
+
34
+ Each report is acknowledged and analyzed within 5 working days.
35
+
36
+ Any vulnerability information shared stays within Riemann project and will not be disseminated to other projects unless it is necessary to get the issue fixed.
37
+
38
+ As the security issue moves from triage, to identified fix, to release planning we will keep the reporter updated.
39
+
40
+ ## Public Disclosure Timing
41
+
42
+ A public disclosure date is negotiated by the Riemann maintainers nd the bug submitter. We prefer to fully disclose the bug as soon as possible once a user mitigation is available. It is reasonable to delay disclosure when the bug or the fix is not yet fully understood, the solution is not well-tested, or for vendor coordination. The timeframe for disclosure is from immediate (especially if it's already publicly known) to a few weeks. For a vulnerability with a straightforward mitigation, we expect report date to disclosure date to be on the order of 7 days. The Riemann maintainers hold the final say when setting a disclosure date.
@@ -328,7 +328,7 @@ module Riemann
328
328
  #
329
329
  # returns nothing
330
330
  def write(buf)
331
- until buf.nil? || buf.length.zero?
331
+ until buf.nil? || buf.empty?
332
332
  written = socket.write_nonblock(buf)
333
333
  buf = buf[written, buf.length]
334
334
  end
@@ -52,22 +52,42 @@ module Riemann
52
52
  end
53
53
 
54
54
  # Send a state
55
- def <<(event_opts)
55
+ def <<(event)
56
56
  # Create state
57
- case event_opts
58
- when Riemann::State
59
- event = event_opts
60
- when Riemann::Event
61
- event = event_opts
57
+ case event
58
+ when Riemann::State, Riemann::Event, Hash
59
+ # Noop
62
60
  else
63
- event_opts[:host] = Socket.gethostname unless event_opts.include? :host
64
- event = Riemann::Event.new(event_opts)
61
+ raise(ArgumentError, "Unsupported event class: #{event.class.name}")
65
62
  end
66
63
 
67
- message = Riemann::Message.new events: [event]
64
+ bulk_send([event])
65
+ end
66
+
67
+ def bulk_send(events)
68
+ raise ArgumentError unless events.is_a?(Array)
69
+
70
+ message = Riemann::Message.new(events: normalize_events(events))
68
71
 
69
- # Transmit
70
- send_maybe_recv message
72
+ send_maybe_recv(message)
73
+ end
74
+
75
+ def normalize_events(events)
76
+ events.map do |event|
77
+ case event
78
+ when Riemann::State, Riemann::Event
79
+ event
80
+ when Hash
81
+ e = if event.include?(:host)
82
+ event
83
+ else
84
+ event.dup.merge(host: Socket.gethostname)
85
+ end
86
+ Riemann::Event.new(e)
87
+ else
88
+ raise(ArgumentError, "Unsupported event class: #{event.class.name}")
89
+ end
90
+ end
71
91
  end
72
92
 
73
93
  # Returns an array of states matching query.
@@ -104,7 +124,7 @@ module Riemann
104
124
  def send_maybe_recv(message)
105
125
  @udp.send_maybe_recv(message)
106
126
  rescue TooBig
107
- @tcp.send_maybe_recv(*a)
127
+ @tcp.send_maybe_recv(message)
108
128
  end
109
129
  end
110
130
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Riemann
4
- VERSION = '1.0.1'
4
+ VERSION = '1.1.0'
5
5
  end
@@ -24,9 +24,10 @@ Gem::Specification.new do |spec|
24
24
 
25
25
  spec.required_ruby_version = '>= 2.6.0'
26
26
 
27
- spec.add_development_dependency 'bacon'
28
27
  spec.add_development_dependency 'bundler', '>= 1.3'
28
+ spec.add_development_dependency 'rspec'
29
29
  spec.add_development_dependency 'rubocop'
30
+ spec.add_development_dependency 'rubocop-rspec'
30
31
  spec.add_development_dependency 'timecop'
31
32
 
32
33
  spec.add_dependency 'beefcake', ['>= 1.0.0 ']
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'riemann'
4
+ require 'riemann/client'
5
+
6
+ require 'spec_helper'
7
+ require 'shared_examples'
8
+
9
+ RSpec.describe 'Riemann::Client' do
10
+ let(:client) do
11
+ Riemann::Client.new(host: 'localhost', port: 5555)
12
+ end
13
+
14
+ let(:expected_rate) { 100 }
15
+
16
+ context('with TLS transport') do
17
+ let(:client) do
18
+ Riemann::Client.new(host: 'localhost', port: 5554, ssl: true,
19
+ key_file: '/etc/riemann/riemann_server.pkcs8',
20
+ cert_file: '/etc/riemann/riemann_server.crt',
21
+ ca_file: '/etc/riemann/riemann_server.crt',
22
+ ssl_verify: true)
23
+ end
24
+ let(:client_with_transport) { client.tcp }
25
+
26
+ it_behaves_like 'a riemann client'
27
+ it_behaves_like 'a riemann client that acknowledge messages'
28
+ end
29
+
30
+ context 'with TCP transport' do
31
+ let(:client_with_transport) { client.tcp }
32
+
33
+ it_behaves_like 'a riemann client'
34
+ it_behaves_like 'a riemann client that acknowledge messages'
35
+ end
36
+
37
+ context('with UDP transport') do
38
+ let(:client_with_transport) { client.udp }
39
+ let(:expected_rate) { 1000 }
40
+
41
+ it_behaves_like 'a riemann client'
42
+ it_behaves_like 'a riemann client that does not acknowledge messages'
43
+
44
+ context 'when sending a message too large for UDP transport' do
45
+ let(:large_message) do
46
+ {
47
+ data: 'X' * (Riemann::Client::UDP::MAX_SIZE + 10)
48
+ }
49
+ end
50
+
51
+ before do
52
+ allow(client.udp).to receive(:send_maybe_recv).and_call_original
53
+ allow(client.tcp).to receive(:send_maybe_recv).and_call_original
54
+ client << large_message
55
+ end
56
+
57
+ it 'has tried to send the message using UDP' do
58
+ expect(client.udp).to have_received(:send_maybe_recv)
59
+ end
60
+
61
+ it 'has retried to send the message using TCP' do
62
+ expect(client.tcp).to have_received(:send_maybe_recv)
63
+ end
64
+ end
65
+ end
66
+ end