nugget 0.0.10 → 0.0.11
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.
- data/README.md +2 -2
- data/bin/check_nugget +19 -3
- data/lib/nugget.rb +5 -0
- data/lib/nugget/backstop.rb +3 -1
- data/lib/nugget/cli.rb +16 -1
- data/lib/nugget/service.rb +36 -11
- data/lib/nugget/statsd.rb +40 -0
- data/lib/nugget/version.rb +1 -1
- metadata +19 -2
data/README.md
CHANGED
@@ -18,10 +18,10 @@ Nugget also includes a very basic web service daemon that simply reads the curre
|
|
18
18
|
|
19
19
|
$ nugget -w
|
20
20
|
|
21
|
-
Additionally, nugget includes support for sending results of the tests to [backstop](https://github.com/obfuscurity/backstop).
|
21
|
+
Additionally, nugget includes support for sending results of the tests to [backstop](https://github.com/obfuscurity/backstop) and [statsd](https://github.com/reinh/statsd).
|
22
22
|
|
23
23
|

|
24
24
|
|
25
25
|
#### License
|
26
26
|
|
27
|
-
nugget is open source software available under the MIT License
|
27
|
+
nugget is open source software available under the MIT License
|
data/bin/check_nugget
CHANGED
@@ -23,9 +23,25 @@ end
|
|
23
23
|
|
24
24
|
failed_tests = {}
|
25
25
|
|
26
|
-
|
27
|
-
if
|
28
|
-
|
26
|
+
if ARGV[0] == "-s"
|
27
|
+
if ARGV[1]
|
28
|
+
if results[ARGV[1].to_sym]
|
29
|
+
if results[ARGV[1].to_sym][:result] == "FAIL"
|
30
|
+
failed_tests.store(ARGV[1], results[ARGV[1].to_sym][:response][:failed])
|
31
|
+
end
|
32
|
+
else
|
33
|
+
puts "no check by that name"
|
34
|
+
exit 1
|
35
|
+
end
|
36
|
+
else
|
37
|
+
puts "-s requires an argument in the form of a check name"
|
38
|
+
exit 1
|
39
|
+
end
|
40
|
+
else
|
41
|
+
results.each do |test, info|
|
42
|
+
if info[:result] == "FAIL"
|
43
|
+
failed_tests.store(test.to_s, info[:response][:failed])
|
44
|
+
end
|
29
45
|
end
|
30
46
|
end
|
31
47
|
|
data/lib/nugget.rb
CHANGED
@@ -6,8 +6,10 @@ require 'mixlib/config'
|
|
6
6
|
require 'mixlib/log'
|
7
7
|
require 'yajl/json_gem'
|
8
8
|
require 'thin'
|
9
|
+
require 'statsd'
|
9
10
|
require 'open-uri'
|
10
11
|
require 'iconv' if RUBY_VERSION =~ /1.8/
|
12
|
+
require 'timeout'
|
11
13
|
|
12
14
|
__DIR__ = File.dirname(__FILE__)
|
13
15
|
|
@@ -21,8 +23,11 @@ require 'nugget/cli'
|
|
21
23
|
require 'nugget/service'
|
22
24
|
require 'nugget/web'
|
23
25
|
require 'nugget/backstop'
|
26
|
+
require 'nugget/statsd'
|
24
27
|
require 'nugget/version'
|
25
28
|
|
29
|
+
TIMEOUT = 180
|
30
|
+
|
26
31
|
module Nugget
|
27
32
|
class << self
|
28
33
|
|
data/lib/nugget/backstop.rb
CHANGED
data/lib/nugget/cli.rb
CHANGED
@@ -55,10 +55,25 @@ module Nugget
|
|
55
55
|
:long => "--backstop URL",
|
56
56
|
:description => "URL for backstop metrics thing."
|
57
57
|
|
58
|
+
option :statsd_namespace,
|
59
|
+
:short => "-s NAMESPACE",
|
60
|
+
:long => "--statsdnamespace NAMESPACE",
|
61
|
+
:description => "statsd namespace."
|
62
|
+
|
63
|
+
option :statsd_host,
|
64
|
+
:short => "-h HOST",
|
65
|
+
:long => "--statsdhost HOST",
|
66
|
+
:description => "statsd host."
|
67
|
+
|
68
|
+
option :statsd_port,
|
69
|
+
:short => "-a PORT",
|
70
|
+
:long => "--statsdport PORT",
|
71
|
+
:description => "statsd port."
|
72
|
+
|
58
73
|
option :resultsfile,
|
59
74
|
:short => "-r FILE",
|
60
75
|
:long => "--results FILE",
|
61
|
-
:default =>
|
76
|
+
:default => false,
|
62
77
|
:description => "Path to where results file is written/read."
|
63
78
|
|
64
79
|
option :help,
|
data/lib/nugget/service.rb
CHANGED
@@ -5,9 +5,11 @@ module Nugget
|
|
5
5
|
Nugget::Log.info("Starting up Nugget in daemon mode ...")
|
6
6
|
|
7
7
|
loop do
|
8
|
+
Nugget::Log.debug("Running tests ...")
|
8
9
|
run(test_name)
|
9
10
|
|
10
11
|
# chill
|
12
|
+
Nugget::Log.debug("Sleeping for #{Nugget::Config.interval.to_i} ...")
|
11
13
|
sleep(Nugget::Config.interval.to_i)
|
12
14
|
end
|
13
15
|
end
|
@@ -23,6 +25,7 @@ module Nugget
|
|
23
25
|
config = parser.parse(config_file)
|
24
26
|
|
25
27
|
results = Hash.new
|
28
|
+
threadlist = Array.new
|
26
29
|
|
27
30
|
if test_name
|
28
31
|
if definition = config[test_name.to_s.to_sym]
|
@@ -32,13 +35,15 @@ module Nugget
|
|
32
35
|
end
|
33
36
|
else
|
34
37
|
config.each do |test, definition|
|
35
|
-
run_test(results, test, definition)
|
38
|
+
threadlist << Thread.new { run_test(results, test, definition) }
|
36
39
|
end
|
37
40
|
end
|
38
41
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
+
threadlist.each { |x|
|
43
|
+
x.join
|
44
|
+
}
|
45
|
+
|
46
|
+
Nugget::Service.write_results(results)
|
42
47
|
end
|
43
48
|
|
44
49
|
def self.run_test(results, test, definition)
|
@@ -49,8 +54,17 @@ module Nugget
|
|
49
54
|
request_definition = config_converter(definition)
|
50
55
|
response_definition = definition[:response]
|
51
56
|
|
52
|
-
|
57
|
+
status = Timeout::timeout(TIMEOUT) {
|
58
|
+
Nugget::Log.debug("Asserting turd definitions ...")
|
59
|
+
response = Turd.run(request_definition, response_definition)
|
60
|
+
}
|
53
61
|
result = "PASS"
|
62
|
+
rescue Timeout::Error => e
|
63
|
+
Nugget::Log.error("#{definition[:type]} test #{test} took too long to run (#{TIMEOUT}s)!")
|
64
|
+
Nugget::Log.error(e)
|
65
|
+
|
66
|
+
result = "FAIL"
|
67
|
+
response = "timeout"
|
54
68
|
rescue Exception => e
|
55
69
|
Nugget::Log.error("#{definition[:type]} test #{test} failed due to #{e.response[:failed]}!")
|
56
70
|
Nugget::Log.error(e)
|
@@ -68,9 +82,7 @@ module Nugget
|
|
68
82
|
:timestamp => Time.now.to_i
|
69
83
|
})
|
70
84
|
|
71
|
-
|
72
|
-
Nugget::Backstop.send_metrics(test, result, response)
|
73
|
-
end
|
85
|
+
send_metrics(test, result, response)
|
74
86
|
end
|
75
87
|
|
76
88
|
def self.config_converter(definition)
|
@@ -95,14 +107,27 @@ module Nugget
|
|
95
107
|
|
96
108
|
def self.write_results(results)
|
97
109
|
begin
|
98
|
-
|
99
|
-
|
100
|
-
|
110
|
+
if Nugget::Config.resultsfile
|
111
|
+
Nugget::Log.debug("Writing results to #{Nugget::Config.resultsfile} ...")
|
112
|
+
file = File.open(Nugget::Config.resultsfile, "w")
|
113
|
+
file.puts(results.to_json)
|
114
|
+
file.close
|
115
|
+
end
|
101
116
|
rescue Exception => e
|
102
117
|
Nugget::Log.error("Something went wrong with writing out the results file!")
|
103
118
|
Nugget::Log.error(e)
|
104
119
|
end
|
105
120
|
end
|
106
121
|
|
122
|
+
def self.send_metrics(test, result, response)
|
123
|
+
if Nugget::Config.backstop_url
|
124
|
+
Nugget::Backstop.send_metrics(test, result, response)
|
125
|
+
end
|
126
|
+
|
127
|
+
if Nugget::Config.statsd_host
|
128
|
+
Nugget::NStatsd.send_metrics(test, result, response)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
107
132
|
end
|
108
133
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Nugget
|
2
|
+
class NStatsd # NStatsd since Statsd collides
|
3
|
+
|
4
|
+
def self.stats
|
5
|
+
@stats ||= Statsd.new(Nugget::Config.statsd_host, Nugget::Config.statsd_port).tap do |statsd|
|
6
|
+
statsd.namespace = Nugget::Config.statsd_namespace
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.send_metrics(name, result, response)
|
11
|
+
statsd = Nugget::NStatsd.stats
|
12
|
+
send_test_result(statsd, name, result)
|
13
|
+
send_test_timings(statsd, name, response)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.send_test_result(statsd, name, result)
|
17
|
+
|
18
|
+
if result == "FAIL"
|
19
|
+
statsd.gauge("#{name}.failures.count", 1)
|
20
|
+
Nugget::Log.debug("Sending the following to statsd: #{name}_failure_count: 1")
|
21
|
+
else
|
22
|
+
statsd.gauge("#{name}.failures.count", 0)
|
23
|
+
Nugget::Log.debug("Sending the following to statsd: #{name}_failure_count: 0")
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.send_test_timings(statsd, name, response)
|
29
|
+
|
30
|
+
response.each do |key, value|
|
31
|
+
if key.to_s.include?("_time")
|
32
|
+
Nugget::Log.debug("Sending the following to statsd: #{key}: #{value}")
|
33
|
+
statsd.timing("#{name}.#{key}", value)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
data/lib/nugget/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nugget
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-10-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mixlib-config
|
@@ -107,6 +107,22 @@ dependencies:
|
|
107
107
|
- - ! '>='
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: statsd-ruby
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
110
126
|
- !ruby/object:Gem::Dependency
|
111
127
|
name: bundler
|
112
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -155,6 +171,7 @@ files:
|
|
155
171
|
- lib/nugget/config.rb
|
156
172
|
- lib/nugget/log.rb
|
157
173
|
- lib/nugget/service.rb
|
174
|
+
- lib/nugget/statsd.rb
|
158
175
|
- lib/nugget/version.rb
|
159
176
|
- lib/nugget/web.rb
|
160
177
|
- lib/nugget.rb
|