logstash-output-sumologic 1.2.2 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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