laborantin 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/bin/files/environments/environment.rb.erb +3 -6
- data/bin/files/scenarii/scenario.rb.erb +8 -0
- data/bin/labor +5 -31
- data/lib/laborantin.rb +1 -1
- data/lib/laborantin/core/environment.rb +26 -4
- data/lib/laborantin/core/scenario.rb +47 -28
- metadata +2 -2
data/Rakefile
CHANGED
@@ -3,11 +3,8 @@
|
|
3
3
|
class <%= e.camelize %> < Laborantin::Environment
|
4
4
|
|
5
5
|
describe "Place your description here"
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
def good_platform?
|
10
|
-
RUBY_PLATFORM =~ /linux/
|
11
|
-
end
|
6
|
+
#verify :instance_meth1, ...
|
7
|
+
#setup :instance_meth2, ...
|
8
|
+
#teardown :instance_meth3, ...
|
12
9
|
|
13
10
|
end
|
@@ -2,4 +2,12 @@
|
|
2
2
|
|
3
3
|
class <%= s.camelize %> < Laborantin::Scenario
|
4
4
|
describe "put your decription here"
|
5
|
+
# parameter(:param_name) do
|
6
|
+
# values 1, 2, 3, 4, ...
|
7
|
+
# describe "put your parameter description here"
|
8
|
+
# end
|
9
|
+
#
|
10
|
+
# setup :instance_meth1, ...
|
11
|
+
# teardown :instance_meth2, ...
|
12
|
+
# produces :instance_meth3, ...
|
5
13
|
end
|
data/bin/labor
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'optparse'
|
4
|
-
|
4
|
+
require 'rubygems'
|
5
5
|
require 'laborantin'
|
6
6
|
#require '../lib/laborantin'
|
7
7
|
require 'fileutils'
|
@@ -162,34 +162,9 @@ Command.new('scan', "scan a laborantin's dir for results") do |c|
|
|
162
162
|
require f if File.extname(f) == '.rb'
|
163
163
|
end
|
164
164
|
|
165
|
-
envs =
|
166
|
-
|
167
|
-
|
168
|
-
Dir.entries('results').each do |f|
|
169
|
-
envklass = Laborantin::Environment.all.find{|e| e.name.duck_case == f} #TODO: pass that in the class
|
170
|
-
if envklass
|
171
|
-
Dir.entries(envklass.envdir).each do |e|
|
172
|
-
if e =~ /\d+-\w+-\d+_\d+-\d+-\d+/
|
173
|
-
env = envklass.new #XXX: don't prepare! it hence don't overwrite logs
|
174
|
-
envs << env
|
175
|
-
env.rundir = File.join(envklass.envdir, e)
|
176
|
-
Dir.entries(env.rundir).each do |s|
|
177
|
-
scklass = Laborantin::Scenario.all.find{|t| t.name.duck_case == s}
|
178
|
-
if scklass
|
179
|
-
Dir.entries(scklass.scenardir(env)).each do |r|
|
180
|
-
if r =~ /\d+-\w+-\d+_\d+-\d+-\d+/
|
181
|
-
scenar = scklass.new(env)
|
182
|
-
scs << scenar
|
183
|
-
scenar.rundir = File.join(scklass.scenardir(env), r)
|
184
|
-
YAML.load_file(File.join(scenar.rundir, 'config.yaml'))
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
|
-
end
|
189
|
-
end
|
190
|
-
end
|
191
|
-
end
|
192
|
-
end #Dir
|
165
|
+
envs = Laborantin::Environment.scan_resdir('results')
|
166
|
+
|
167
|
+
scs = envs.map{|env| env.populate }.flatten
|
193
168
|
|
194
169
|
puts "Laborantin' summary:"
|
195
170
|
Laborantin::Environment.all.each do |envklass|
|
@@ -240,7 +215,7 @@ Command.new('run', 'actually perform measurements') do |c|
|
|
240
215
|
|
241
216
|
envs.each do |eklass|
|
242
217
|
env = eklass.new
|
243
|
-
|
218
|
+
if env.valid?
|
244
219
|
env.prepare!
|
245
220
|
env.log "Running matching scenarii", :info #TODO: pass the logging+running in the env
|
246
221
|
scii.each do |sklass|
|
@@ -253,7 +228,6 @@ Command.new('run', 'actually perform measurements') do |c|
|
|
253
228
|
sc.analyze!
|
254
229
|
end
|
255
230
|
end
|
256
|
-
env.analyze!
|
257
231
|
env.teardown!
|
258
232
|
env.log "Scenarii performed", :info
|
259
233
|
end
|
data/lib/laborantin.rb
CHANGED
@@ -28,7 +28,7 @@ require File.join(File.dirname(__FILE__), 'laborantin', 'core', 'environment')
|
|
28
28
|
require File.join(File.dirname(__FILE__), 'laborantin', 'core', 'monkey_patches')
|
29
29
|
|
30
30
|
module Laborantin
|
31
|
-
VERSION = '0.0.
|
31
|
+
VERSION = '0.0.9'
|
32
32
|
AUTHORS = ['Lucas Di Cioccio']
|
33
33
|
WEBSITE = 'http://dicioccio.fr'
|
34
34
|
LICENSE = 'GNU GPL version 3'
|
@@ -29,6 +29,24 @@ module Laborantin
|
|
29
29
|
class Environment
|
30
30
|
@@all = []
|
31
31
|
@@rootdir = '.'
|
32
|
+
|
33
|
+
def self.scan_resdir(dir)
|
34
|
+
ret = []
|
35
|
+
Dir.entries(dir).each do |f|
|
36
|
+
envklass = Laborantin::Environment.all.find{|e| e.name.duck_case == f}
|
37
|
+
if envklass
|
38
|
+
Dir.entries(envklass.envdir).each do |e|
|
39
|
+
if e =~ /\d+-\w+-\d+_\d+-\d+-\d+/
|
40
|
+
env = envklass.new #XXX don't prepare! it hence don't overwrite logs
|
41
|
+
env.rundir = File.join(envklass.envdir, e)
|
42
|
+
ret << env
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
ret
|
48
|
+
end
|
49
|
+
|
32
50
|
class << self
|
33
51
|
attr_accessor :verifications, :description, :envdir, :hooks
|
34
52
|
|
@@ -90,6 +108,10 @@ module Laborantin
|
|
90
108
|
@loggers = []
|
91
109
|
end
|
92
110
|
|
111
|
+
def valid?
|
112
|
+
self.class.verifications.find{|v| not send(v)}.nil?
|
113
|
+
end
|
114
|
+
|
93
115
|
def prepare!
|
94
116
|
FileUtils.mkdir_p(rundir) #TODO: ensure unicity
|
95
117
|
@loggers << Logger.new(File.join(rundir, 'environment.log'))
|
@@ -103,14 +125,14 @@ module Laborantin
|
|
103
125
|
call_hooks :teardown
|
104
126
|
end
|
105
127
|
|
106
|
-
def analyze!
|
107
|
-
#TODO
|
108
|
-
end
|
109
|
-
|
110
128
|
def log(str, lvl=:debug)
|
111
129
|
@loggers.each{|l| l.send(lvl, str)}
|
112
130
|
end
|
113
131
|
|
132
|
+
def populate
|
133
|
+
Laborantin::Scenario.scan_env(self)
|
134
|
+
end
|
135
|
+
|
114
136
|
private
|
115
137
|
|
116
138
|
def call_hooks(name)
|
@@ -30,57 +30,76 @@ require 'yaml'
|
|
30
30
|
module Laborantin
|
31
31
|
class Scenario
|
32
32
|
@@all = []
|
33
|
+
|
34
|
+
def self.scan_env(env)
|
35
|
+
scs = []
|
36
|
+
Dir.entries(env.rundir).each do |s|
|
37
|
+
scklass = Laborantin::Scenario.all.find{|t| t.name.duck_case == s}
|
38
|
+
if scklass
|
39
|
+
Dir.entries(scklass.scenardir(env)).each do |r|
|
40
|
+
if r =~ /\d+-\w+-\d+_\d+-\d+-\d+/
|
41
|
+
scenar = scklass.new(env)
|
42
|
+
scs << scenar
|
43
|
+
scenar.rundir = File.join(scklass.scenardir(env), r)
|
44
|
+
YAML.load_file(File.join(scenar.rundir, 'config.yaml'))
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
scs
|
50
|
+
end
|
51
|
+
|
33
52
|
class << self
|
34
53
|
attr_accessor :description, :parameters, :products, :hooks
|
35
54
|
|
36
55
|
def inherited(klass)
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
56
|
+
klass.parameters = ParameterHash.new
|
57
|
+
klass.description = ''
|
58
|
+
klass.products = []
|
59
|
+
klass.hooks = {:setup => [], :teardown => []}
|
60
|
+
@@all << klass
|
42
61
|
end
|
43
62
|
|
44
63
|
def describe(str)
|
45
|
-
|
64
|
+
self.description = str
|
46
65
|
end
|
47
66
|
|
48
67
|
def setup(*args)
|
49
|
-
|
68
|
+
self.hooks[:setup] = [*args].flatten
|
50
69
|
end
|
51
70
|
|
52
71
|
def teardown(*args)
|
53
|
-
|
72
|
+
self.hooks[:teardown] = [*args].flatten
|
54
73
|
end
|
55
74
|
|
56
75
|
|
57
76
|
def parameter(name, &blk)
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
77
|
+
raise ArgumentError.new("Parameter #{name} already exists") if self.parameters[name]
|
78
|
+
param = ParameterRange.new(name)
|
79
|
+
param.instance_eval &blk
|
80
|
+
self.parameters[name] = param
|
62
81
|
end
|
63
82
|
|
64
83
|
def produces(*args)
|
65
|
-
|
84
|
+
self.products = [*args].flatten
|
66
85
|
end
|
67
86
|
|
68
87
|
def to_s
|
69
|
-
|
88
|
+
"#{self.name}:\n\t#{self.description}\n#{self.parameters}"
|
70
89
|
end
|
71
90
|
|
72
91
|
def all
|
73
|
-
|
92
|
+
@@all
|
74
93
|
end
|
75
94
|
|
76
95
|
def scenardir(env=nil)
|
77
|
-
|
78
|
-
|
96
|
+
envdir = env.rundir || '.'
|
97
|
+
File.join(envdir, self.name.duck_case)
|
79
98
|
end
|
80
99
|
end # class <<
|
81
100
|
|
82
101
|
attr_accessor :params, :environment, :date, :rundir
|
83
|
-
|
102
|
+
|
84
103
|
def initialize(env, params={})
|
85
104
|
@environment = env
|
86
105
|
@params = params
|
@@ -101,9 +120,9 @@ module Laborantin
|
|
101
120
|
call_hooks :setup
|
102
121
|
log "Starting measurement"
|
103
122
|
raw_result_file('w') do |f|
|
104
|
-
|
105
|
-
|
106
|
-
|
123
|
+
run do |l|
|
124
|
+
f.puts l
|
125
|
+
end
|
107
126
|
end
|
108
127
|
log "Measurement finished"
|
109
128
|
call_hooks :teardown
|
@@ -111,13 +130,13 @@ module Laborantin
|
|
111
130
|
|
112
131
|
def analyze!
|
113
132
|
self.class.products.each do |name|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
133
|
+
log "Producing #{name}"
|
134
|
+
product_file(name.to_s, 'w') do |f|
|
135
|
+
send name do |l|
|
136
|
+
f.puts l
|
137
|
+
end
|
138
|
+
end
|
139
|
+
log "Product #{name} done"
|
121
140
|
end
|
122
141
|
end
|
123
142
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: laborantin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Di Cioccio Lucas
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-07-
|
12
|
+
date: 2009-07-27 00:00:00 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|