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