logstash-output-statsd 3.1.5 → 3.2.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 +4 -0
- data/docs/index.asciidoc +10 -1
- data/lib/logstash/outputs/statsd.rb +4 -1
- data/logstash-output-statsd.gemspec +2 -2
- data/spec/outputs/statsd_spec.rb +26 -23
- data/spec/spec_helper.rb +33 -9
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 964258cd9a1aae17bd03ba061ee09d438f738920a7d4876fe4f4b135f198cace
|
4
|
+
data.tar.gz: 49733d6030a54c8af5ca28160674c5864fb987a854b42d5217d58cdb7e5e94b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4655cb2492410e1fa87f025e48e34a2d783485fd0f915d53d6af5b240a56375061851b99b3aeb647d9c7e51000fcd34da9f11410d34543bf37febd3332f80366
|
7
|
+
data.tar.gz: b8350eb84ba61eda26d06cca47dec6c28c1736b18f32e1475e9f67be6eed97847d133558d002907e3348282522f3860710df7b3c744cf446c08ae31c4ef730d2
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 3.2.0
|
2
|
+
- Added TCP support [30](https://github.com/logstash-plugins/logstash-output-statsd/pull/30)
|
3
|
+
- Changed test code for cleanups [31](https://github.com/logstash-plugins/logstash-output-statsd/pull/31)
|
4
|
+
|
1
5
|
## 3.1.5
|
2
6
|
- Docs: Set the default_codec doc attribute.
|
3
7
|
|
data/docs/index.asciidoc
CHANGED
@@ -153,6 +153,15 @@ allowed.
|
|
153
153
|
|
154
154
|
The port to connect to on your statsd server.
|
155
155
|
|
156
|
+
[id="plugins-{type}s-{plugin}-protocol"]
|
157
|
+
|
158
|
+
===== `protocol`
|
159
|
+
|
160
|
+
* Value type is <<string,string>>
|
161
|
+
* Default value is `"udp"`
|
162
|
+
|
163
|
+
The protocol to connect to on your statsd server.
|
164
|
+
|
156
165
|
[id="plugins-{type}s-{plugin}-sample_rate"]
|
157
166
|
===== `sample_rate`
|
158
167
|
|
@@ -193,4 +202,4 @@ are allowed in the metric names.
|
|
193
202
|
[id="plugins-{type}s-{plugin}-common-options"]
|
194
203
|
include::{include_path}/{type}.asciidoc[]
|
195
204
|
|
196
|
-
:default_codec!:
|
205
|
+
:default_codec!:
|
@@ -57,6 +57,9 @@ class LogStash::Outputs::Statsd < LogStash::Outputs::Base
|
|
57
57
|
# The port to connect to on your statsd server.
|
58
58
|
config :port, :validate => :number, :default => 8125
|
59
59
|
|
60
|
+
# The protocol to use for the connection.
|
61
|
+
config :protocol, :validate => ['udp', 'tcp'], :default => "udp"
|
62
|
+
|
60
63
|
# The statsd namespace to use for this metric. `%{fieldname}` substitutions are
|
61
64
|
# allowed.
|
62
65
|
config :namespace, :validate => :string, :default => "logstash"
|
@@ -95,7 +98,7 @@ class LogStash::Outputs::Statsd < LogStash::Outputs::Base
|
|
95
98
|
public
|
96
99
|
def register
|
97
100
|
require "statsd"
|
98
|
-
@client = Statsd.new(@host, @port)
|
101
|
+
@client = Statsd.new(@host, @port, @protocol.to_sym)
|
99
102
|
end # def register
|
100
103
|
|
101
104
|
public
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-output-statsd'
|
4
|
-
s.version = '3.
|
4
|
+
s.version = '3.2.0'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "Sends metrics using the `statsd` network daemon"
|
7
7
|
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"
|
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_runtime_dependency "logstash-core-plugin-api", ">= 1.60", "<= 2.99"
|
24
24
|
s.add_runtime_dependency 'logstash-input-generator'
|
25
25
|
|
26
|
-
s.add_runtime_dependency 'statsd-ruby', ['1.
|
26
|
+
s.add_runtime_dependency 'statsd-ruby', ['1.4.0']
|
27
27
|
|
28
28
|
s.add_development_dependency 'logstash-devutils'
|
29
29
|
end
|
data/spec/outputs/statsd_spec.rb
CHANGED
@@ -1,57 +1,60 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require_relative "../spec_helper"
|
3
3
|
require "logstash/outputs/statsd"
|
4
|
+
require "socket"
|
4
5
|
|
5
6
|
describe LogStash::Outputs::Statsd do
|
6
7
|
|
7
|
-
let(:host) { "localhost" }
|
8
|
-
let(:port) { rand(2000..10000) }
|
9
|
-
let!(:server) { StatsdServer.new.run(port) }
|
10
|
-
|
11
|
-
after(:each) do
|
12
|
-
server.close
|
13
|
-
end
|
14
|
-
|
15
8
|
describe "registration and close" do
|
16
|
-
|
17
9
|
it "should register without errors" do
|
18
10
|
output = LogStash::Plugin.lookup("output", "statsd").new
|
19
11
|
expect {output.register}.to_not raise_error
|
20
12
|
end
|
21
|
-
|
22
13
|
end
|
23
14
|
|
24
|
-
describe "
|
15
|
+
describe "IO" do
|
16
|
+
let(:host) { "localhost" }
|
17
|
+
let(:port) { rand(2000..10000) }
|
18
|
+
let!(:server) { StatsdServer.new.run(port, protocol) }
|
25
19
|
|
26
|
-
|
20
|
+
after(:each) { server.close }
|
27
21
|
|
22
|
+
shared_examples "it receives sent data" do
|
28
23
|
let(:config) do
|
29
|
-
{ "host" => host, "sender" => "spec", "port" => port, "count" => [ "foo.bar", "0.1" ] }
|
24
|
+
{ "host" => host, "sender" => "spec", "port" => port, "protocol" => protocol, "count" => [ "foo.bar", "0.1" ] }
|
30
25
|
end
|
31
|
-
|
32
26
|
let(:properties) do
|
33
27
|
{ "metric" => "foo.bar", "count" => 10 }
|
34
28
|
end
|
35
|
-
|
36
29
|
let(:event) { LogStash::Event.new(properties) }
|
37
30
|
|
38
31
|
subject { LogStash::Outputs::Statsd.new(config) }
|
39
32
|
|
40
|
-
before(:each)
|
41
|
-
subject.register
|
42
|
-
end
|
33
|
+
before(:each) { subject.register }
|
43
34
|
|
44
35
|
it "should receive data send to the server" do
|
45
36
|
subject.receive(event)
|
46
|
-
# Since we are dealing with threads and networks,
|
37
|
+
# Since we are dealing with threads and networks,
|
47
38
|
# we might experience delays or timing issues.
|
48
39
|
# lets try a few times before giving up completely.
|
49
|
-
try {
|
50
|
-
expect(server.received).to include("logstash.spec.foo.bar:0.1|c")
|
51
|
-
}
|
40
|
+
try { expect(server.received).to include("logstash.spec.foo.bar:0.1|c") }
|
52
41
|
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "UDP" do
|
45
|
+
let(:protocol) { "udp" }
|
53
46
|
|
47
|
+
context "#send" do
|
48
|
+
include_examples "it receives sent data"
|
49
|
+
end
|
54
50
|
end
|
55
|
-
end
|
56
51
|
|
52
|
+
describe "TCP" do
|
53
|
+
let(:protocol) { "tcp" }
|
54
|
+
|
55
|
+
context "#send" do
|
56
|
+
include_examples "it receives sent data"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
57
60
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -11,20 +11,28 @@ class StatsdServer
|
|
11
11
|
@received = []
|
12
12
|
end
|
13
13
|
|
14
|
-
def register(port)
|
15
|
-
@port
|
16
|
-
|
17
|
-
|
14
|
+
def register(port, protocol)
|
15
|
+
@port = port
|
16
|
+
if protocol == "udp"
|
17
|
+
@socket = UDPSocket.new
|
18
|
+
@socket.bind("127.0.0.1", port)
|
19
|
+
else
|
20
|
+
@socket = TCPserver.new("127.0.0.1", port)
|
21
|
+
end
|
18
22
|
end
|
19
23
|
|
20
|
-
|
21
|
-
|
24
|
+
|
25
|
+
def run(port, protocol = "udp")
|
26
|
+
register(port, protocol)
|
27
|
+
|
22
28
|
Thread.new do
|
23
|
-
|
24
|
-
|
25
|
-
|
29
|
+
if protocol == "udp"
|
30
|
+
udp_receive
|
31
|
+
else
|
32
|
+
tcp_receive
|
26
33
|
end
|
27
34
|
end
|
35
|
+
|
28
36
|
self
|
29
37
|
end
|
30
38
|
|
@@ -43,7 +51,23 @@ class StatsdServer
|
|
43
51
|
def closed?
|
44
52
|
@terminated == true
|
45
53
|
end
|
54
|
+
end
|
46
55
|
|
56
|
+
private
|
57
|
+
|
58
|
+
def tcp_receive
|
59
|
+
client = @socket.accept
|
60
|
+
Timeout.timeout(5) { sleep(0.1) while client.nil? }
|
61
|
+
metric = client.recvfrom(100).first
|
62
|
+
append(metric)
|
63
|
+
client.close
|
64
|
+
end
|
65
|
+
|
66
|
+
def udp_receive
|
67
|
+
while(!closed?)
|
68
|
+
metric, _ = @socket.recvfrom(100)
|
69
|
+
append(metric)
|
70
|
+
end
|
47
71
|
end
|
48
72
|
|
49
73
|
RSpec.configure do |c|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-statsd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -49,7 +49,7 @@ dependencies:
|
|
49
49
|
requirements:
|
50
50
|
- - '='
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: 1.
|
52
|
+
version: 1.4.0
|
53
53
|
name: statsd-ruby
|
54
54
|
prerelease: false
|
55
55
|
type: :runtime
|
@@ -57,7 +57,7 @@ dependencies:
|
|
57
57
|
requirements:
|
58
58
|
- - '='
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: 1.
|
60
|
+
version: 1.4.0
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
@@ -113,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
113
113
|
version: '0'
|
114
114
|
requirements: []
|
115
115
|
rubyforge_project:
|
116
|
-
rubygems_version: 2.6.
|
116
|
+
rubygems_version: 2.6.13
|
117
117
|
signing_key:
|
118
118
|
specification_version: 4
|
119
119
|
summary: Sends metrics using the `statsd` network daemon
|