logstash-output-sumologic 1.2.2 → 1.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.
@@ -1,9 +1,13 @@
1
1
  # encoding: utf-8
2
2
  require "logstash/devutils/rspec/spec_helper"
3
3
  require "logstash/outputs/sumologic"
4
+ include LogStash::Outputs
4
5
 
5
- describe LogStash::Outputs::SumoLogic::Piler do
6
+ describe SumoLogic::Piler do
6
7
 
8
+ event = LogStash::Event.new("foo" => "bar", "message" => "This is a log line")
9
+ event_10 = LogStash::Event.new("foo" => "bar", "message" => "1234567890")
10
+
7
11
  before :each do
8
12
  piler.start()
9
13
  end
@@ -15,9 +19,9 @@ describe LogStash::Outputs::SumoLogic::Piler do
15
19
 
16
20
  context "working in pile mode if interval > 0 && pile_max > 0" do
17
21
  let(:config) { {"queue_max" => 10, "interval" => 10, "pile_max" => 100 } }
18
- let(:stats) { LogStash::Outputs::SumoLogic::Statistics.new() }
19
- let(:queue) { LogStash::Outputs::SumoLogic::MessageQueue.new(stats, config) }
20
- let(:piler) { LogStash::Outputs::SumoLogic::Piler.new(queue, stats, config) }
22
+ let(:stats) { SumoLogic::Statistics.new }
23
+ let(:queue) { SumoLogic::MessageQueue.new(stats, config) }
24
+ let(:piler) { SumoLogic::Piler.new(queue, stats, config) }
21
25
  specify {
22
26
  expect(piler.is_pile).to be true
23
27
  }
@@ -25,9 +29,9 @@ describe LogStash::Outputs::SumoLogic::Piler do
25
29
 
26
30
  context "working in non-pile mode if interval <= 0" do
27
31
  let(:config) { {"queue_max" => 10, "interval" => 0, "pile_max" => 100 } }
28
- let(:stats) { LogStash::Outputs::SumoLogic::Statistics.new() }
29
- let(:queue) { LogStash::Outputs::SumoLogic::MessageQueue.new(stats, config) }
30
- let(:piler) { LogStash::Outputs::SumoLogic::Piler.new(queue, stats, config) }
32
+ let(:stats) { SumoLogic::Statistics.new }
33
+ let(:queue) { SumoLogic::MessageQueue.new(stats, config) }
34
+ let(:piler) { SumoLogic::Piler.new(queue, stats, config) }
31
35
  specify {
32
36
  expect(piler.is_pile).to be false
33
37
  }
@@ -35,152 +39,113 @@ describe LogStash::Outputs::SumoLogic::Piler do
35
39
 
36
40
  context "working in non-pile mode if pile_max <= 0" do
37
41
  let(:config) { {"queue_max" => 10, "interval" => 10, "pile_max" => 0 } }
38
- let(:stats) { LogStash::Outputs::SumoLogic::Statistics.new() }
39
- let(:queue) { LogStash::Outputs::SumoLogic::MessageQueue.new(stats, config) }
40
- let(:piler) { LogStash::Outputs::SumoLogic::Piler.new(queue, stats, config) }
42
+ let(:stats) { SumoLogic::Statistics.new }
43
+ let(:queue) { SumoLogic::MessageQueue.new(stats, config) }
44
+ let(:piler) { SumoLogic::Piler.new(queue, stats, config) }
41
45
  specify {
42
46
  expect(piler.is_pile).to be false
43
47
  }
44
48
  end # context
45
49
 
46
50
  context "in non-pile mode" do
47
-
48
- let(:config) { {"queue_max" => 10, "interval" => 0, "pile_max" => 100 } }
49
- let(:stats) { LogStash::Outputs::SumoLogic::Statistics.new() }
50
- let(:queue) { LogStash::Outputs::SumoLogic::MessageQueue.new(stats, config) }
51
- let(:piler) { LogStash::Outputs::SumoLogic::Piler.new(queue, stats, config) }
51
+ let(:config) { {"queue_max" => 10, "interval" => 0, "pile_max" => 100, "format" => "%{message}" } }
52
+ let(:stats) { SumoLogic::Statistics.new }
53
+ let(:queue) { SumoLogic::MessageQueue.new(stats, config) }
54
+ let(:piler) { SumoLogic::Piler.new(queue, stats, config) }
52
55
 
53
56
  it "enque immediately after input" do
54
- expect(stats.current_pile_items.value).to be 0
55
- expect(stats.current_queue_items.value).to be 0
56
- piler.input("This is a log line")
57
- expect(stats.current_pile_items.value).to be 0
58
- expect(stats.current_queue_items.value).to be 1
59
- expect(stats.current_queue_bytes.value).to be 18
57
+ expect(stats.total_enque_times.value).to be 0
58
+ expect(queue.size).to be 0
59
+ piler.input(event)
60
+ expect(stats.total_enque_times.value).to be 1
61
+ expect(stats.total_enque_bytes.value).to be 18
62
+ expect(queue.size).to be 1
63
+ expect(queue.bytesize).to be 18
60
64
  end
61
65
 
62
66
  it "deque correctly" do
63
- expect(stats.current_queue_items.value).to be 0
64
- expect(stats.total_enque_times.value).to be 0
65
- piler.input("This is a log line")
66
- expect(stats.total_enque_times.value).to be 1
67
- expect(stats.current_queue_items.value).to be 1
68
- expect(stats.current_queue_bytes.value).to be 18
69
- expect(stats.total_deque_times.value).to be 0
70
- expect(queue.deq()).to eq "This is a log line"
71
- expect(stats.current_queue_items.value).to be 0
72
- expect(stats.current_queue_bytes.value).to be 0
67
+ piler.input(event)
68
+ expect(queue.deq().payload).to eq "This is a log line"
69
+ expect(queue.size).to be 0
70
+ expect(queue.bytesize).to be 0
73
71
  expect(stats.total_deque_times.value).to be 1
72
+ expect(stats.total_deque_bytes.value).to be 18
74
73
  end
75
74
 
76
75
  end # context
77
76
 
78
77
  context "in pile mode" do
79
78
 
80
- let(:config) { {"queue_max" => 10, "interval" => 5, "pile_max" => 25 } }
81
- let(:stats) { LogStash::Outputs::SumoLogic::Statistics.new() }
82
- let(:queue) { LogStash::Outputs::SumoLogic::MessageQueue.new(stats, config) }
83
- let(:piler) { LogStash::Outputs::SumoLogic::Piler.new(queue, stats, config) }
84
-
85
- it "wait in pile before size reach pile_max" do
86
- expect(stats.current_pile_items.value).to be 0
87
- expect(stats.current_pile_bytes.value).to be 0
88
- expect(stats.current_queue_items.value).to be 0
89
- piler.input("1234567890")
90
- expect(stats.current_pile_items.value).to be 1
91
- expect(stats.current_pile_bytes.value).to be 10
92
- expect(stats.current_queue_items.value).to be 0
93
- piler.input("1234567890")
94
- expect(stats.current_pile_items.value).to be 2
95
- expect(stats.current_pile_bytes.value).to be 20
96
- expect(stats.current_queue_items.value).to be 0
97
- end
79
+ let(:config) { {"queue_max" => 10, "interval" => 5, "pile_max" => 25, "format" => "%{message}" } }
80
+ let(:stats) { SumoLogic::Statistics.new }
81
+ let(:queue) { SumoLogic::MessageQueue.new(stats, config) }
82
+ let(:piler) { SumoLogic::Piler.new(queue, stats, config) }
98
83
 
99
84
  it "enqueue content from pile when reach pile_max" do
100
- expect(stats.current_pile_items.value).to be 0
101
- expect(stats.current_pile_bytes.value).to be 0
102
- expect(stats.current_queue_items.value).to be 0
103
- piler.input("1234567890")
104
- piler.input("1234567890")
105
- expect(stats.current_queue_items.value).to be 0
106
- piler.input("1234567890")
107
- expect(stats.current_pile_items.value).to be 1
108
- expect(stats.current_pile_bytes.value).to be 10
109
- expect(stats.current_queue_items.value).to be 1
110
- expect(stats.current_queue_bytes.value).to be 21
85
+ expect(queue.size).to be 0
86
+ piler.input(event_10)
87
+ expect(queue.size).to be 0
88
+ piler.input(event_10)
89
+ expect(queue.size).to be 0
90
+ piler.input(event_10)
91
+ expect(queue.size).to be 1
111
92
  end
112
93
 
113
94
  it "enqueue content from pile when reach interval" do
114
- expect(stats.current_pile_items.value).to be 0
115
- expect(stats.current_pile_bytes.value).to be 0
116
- piler.input("1234567890")
117
- piler.input("1234567890")
118
- expect(stats.current_queue_items.value).to be 0
119
- sleep(8)
120
- expect(stats.current_pile_items.value).to be 0
121
- expect(stats.current_pile_bytes.value).to be 0
122
- expect(stats.current_queue_items.value).to be 1
123
- expect(stats.current_queue_bytes.value).to be 21
95
+ expect(queue.size).to be 0
96
+ piler.input(event_10)
97
+ expect(queue.size).to be 0
98
+ piler.input(event_10)
99
+ sleep(10)
100
+ expect(queue.size).to be 1
124
101
  end
125
102
 
126
103
  end # context
127
104
 
128
105
  context "pile to message queue" do
129
106
 
130
- let(:config) { {"queue_max" => 5, "interval" => 500, "pile_max" => 5} }
131
- let(:stats) { LogStash::Outputs::SumoLogic::Statistics.new() }
132
- let(:queue) { LogStash::Outputs::SumoLogic::MessageQueue.new(stats, config) }
133
- let(:piler) { LogStash::Outputs::SumoLogic::Piler.new(queue, stats, config) }
134
-
135
- it "enqueue payloads from pile before reach queue_max" do
136
- expect(stats.current_queue_items.value).to be 0
137
- piler.input("1234567890")
138
- expect(stats.current_queue_items.value).to be 0
139
- expect(stats.current_queue_bytes.value).to be 0
140
- piler.input("2234567890")
141
- expect(stats.current_queue_items.value).to be 1
142
- expect(stats.current_queue_bytes.value).to be 10
143
- piler.input("3234567890")
144
- expect(stats.current_queue_items.value).to be 2
145
- expect(stats.current_queue_bytes.value).to be 20
146
- end
107
+ let(:config) { {"queue_max" => 5, "interval" => 3, "pile_max" => 5, "format" => "%{message}"} }
108
+ let(:stats) { SumoLogic::Statistics.new }
109
+ let(:queue) { SumoLogic::MessageQueue.new(stats, config) }
110
+ let(:piler) { SumoLogic::Piler.new(queue, stats, config) }
147
111
 
148
112
  it "block input thread if queue is full" do
149
113
  input_t = Thread.new {
150
- for i in 0..9 do
151
- piler.input("#{i}234567890")
114
+ for i in 0..10 do
115
+ piler.input(event_10)
152
116
  end
153
117
  }
154
118
  sleep(3)
155
- expect(stats.current_queue_items.value).to be 5
156
- expect(stats.current_queue_bytes.value).to be 50
157
- queue.drain()
119
+ expect(queue.size).to be 5
120
+ expect(queue.bytesize).to be 50
158
121
  piler.stop()
159
- input_t.join
160
- expect(stats.total_deque_times.value).to be 5
161
- expect(stats.total_deque_bytes.value).to be 50
122
+ queue.drain()
123
+ input_t.kill()
162
124
  end
163
125
 
164
126
  it "resume input thread if queue is drained" do
165
127
  input_t = Thread.new {
166
- for i in 0..9 do
167
- piler.input("#{i}234567890")
128
+ for i in 0..10 do
129
+ piler.input(event_10)
168
130
  end
169
131
  }
170
- sleep(3)
132
+ sleep(5)
171
133
  expect(stats.total_deque_times.value).to be 0
134
+ expect(queue.size).to be 5
172
135
  expect(stats.total_enque_times.value).to be 5
173
136
  queue.deq()
174
- sleep(1)
137
+ sleep(3)
175
138
  expect(stats.total_deque_times.value).to be 1
139
+ expect(queue.size).to be 5
176
140
  expect(stats.total_enque_times.value).to be 6
177
141
  queue.deq()
178
- sleep(1)
142
+ sleep(3)
179
143
  expect(stats.total_deque_times.value).to be 2
144
+ expect(queue.size).to be 5
180
145
  expect(stats.total_enque_times.value).to be 7
181
- queue.drain()
182
146
  piler.stop()
183
- input_t.join
147
+ queue.drain()
148
+ input_t.kill()
184
149
  end
185
150
 
186
151
  end # context
@@ -13,6 +13,16 @@ describe LogStash::Outputs::SumoLogic, :unless => (ENV["sumo_url"].to_s.empty?)
13
13
  plugin.close()
14
14
  end
15
15
 
16
+ context "default configuration" do
17
+ let(:plugin) {
18
+ LogStash::Outputs::SumoLogic.new("url" => ENV["sumo_url"])
19
+ }
20
+
21
+ it "cookies is by default disabled" do
22
+ expect(plugin.cookies).to be false
23
+ end
24
+ end
25
+
16
26
  context "no pile" do
17
27
  context "single sender" do
18
28
  context "send log in json" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-sumologic
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sumo Logic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-19 00:00:00.000000000 Z
11
+ date: 2021-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: manticore
@@ -51,27 +51,33 @@ dependencies:
51
51
  - !ruby/object:Gem::Version
52
52
  version: '2.99'
53
53
  - !ruby/object:Gem::Dependency
54
- name: logstash-codec-plain
54
+ name: logstash-mixin-http_client
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: '0'
59
+ version: '6'
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '8'
60
63
  type: :runtime
61
64
  prerelease: false
62
65
  version_requirements: !ruby/object:Gem::Requirement
63
66
  requirements:
64
67
  - - ">="
65
68
  - !ruby/object:Gem::Version
66
- version: '0'
69
+ version: '6'
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: '8'
67
73
  - !ruby/object:Gem::Dependency
68
- name: logstash-mixin-http_client
74
+ name: logstash-codec-plain
69
75
  requirement: !ruby/object:Gem::Requirement
70
76
  requirements:
71
77
  - - ">="
72
78
  - !ruby/object:Gem::Version
73
79
  version: '0'
74
- type: :runtime
80
+ type: :development
75
81
  prerelease: false
76
82
  version_requirements: !ruby/object:Gem::Requirement
77
83
  requirements:
@@ -101,11 +107,12 @@ extensions: []
101
107
  extra_rdoc_files: []
102
108
  files:
103
109
  - CHANGELOG.md
104
- - DEVELOPER.md
110
+ - CONTRIBUTING.md
105
111
  - Gemfile
106
112
  - LICENSE
107
113
  - README.md
108
114
  - lib/logstash/outputs/sumologic.rb
115
+ - lib/logstash/outputs/sumologic/batch.rb
109
116
  - lib/logstash/outputs/sumologic/common.rb
110
117
  - lib/logstash/outputs/sumologic/compressor.rb
111
118
  - lib/logstash/outputs/sumologic/header_builder.rb
@@ -145,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
152
  - !ruby/object:Gem::Version
146
153
  version: '0'
147
154
  requirements: []
148
- rubygems_version: 3.0.0
155
+ rubygems_version: 3.1.2
149
156
  signing_key:
150
157
  specification_version: 4
151
158
  summary: Deliever the log to Sumo Logic cloud service.
data/DEVELOPER.md DELETED
@@ -1,39 +0,0 @@
1
- # Development Guide
2
-
3
- Logstash output plugin for delivering log to Sumo Logic cloud service through HTTP source.
4
-
5
- ## How to build .gem file from repository
6
-
7
- Open logstash-output-sumologic.gemspec and make any necessary configuration changes.
8
- In your local Git clone, run:
9
-
10
- ```bash
11
- gem build logstash-output-sumologic.gemspec
12
- ```
13
-
14
- You will get a .gem file in the same directory as `logstash-output-sumologic-x.y.z.gem`
15
- Remove old version of plugin (optional):
16
-
17
- ```bash
18
- bin/logstash-plugin remove logstash-output-sumologic
19
- ```
20
-
21
- And then install the plugin locally:
22
-
23
- ```bash
24
- bin/logstash-plugin install <full path of .gem>
25
- ```
26
-
27
- ## How to run test with rspec
28
-
29
- The test requires JRuby to run. So you need to install [JRuby](http://jruby.org/), [bundle](https://bundler.io/bundle_install.html) and [RVM](https://rvm.io/) (for switching between JRuby and Ruby) first.
30
- And then run:
31
-
32
- ```bash
33
- rvm use jruby
34
- bundle install
35
- export sumo_url=https://events.sumologic.net/receiver/v1/http/XXXXXXXXXX
36
- rspec spec/
37
- ```
38
-
39
- The project is integrated to the Travis CI now. Make sure [all test passed](https://travis-ci.org/SumoLogic/logstash-output-sumologic) before creating PR