graphite-api 0.1.0 → 0.1.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.
- data/README.md +9 -14
- data/Rakefile +54 -1
- data/lib/graphite-api.rb +6 -2
- data/lib/graphite-api/buffer.rb +2 -5
- data/lib/graphite-api/client.rb +13 -61
- data/lib/graphite-api/connector.rb +6 -17
- data/lib/graphite-api/middleware.rb +1 -1
- data/lib/graphite-api/runner.rb +3 -3
- data/lib/graphite-api/version.rb +1 -1
- metadata +2 -4
- data/tasks/build.rake +0 -32
- data/tasks/tests.rake +0 -42
data/README.md
CHANGED
@@ -50,7 +50,7 @@ Creating a new client instance
|
|
50
50
|
```ruby
|
51
51
|
require 'graphite-api'
|
52
52
|
|
53
|
-
GraphiteAPI
|
53
|
+
GraphiteAPI.new(
|
54
54
|
graphite: "graphite.example.com:2003", # required argument
|
55
55
|
prefix: ["example","prefix"], # add example.prefix to each key
|
56
56
|
slice: 60, # results are aggregated in 60 seconds slices
|
@@ -64,7 +64,7 @@ Adding simple metrics
|
|
64
64
|
```ruby
|
65
65
|
require 'graphite-api'
|
66
66
|
|
67
|
-
client = GraphiteAPI
|
67
|
+
client = GraphiteAPI.new( graphite: 'graphite:2003' )
|
68
68
|
|
69
69
|
client.metrics "webServer.web01.loadAvg" => 10.7
|
70
70
|
# => webServer.web01.loadAvg 10.7 time.now.to_i
|
@@ -81,7 +81,7 @@ Adding metrics with timestamp
|
|
81
81
|
```ruby
|
82
82
|
require 'graphite-api'
|
83
83
|
|
84
|
-
client = GraphiteAPI
|
84
|
+
client = GraphiteAPI.new( graphite: 'graphite:2003' )
|
85
85
|
|
86
86
|
client.metrics({
|
87
87
|
"webServer.web01.loadAvg" => 10.7,
|
@@ -95,7 +95,7 @@ Increment records
|
|
95
95
|
```ruby
|
96
96
|
require 'graphite-api'
|
97
97
|
|
98
|
-
client = GraphiteAPI
|
98
|
+
client = GraphiteAPI.new( graphite: 'graphite:2003' )
|
99
99
|
|
100
100
|
client.increment("jobs_in_queue", "num_errors")
|
101
101
|
# => jobs_in_queue 1 Time.now.to_i
|
@@ -115,7 +115,7 @@ Some DSL sweetness
|
|
115
115
|
```ruby
|
116
116
|
require 'graphite-api'
|
117
117
|
|
118
|
-
client = GraphiteAPI
|
118
|
+
client = GraphiteAPI.new( graphite: 'graphite:2003' )
|
119
119
|
|
120
120
|
client.webServer.web01.loadAvg 10.7
|
121
121
|
# => webServer.web01.loadAvg 10.7 time.now.to_i
|
@@ -128,7 +128,7 @@ Built-in timers support
|
|
128
128
|
```ruby
|
129
129
|
require 'graphite-api'
|
130
130
|
|
131
|
-
client = GraphiteAPI
|
131
|
+
client = GraphiteAPI.new( graphite: 'graphite:2003' )
|
132
132
|
|
133
133
|
# lets send the metric every 120 seconds
|
134
134
|
client.every(120) do |c|
|
@@ -141,7 +141,7 @@ Built-in extension for time declarations stuff, like 2.minutes, 3.hours etc...
|
|
141
141
|
require 'graphite-api'
|
142
142
|
require 'graphite-api/core_ext/numeric'
|
143
143
|
|
144
|
-
client = GraphiteAPI
|
144
|
+
client = GraphiteAPI.new( graphite: 'graphite:2003' )
|
145
145
|
|
146
146
|
client.every 10.seconds do |c|
|
147
147
|
c.metrics("webServer.web01.uptime" => `uptime`.split.first.to_i)
|
@@ -157,7 +157,7 @@ Make your own custom metrics daemons, using `client#join`
|
|
157
157
|
require 'graphite-api'
|
158
158
|
require 'graphite-api/core_ext/numeric'
|
159
159
|
|
160
|
-
client = GraphiteAPI
|
160
|
+
client = GraphiteAPI.new( graphite: 'graphite:2003' )
|
161
161
|
|
162
162
|
client.every 26.minutes do |c|
|
163
163
|
c.metrics("webServer.shuki.stats" => 10)
|
@@ -185,8 +185,6 @@ GraphiteAPI::Logger.init(
|
|
185
185
|
)
|
186
186
|
```
|
187
187
|
|
188
|
-
> more examples can be found [here](https://github.com/kontera-technologies/graphite-api/tree/master/examples).
|
189
|
-
|
190
188
|
## GraphiteAPI-Middleware Usage
|
191
189
|
* After installing GraphiteAPI gem, the `graphite-middleware` command should be available.
|
192
190
|
|
@@ -239,15 +237,12 @@ example.middleware.value2 99 1334929231
|
|
239
237
|
|
240
238
|
```ruby
|
241
239
|
require 'graphite-api'
|
242
|
-
client = GraphiteAPI
|
240
|
+
client = GraphiteAPI.new(:graphite => 'graphite-middleware-node:2005')
|
243
241
|
client.example.middleware.value 10.2
|
244
242
|
client.example.middleware.value2 27
|
245
243
|
client.bla.bla.value2 27
|
246
244
|
```
|
247
245
|
|
248
|
-
> more examples can be found [here](https://github.com/kontera-technologies/graphite-api/tree/master/examples).
|
249
|
-
|
250
|
-
|
251
246
|
## Example Setup
|
252
247
|
<br/>
|
253
248
|
<img src="https://raw.github.com/kontera-technologies/graphite-api/master/examples/middleware_t1.png" align="center">
|
data/Rakefile
CHANGED
@@ -2,9 +2,62 @@ $:.unshift File.join(File.dirname(__FILE__), 'lib')
|
|
2
2
|
Dir.chdir File.dirname __FILE__
|
3
3
|
|
4
4
|
require 'graphite-api'
|
5
|
+
require "rake/testtask"
|
6
|
+
require 'rubygems/package_task'
|
5
7
|
|
6
8
|
def message msg
|
7
9
|
puts "*** #{msg} ***"
|
8
10
|
end
|
9
11
|
|
10
|
-
|
12
|
+
task(:test => :functional) { ENV['with_coverage'] = "true" }
|
13
|
+
|
14
|
+
Rake::TestTask.new(:test) do |t|
|
15
|
+
t.libs << "tests"
|
16
|
+
t.pattern = "tests/**/*_test.rb"
|
17
|
+
end
|
18
|
+
|
19
|
+
task :functional do
|
20
|
+
some_failed = false
|
21
|
+
|
22
|
+
next unless ENV['SKIP_FUNC'].nil?
|
23
|
+
|
24
|
+
unless RUBY_COPYRIGHT.end_with?("Matsumoto")
|
25
|
+
puts("Functional tests are enabled only on MRI...")
|
26
|
+
next
|
27
|
+
end
|
28
|
+
|
29
|
+
message "Executing GraphiteAPI Functional Tests"
|
30
|
+
message "( You can skip them by passing SKIP_FUNC=true )"
|
31
|
+
|
32
|
+
Dir[File.expand_path("../tests/functional/*",__FILE__)].each do |file|
|
33
|
+
next unless file.end_with?(".rb")
|
34
|
+
now = Time.now.to_i
|
35
|
+
name = File.basename(file)
|
36
|
+
message "Executing #{name}"
|
37
|
+
Process.waitpid(Process.spawn("ruby", File.expand_path(file)))
|
38
|
+
took = "took #{Time.now.to_i - now} seconds"
|
39
|
+
if $?.success?
|
40
|
+
message "[PASS] #{name}, #{took}"
|
41
|
+
else
|
42
|
+
message "[FAIL] #{name}, #{took}"
|
43
|
+
some_failed = true
|
44
|
+
end
|
45
|
+
end
|
46
|
+
message "Done Executing GraphiteAPI Functional Tests"
|
47
|
+
abort "Some functional tests failed..." if some_failed
|
48
|
+
end
|
49
|
+
|
50
|
+
task :default => :test
|
51
|
+
|
52
|
+
task :gem => [:test,:clobber_package]
|
53
|
+
|
54
|
+
GraphiteAPI::GemSpec = eval File.read 'graphite-api.gemspec'
|
55
|
+
|
56
|
+
Gem::PackageTask.new(GraphiteAPI::GemSpec) do |p|
|
57
|
+
p.gem_spec = GraphiteAPI::GemSpec
|
58
|
+
end
|
59
|
+
|
60
|
+
task :install => [:gem] do
|
61
|
+
sh "gem install pkg/graphite-api"
|
62
|
+
Rake::Task['clobber_package'].execute
|
63
|
+
end
|
data/lib/graphite-api.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'zscheduler'
|
2
2
|
|
3
3
|
module GraphiteAPI
|
4
|
-
ROOT = File.expand_path
|
4
|
+
ROOT = File.expand_path File.dirname __FILE__
|
5
|
+
|
5
6
|
require "#{ROOT}/graphite-api/version"
|
6
7
|
|
7
8
|
autoload :Version, "#{ROOT}/graphite-api/version"
|
8
9
|
autoload :Client, "#{ROOT}/graphite-api/client"
|
9
10
|
autoload :Cache, "#{ROOT}/graphite-api/cache"
|
10
|
-
autoload :Reactor, "#{ROOT}/graphite-api/reactor"
|
11
11
|
autoload :Connector, "#{ROOT}/graphite-api/connector"
|
12
12
|
autoload :Middleware, "#{ROOT}/graphite-api/middleware"
|
13
13
|
autoload :Runner, "#{ROOT}/graphite-api/runner"
|
@@ -20,4 +20,8 @@ module GraphiteAPI
|
|
20
20
|
GraphiteAPI::VERSION
|
21
21
|
end
|
22
22
|
|
23
|
+
def self.new options
|
24
|
+
Client.new options
|
25
|
+
end
|
26
|
+
|
23
27
|
end
|
data/lib/graphite-api/buffer.rb
CHANGED
@@ -31,10 +31,7 @@ module GraphiteAPI
|
|
31
31
|
@options = options
|
32
32
|
@queue = Queue.new
|
33
33
|
@streamer = Hash.new {|h,k| h[k] = ""}
|
34
|
-
|
35
|
-
if options[:cache]
|
36
|
-
@cache = Cache::Memory.new options
|
37
|
-
end
|
34
|
+
@cache = Cache::Memory.new options if options[:cache]
|
38
35
|
end
|
39
36
|
|
40
37
|
private_reader :queue, :options, :streamer, :cache
|
@@ -91,7 +88,7 @@ module GraphiteAPI
|
|
91
88
|
|
92
89
|
def inspect
|
93
90
|
"#<GraphiteAPI::Buffer:%s @quque#size=%s @streamer=%s>" %
|
94
|
-
[object_id,queue.size,streamer]
|
91
|
+
[ object_id, queue.size, streamer]
|
95
92
|
end
|
96
93
|
|
97
94
|
private
|
data/lib/graphite-api/client.rb
CHANGED
@@ -1,63 +1,17 @@
|
|
1
|
-
# -----------------------------------------------------
|
2
|
-
# Graphite Client
|
3
|
-
# Send metrics to graphite (or to some kind of middleware/proxy)
|
4
|
-
# -----------------------------------------------------
|
5
|
-
# Usage
|
6
|
-
#
|
7
|
-
# client = GraphiteAPI::Client.new(
|
8
|
-
# :graphite => "graphite.example.com:2003",
|
9
|
-
# :prefix => ["example","prefix"], # add example.prefix to each key
|
10
|
-
# :slice => 60.seconds # results are aggregated in 60 seconds slices
|
11
|
-
# :interval => 60.seconds # send to graphite every 60 seconds
|
12
|
-
# )
|
13
|
-
#
|
14
|
-
# client.webServer.web01.loadAvg 10.7
|
15
|
-
# # => example.prefix.webServer.web01.loadAvg 10.7 time.now.to_i
|
16
|
-
|
17
|
-
# client.metrics "webServer.web01.loadAvg" => 10.7
|
18
|
-
# # => example.prefix.webServer.web01.loadAvg 10.7 time.now.to_i
|
19
|
-
#
|
20
|
-
# client.metrics({
|
21
|
-
# "webServer.web01.loadAvg" => 10.7,
|
22
|
-
# "webServer.web01.memUsage" => 40
|
23
|
-
# },Time.at(1326067060))
|
24
|
-
# # => example.prefix.webServer.web01.loadAvg 10.7 1326067060
|
25
|
-
# # => example.prefix.webServer.web01.memUsage 40 1326067060
|
26
|
-
#
|
27
|
-
# # Timers
|
28
|
-
# client.every 10.seconds do |c|
|
29
|
-
# c.webServer.web01.uptime `uptime`.split.first.to_i
|
30
|
-
# # => example.prefix.webServer.web01.uptime 40 1326067060
|
31
|
-
# end
|
32
|
-
#
|
33
|
-
# client.every 52.minutes do |c|
|
34
|
-
# c.abcd.efghi.jklmnop.qrst 12
|
35
|
-
# # => example.prefix.abcd.efghi.jklmnop.qrst 12 1326067060
|
36
|
-
# end
|
37
|
-
#
|
38
|
-
# client.join # wait...
|
39
|
-
# -----------------------------------------------------
|
40
|
-
|
41
1
|
require File.expand_path '../utils', __FILE__
|
42
2
|
|
43
3
|
module GraphiteAPI
|
44
4
|
class Client
|
45
5
|
include Utils
|
46
6
|
|
47
|
-
private_reader :options, :buffer, :connectors
|
7
|
+
private_reader :options, :buffer, :connectors
|
48
8
|
|
49
9
|
def initialize opt
|
50
10
|
@options = build_options validate opt.clone
|
51
11
|
@buffer = GraphiteAPI::Buffer.new options
|
52
12
|
@connectors = GraphiteAPI::Connector::Group.new options
|
53
|
-
|
54
|
-
|
55
|
-
if direct_send
|
56
|
-
options[:slice] = 1
|
57
|
-
else
|
58
|
-
every(options.fetch(:interval),&method(:send_metrics))
|
59
|
-
end
|
60
|
-
|
13
|
+
|
14
|
+
every options[:interval], &method(:send_metrics) if !options[:direct]
|
61
15
|
end
|
62
16
|
|
63
17
|
def_delegator Zscheduler, :loop, :join
|
@@ -68,8 +22,9 @@ module GraphiteAPI
|
|
68
22
|
end
|
69
23
|
|
70
24
|
def metrics metric, time = Time.now
|
25
|
+
return if metric.empty?
|
71
26
|
buffer.push :metric => metric, :time => time
|
72
|
-
send_metrics if
|
27
|
+
send_metrics if options[:direct]
|
73
28
|
end
|
74
29
|
|
75
30
|
alias_method :add_metrics, :metrics
|
@@ -104,26 +59,21 @@ module GraphiteAPI
|
|
104
59
|
protected
|
105
60
|
|
106
61
|
class Proxy
|
107
|
-
include Utils
|
108
|
-
|
109
62
|
def initialize client
|
110
|
-
@client = client
|
111
|
-
@keys = []
|
63
|
+
@client, @keys = client, []
|
112
64
|
end
|
113
65
|
|
114
|
-
private_reader :client, :keys
|
115
|
-
|
116
66
|
def method_missing m, *args, &block
|
117
|
-
keys.push
|
118
|
-
|
119
|
-
super
|
67
|
+
if @keys.push(m).size > 10
|
68
|
+
super # too deep
|
120
69
|
elsif args.any?
|
121
|
-
client.metrics
|
70
|
+
@client.metrics Hash[
|
71
|
+
@keys.join('.'), args.first
|
72
|
+
], *args[1..-1]
|
122
73
|
else
|
123
74
|
self
|
124
75
|
end
|
125
76
|
end
|
126
|
-
|
127
77
|
end
|
128
78
|
|
129
79
|
def validate options
|
@@ -136,6 +86,8 @@ module GraphiteAPI
|
|
136
86
|
default_options.tap do |options_hash|
|
137
87
|
options_hash[:backends].push expand_host opt.delete :graphite
|
138
88
|
options_hash.merge! opt
|
89
|
+
options_hash[:direct] = options_hash[:interval] == 0
|
90
|
+
options_hash[:slice] = 1 if options_hash[:direct]
|
139
91
|
end
|
140
92
|
end
|
141
93
|
|
@@ -13,34 +13,23 @@ require 'socket'
|
|
13
13
|
module GraphiteAPI
|
14
14
|
class Connector
|
15
15
|
class Group
|
16
|
-
include Utils
|
17
|
-
|
18
|
-
private_reader :options, :connectors
|
19
|
-
|
20
16
|
def initialize options
|
21
|
-
@options = options
|
22
17
|
@connectors = options[:backends].map { |o| Connector.new(*o) }
|
23
18
|
end
|
24
19
|
|
25
20
|
def publish messages
|
26
|
-
debug [:connector_group
|
27
|
-
Array(messages).each { |msg| connectors.map {|c| c.puts msg} }
|
21
|
+
Logger.debug [:connector_group, :publish, messages.size, @connectors]
|
22
|
+
Array(messages).each { |msg| @connectors.map {|c| c.puts msg} }
|
28
23
|
end
|
29
|
-
|
30
24
|
end
|
31
|
-
|
32
|
-
include Utils
|
33
25
|
|
34
26
|
def initialize host, port
|
35
|
-
@host = host
|
36
|
-
@port = port
|
27
|
+
@host, @port = host, port
|
37
28
|
end
|
38
29
|
|
39
|
-
private_reader :host, :port
|
40
|
-
|
41
30
|
def puts message
|
42
31
|
begin
|
43
|
-
debug [:connector,:puts,[host,port].join(":"),message]
|
32
|
+
Logger.debug [:connector,:puts,[@host, @port].join(":"),message]
|
44
33
|
socket.puts message + "\n"
|
45
34
|
rescue Errno::EPIPE, Errno::EINVAL
|
46
35
|
@socket = nil
|
@@ -56,8 +45,8 @@ module GraphiteAPI
|
|
56
45
|
|
57
46
|
def socket
|
58
47
|
if @socket.nil? || @socket.closed?
|
59
|
-
debug [:connector,[host
|
60
|
-
@socket = ::TCPSocket.new host, port
|
48
|
+
Logger.debug [:connector,[@host,@port]]
|
49
|
+
@socket = ::TCPSocket.new @host, @port
|
61
50
|
end
|
62
51
|
@socket
|
63
52
|
end
|
@@ -66,7 +66,7 @@ module GraphiteAPI
|
|
66
66
|
end
|
67
67
|
|
68
68
|
# Send metrics to graphite every X seconds
|
69
|
-
Zscheduler.every(options[:interval]
|
69
|
+
Zscheduler.every(options[:interval], :on_shutdown => true) do
|
70
70
|
group.publish buffer.pull :string if buffer.new_records?
|
71
71
|
end
|
72
72
|
|
data/lib/graphite-api/runner.rb
CHANGED
@@ -11,12 +11,12 @@ module GraphiteAPI
|
|
11
11
|
|
12
12
|
def run
|
13
13
|
Logger.init Hash[[:std,:level].zip options.values_at(:log_file, :log_level) ]
|
14
|
-
options[:daemonize] ? daemonize(options[:pid]
|
14
|
+
options[:daemonize] ? daemonize(options[:pid], &method(:run!)) : run!
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
18
18
|
|
19
|
-
def daemonize pid
|
19
|
+
def daemonize pid, &block
|
20
20
|
block_given? or raise ArgumentError.new "the block is missing..."
|
21
21
|
|
22
22
|
fork do
|
@@ -27,7 +27,7 @@ module GraphiteAPI
|
|
27
27
|
STDOUT.reopen('/dev/null','a')
|
28
28
|
STDERR.reopen('/dev/null','a')
|
29
29
|
File.open(pid,'w') { |f| f.write(Process.pid) } rescue nil
|
30
|
-
|
30
|
+
block.call
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
data/lib/graphite-api/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphite-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
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: 2013-05-
|
12
|
+
date: 2013-05-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: eventmachine
|
@@ -66,8 +66,6 @@ files:
|
|
66
66
|
- lib/graphite-api/utils.rb
|
67
67
|
- lib/graphite-api/version.rb
|
68
68
|
- lib/graphite-api.rb
|
69
|
-
- tasks/build.rake
|
70
|
-
- tasks/tests.rake
|
71
69
|
homepage: http://www.kontera.com
|
72
70
|
licenses: []
|
73
71
|
post_install_message:
|
data/tasks/build.rake
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'rubygems/package_task'
|
2
|
-
|
3
|
-
GraphiteAPI::GemSpec = Gem::Specification.new do |s|
|
4
|
-
s.name = "graphite-api"
|
5
|
-
s.version = GraphiteAPI.version
|
6
|
-
s.platform = Gem::Platform::RUBY
|
7
|
-
s.summary = "Graphite Ruby Client"
|
8
|
-
s.description = "Graphite API - A Simple ruby client, aggregator daemon and API tools"
|
9
|
-
s.author = "Eran Barak Levi"
|
10
|
-
s.email = 'eran@kontera.com'
|
11
|
-
s.homepage = 'http://www.kontera.com'
|
12
|
-
s.executables = %w(graphite-middleware)
|
13
|
-
s.required_ruby_version = '>= 1.8.7'
|
14
|
-
s.rubyforge_project = "graphite-api"
|
15
|
-
s.files = %w(README.md Rakefile) + Dir.glob("{bin,lib,test,tasks}/**/*")
|
16
|
-
s.require_path = "lib"
|
17
|
-
s.bindir = "bin"
|
18
|
-
|
19
|
-
s.add_dependency 'eventmachine','>= 0.3.3'
|
20
|
-
s.add_dependency 'zscheduler', '>= 0.0.3'
|
21
|
-
end
|
22
|
-
|
23
|
-
task :gem => [:test,:clobber_package]
|
24
|
-
|
25
|
-
Gem::PackageTask.new(GraphiteAPI::GemSpec) do |p|
|
26
|
-
p.gem_spec = GraphiteAPI::GemSpec
|
27
|
-
end
|
28
|
-
|
29
|
-
task :install => [:gem] do
|
30
|
-
sh "gem install pkg/graphite-api"
|
31
|
-
Rake::Task['clobber_package'].execute
|
32
|
-
end
|
data/tasks/tests.rake
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
require "rake/testtask"
|
2
|
-
|
3
|
-
task(:test => :functional) { ENV['with_coverage'] = "true" }
|
4
|
-
|
5
|
-
Rake::TestTask.new(:test) do |t|
|
6
|
-
t.libs << "tests"
|
7
|
-
t.pattern = "tests/**/*_test.rb"
|
8
|
-
end
|
9
|
-
|
10
|
-
|
11
|
-
task :functional do
|
12
|
-
some_failed = false
|
13
|
-
|
14
|
-
next unless ENV['SKIP_FUNC'].nil?
|
15
|
-
|
16
|
-
unless RUBY_COPYRIGHT.end_with?("Matsumoto")
|
17
|
-
puts("Functional tests are enabled only on MRI...")
|
18
|
-
next
|
19
|
-
end
|
20
|
-
|
21
|
-
message "Executing GraphiteAPI Functional Tests"
|
22
|
-
message "( You can skip them by passing SKIP_FUNC=true )"
|
23
|
-
|
24
|
-
Dir[File.expand_path("../../tests/functional/*",__FILE__)].each do |file|
|
25
|
-
next unless file.end_with?(".rb")
|
26
|
-
now = Time.now.to_i
|
27
|
-
name = File.basename(file)
|
28
|
-
message "Executing #{name}"
|
29
|
-
Process.waitpid(Process.spawn("ruby", File.expand_path(file)))
|
30
|
-
took = "took #{Time.now.to_i - now} seconds"
|
31
|
-
if $?.success?
|
32
|
-
message "[PASS] #{name}, #{took}"
|
33
|
-
else
|
34
|
-
message "[FAIL] #{name}, #{took}"
|
35
|
-
some_failed = true
|
36
|
-
end
|
37
|
-
end
|
38
|
-
message "Done Executing GraphiteAPI Functional Tests"
|
39
|
-
abort "Some functional tests failed..." if some_failed
|
40
|
-
end
|
41
|
-
|
42
|
-
task :default => :test
|