statsd_test_harness 0.1.3 → 0.2.1
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/.gitignore +2 -9
- data/Gemfile.lock +40 -0
- data/README.md +9 -20
- data/config/config_custom.rb +20 -0
- data/config/sample_config.rb +6 -7
- data/lib/statsd_test_harness/cli.rb +0 -3
- data/lib/statsd_test_harness/client.rb +19 -0
- data/lib/statsd_test_harness/processor.rb +20 -28
- data/lib/statsd_test_harness/tool.rb +6 -10
- data/lib/statsd_test_harness/version.rb +1 -1
- data/lib/statsd_test_harness.rb +1 -1
- data/statsd_test_harness.gemspec +1 -1
- metadata +8 -7
- data/lib/statsd_test_harness/postprocessors/rspec.rb +0 -21
- data/lib/statsd_test_harness/test_data.rb +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60ab01edf847abd342b0b97ea2b6756268193e86
|
4
|
+
data.tar.gz: 0e28cca62fab3ddfd4d65f38399029fffa703c7a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1ee5426339c2e6275a8614503688bc5e643882bfb279f9f1d563fabe04075c233d93a8d7b2a54e6ae3c8c58714fb5ddb987a0f377470a474de0c14d086a63b3
|
7
|
+
data.tar.gz: 99d988e3db95a437f61a0e1df1919e32c68b3bf17e88a957fa7ea29c5056a1334e6e9a6d7df77a28d3fceacd019530753b4d0a8477d52909a1d432e2c1812691
|
data/.gitignore
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
statsd_test_harness (0.2.1)
|
5
|
+
dotenv (~> 2.0)
|
6
|
+
require_all (~> 1.3)
|
7
|
+
statsd-ruby (~> 0.3.0)
|
8
|
+
thor (~> 0.19)
|
9
|
+
|
10
|
+
GEM
|
11
|
+
remote: https://rubygems.org/
|
12
|
+
specs:
|
13
|
+
diff-lcs (1.2.5)
|
14
|
+
dotenv (2.0.2)
|
15
|
+
rake (10.4.2)
|
16
|
+
require_all (1.3.2)
|
17
|
+
rspec (3.3.0)
|
18
|
+
rspec-core (~> 3.3.0)
|
19
|
+
rspec-expectations (~> 3.3.0)
|
20
|
+
rspec-mocks (~> 3.3.0)
|
21
|
+
rspec-core (3.3.2)
|
22
|
+
rspec-support (~> 3.3.0)
|
23
|
+
rspec-expectations (3.3.1)
|
24
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
25
|
+
rspec-support (~> 3.3.0)
|
26
|
+
rspec-mocks (3.3.2)
|
27
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
28
|
+
rspec-support (~> 3.3.0)
|
29
|
+
rspec-support (3.3.0)
|
30
|
+
statsd-ruby (0.3.0)
|
31
|
+
thor (0.19.1)
|
32
|
+
|
33
|
+
PLATFORMS
|
34
|
+
ruby
|
35
|
+
|
36
|
+
DEPENDENCIES
|
37
|
+
bundler (~> 1.9)
|
38
|
+
rake (~> 10.0)
|
39
|
+
rspec (~> 3.3)
|
40
|
+
statsd_test_harness!
|
data/README.md
CHANGED
@@ -22,35 +22,24 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
Set the following environment variables for statsd integration:
|
24
24
|
|
25
|
-
STATSD_HOST=192.168.42.10
|
26
|
-
STATSD_PORT=
|
27
|
-
|
25
|
+
export STATSD_HOST=192.168.42.10
|
26
|
+
export STATSD_PORT=8125
|
27
|
+
export STATSD_NAMESPACE=statsd_test_harness
|
28
|
+
export STATSD_APP_NAME=my_app_name
|
28
29
|
|
29
30
|
## Usage
|
30
31
|
|
32
|
+
To start a graphite/statsd docker file:
|
33
|
+
|
34
|
+
docker run -d --name graphite --restart=always -p 80:80 -p 2003:2003 -p 8125:8125/udp hopsoft/graphite-statsd -e VIRTUAL_HOST=graphite.docker
|
35
|
+
|
31
36
|
You must specify a config file at runtime:
|
32
37
|
|
33
38
|
wrap run_suite --config path/to/config/file.rb
|
34
39
|
|
35
40
|
For an example of what the config file should look like, refer to config/sample_config.rb
|
36
41
|
|
37
|
-
|
38
|
-
|
39
|
-
To add support for a new test suite, create a file in statsd_test_harness/postprocessors/ that will extract the duration output
|
40
|
-
from the testing framework. Follow statsd_test_harness/postprocessors/rspec.rb for an example.
|
41
|
-
|
42
|
-
To register the postprocessor, add it to the `config.tools` array in your config file, e.g.
|
43
|
-
|
44
|
-
{
|
45
|
-
name: 'my_framework',
|
46
|
-
command: 'test',
|
47
|
-
label: 'my_framework',
|
48
|
-
options: '',
|
49
|
-
ignore_return_value: true,
|
50
|
-
postprocessor: StatsdTestHarness::Postprocessors::MyPostProcessor
|
51
|
-
}
|
52
|
-
|
53
|
-
Set the `ignore_return_value` flag to false if you don't want to report an unsuccessful test run (based on exit status).
|
42
|
+
In your config file, set the `ignore_return_value` flag to false if you don't want to report an unsuccessful test run (based on exit status).
|
54
43
|
|
55
44
|
## Contributing
|
56
45
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'dotenv'
|
2
|
+
Dotenv.load
|
3
|
+
|
4
|
+
StatsdTestHarness.configure do |config|
|
5
|
+
config.host = ENV['STATSD_HOST']
|
6
|
+
config.port = ENV['STATSD_PORT']
|
7
|
+
config.app_name = ENV['STATSD_APP_NAME']
|
8
|
+
config.namespace = ENV['STATSD_NAMESPACE']
|
9
|
+
|
10
|
+
config.tools = [
|
11
|
+
{
|
12
|
+
name: 'rspec',
|
13
|
+
command: 'rspec',
|
14
|
+
label: 'rspec',
|
15
|
+
options: 'spec/models/conversation_spec.rb',
|
16
|
+
ignore_return_value: false
|
17
|
+
}
|
18
|
+
]
|
19
|
+
|
20
|
+
end
|
data/config/sample_config.rb
CHANGED
@@ -1,19 +1,18 @@
|
|
1
1
|
require 'dotenv'
|
2
2
|
Dotenv.load
|
3
3
|
|
4
|
-
|
5
|
-
config.
|
6
|
-
config.
|
7
|
-
config.
|
4
|
+
StatsdTess.configure do |config|
|
5
|
+
config.host = ENV['STATSD_HOST']
|
6
|
+
config.port = ENV['STATSD_PORT']
|
7
|
+
config.app_name = ENV['STATSD_APP_NAME']
|
8
|
+
config.namespace = ENV['STATSD_NAMESPACE']
|
8
9
|
|
9
10
|
config.tools = [
|
10
11
|
{
|
11
12
|
name: 'rspec',
|
12
13
|
command: 'rspec',
|
13
|
-
label: 'rspec',
|
14
14
|
options: '',
|
15
|
-
ignore_return_value: true
|
16
|
-
postprocessor: StatsdTestHarness::Postprocessors::RSpec
|
15
|
+
ignore_return_value: true
|
17
16
|
}
|
18
17
|
]
|
19
18
|
|
@@ -2,16 +2,13 @@ require "thor"
|
|
2
2
|
require "statsd_test_harness"
|
3
3
|
|
4
4
|
module StatsdTestHarness
|
5
|
-
|
6
5
|
class CLI < Thor
|
7
6
|
|
8
7
|
desc "wrap run_suite --config PATH_TO_CONFIG", ""
|
9
8
|
method_option :config, type: :string, default: '', aliases: "-c"
|
10
|
-
|
11
9
|
def run_suite
|
12
10
|
StatsdTestHarness.new(options['config']).run
|
13
11
|
end
|
14
12
|
|
15
13
|
end
|
16
|
-
|
17
14
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module StatsdTestHarness
|
2
|
+
class Client
|
3
|
+
|
4
|
+
def post(duration, label)
|
5
|
+
puts "Sending test data from #{label} suite for app #{StatsdTestHarness.config.app_name}..."
|
6
|
+
client.timing(
|
7
|
+
"#{StatsdTestHarness.config.namespace}.#{StatsdTestHarness.config.app_name}.#{label}.duration",
|
8
|
+
duration
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def client
|
15
|
+
Statsd.new(StatsdTestHarness.config.host, StatsdTestHarness.config.port)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -1,64 +1,56 @@
|
|
1
1
|
module StatsdTestHarness
|
2
|
-
|
3
2
|
class Processor
|
4
3
|
|
5
|
-
require '
|
4
|
+
require 'statsd'
|
6
5
|
|
7
6
|
attr_reader :path_to_config
|
8
7
|
|
9
8
|
def initialize(path_to_config)
|
10
9
|
@path_to_config = path_to_config
|
10
|
+
load_config
|
11
11
|
end
|
12
12
|
|
13
13
|
def run
|
14
|
-
load_external_config
|
15
14
|
StatsdTestHarness.config.tools.each do |tool_harness|
|
16
15
|
tool = Tool.new(tool_harness)
|
17
|
-
puts "Executing #{tool.label} test suite..."
|
18
|
-
if
|
19
|
-
|
16
|
+
puts "Executing #{tool.label} test suite for #{StatsdTestHarness.config.app_name}..."
|
17
|
+
if duration = with_timing{tool.run}
|
18
|
+
StatsdTestHarness::Client.new.post(duration, tool.name)
|
19
|
+
puts "Test suite for #{tool.label} completed in #{duration} ms."
|
20
20
|
end
|
21
|
-
puts "Test suite run complete."
|
22
21
|
end
|
23
22
|
end
|
24
23
|
|
25
24
|
private
|
26
25
|
|
27
|
-
def
|
26
|
+
def load_config
|
28
27
|
begin
|
29
|
-
load self.path_to_config
|
30
28
|
validate_path_to_config
|
29
|
+
load self.path_to_config
|
31
30
|
validate_env_variables
|
32
31
|
rescue Exception => e
|
33
|
-
puts "--
|
32
|
+
puts "-- Invalid configuration, exiting: #{e}"
|
33
|
+
exit
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
def
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
Time.now
|
42
|
-
)
|
43
|
-
end
|
44
|
-
|
45
|
-
def endpoint
|
46
|
-
"http://#{StatsdTestHarness.config.statsd_host}:#{StatsdTestHarness.config.statsd_port}"
|
37
|
+
def validate_env_variables
|
38
|
+
unless StatsdTestHarness.config.host && StatsdTestHarness.config.port
|
39
|
+
raise "No statsd environment variables defined."
|
40
|
+
end
|
47
41
|
end
|
48
42
|
|
49
43
|
def validate_path_to_config
|
50
44
|
if self.path_to_config.empty?
|
51
|
-
|
52
|
-
exit
|
45
|
+
raise "No config file specified."
|
53
46
|
end
|
54
47
|
end
|
55
48
|
|
56
|
-
def
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
end
|
49
|
+
def with_timing
|
50
|
+
start_time = Time.now.to_f
|
51
|
+
yield
|
52
|
+
(Time.now.to_f - start_time) * 1000
|
61
53
|
end
|
62
|
-
end
|
63
54
|
|
55
|
+
end
|
64
56
|
end
|
@@ -1,28 +1,24 @@
|
|
1
1
|
module StatsdTestHarness
|
2
|
-
|
3
2
|
class Tool
|
4
3
|
|
5
|
-
attr_reader :name, :
|
4
|
+
attr_reader :name, :command, :options, :label, :ignore_return_value
|
6
5
|
|
7
6
|
def initialize(attrs={})
|
8
|
-
@name
|
9
|
-
@command
|
10
|
-
@options
|
11
|
-
@label
|
12
|
-
@postprocessor = attrs[:postprocessor]
|
7
|
+
@name = attrs[:name]
|
8
|
+
@command = attrs[:command]
|
9
|
+
@options = attrs[:options]
|
10
|
+
@label = attrs[:label]
|
13
11
|
@ignore_return_value = attrs[:ignore_return_value]
|
14
12
|
end
|
15
13
|
|
16
14
|
def run
|
17
15
|
output = `#{self.command} #{self.options}`
|
18
16
|
puts output
|
19
|
-
data = self.postprocessor.new(output)
|
20
17
|
if $?.to_i > 0 && ! ignore_return_value
|
21
18
|
raise "Test run returned non-zero status, results not submitted."
|
22
19
|
end
|
23
|
-
|
20
|
+
true
|
24
21
|
end
|
25
22
|
|
26
23
|
end
|
27
|
-
|
28
24
|
end
|
data/lib/statsd_test_harness.rb
CHANGED
data/statsd_test_harness.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_dependency "thor", "~> 0.19"
|
22
22
|
spec.add_dependency "require_all", "~> 1.3"
|
23
|
-
spec.add_dependency "
|
23
|
+
spec.add_dependency "statsd-ruby", "~> 0.3.0"
|
24
24
|
spec.add_dependency "dotenv", "~> 2.0"
|
25
25
|
|
26
26
|
spec.add_development_dependency "bundler", "~> 1.9"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: statsd_test_harness
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- CoralineAda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -39,19 +39,19 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: statsd-ruby
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.3.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 0.3.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: dotenv
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -121,18 +121,19 @@ files:
|
|
121
121
|
- ".gitignore"
|
122
122
|
- CODE_OF_CONDUCT.md
|
123
123
|
- Gemfile
|
124
|
+
- Gemfile.lock
|
124
125
|
- LICENSE
|
125
126
|
- README.md
|
126
127
|
- Rakefile
|
127
128
|
- bin/console
|
128
129
|
- bin/setup
|
129
130
|
- bin/wrap
|
131
|
+
- config/config_custom.rb
|
130
132
|
- config/sample_config.rb
|
131
133
|
- lib/statsd_test_harness.rb
|
132
134
|
- lib/statsd_test_harness/cli.rb
|
133
|
-
- lib/statsd_test_harness/
|
135
|
+
- lib/statsd_test_harness/client.rb
|
134
136
|
- lib/statsd_test_harness/processor.rb
|
135
|
-
- lib/statsd_test_harness/test_data.rb
|
136
137
|
- lib/statsd_test_harness/tool.rb
|
137
138
|
- lib/statsd_test_harness/version.rb
|
138
139
|
- statsd_test_harness.gemspec
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module StatsdTestHarness
|
2
|
-
module Postprocessors
|
3
|
-
class RSpec
|
4
|
-
|
5
|
-
attr_reader :output
|
6
|
-
|
7
|
-
def initialize(output)
|
8
|
-
@output = output
|
9
|
-
end
|
10
|
-
|
11
|
-
def duration
|
12
|
-
duration_string = /^real(.+)/.match(self.output).to_a.last
|
13
|
-
hours = /([0-9\.]+)h/.match(duration_string).to_a.last.to_f || 0
|
14
|
-
minutes = /([0-9\.]+)m/.match(duration_string).to_a.last.to_f || 0
|
15
|
-
seconds = /([0-9\.]+)s/.match(duration_string).to_a.last.to_f || 0
|
16
|
-
(hours * 60 * 60) + (minutes * 60) + seconds
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
module StatsdTestHarness
|
2
|
-
|
3
|
-
class TestData
|
4
|
-
|
5
|
-
attr_reader :raw_output
|
6
|
-
|
7
|
-
def self.from(output)
|
8
|
-
new(output)
|
9
|
-
end
|
10
|
-
|
11
|
-
def initialize(raw_output)
|
12
|
-
@raw_output = raw_output
|
13
|
-
end
|
14
|
-
|
15
|
-
# FIXME parse output for duration
|
16
|
-
def duration
|
17
|
-
12
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|