omf_ec 6.1.9.pre.2 → 6.1.9.pre.3
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 +7 -0
- data/lib/omf_ec/backward/dsl.rb +1 -0
- data/lib/omf_ec/dsl.rb +69 -0
- data/lib/omf_ec/experiment.rb +29 -2
- data/lib/omf_ec/runner.rb +8 -2
- metadata +31 -38
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4fb7b8aaaec98f0e0002f6bf0acc04ddc7194c0a
|
4
|
+
data.tar.gz: 53e1f7bccb0fffde50263c3e1d960346a64ae541
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d3cbd93c704afc74f0029a6826f8849308670ed0801a71ee6ce75fbff4b6cd6a4c8bc723a9a5e0d8e022979bfc0f79ff92a6f281a7571f90699afe80312bad9e
|
7
|
+
data.tar.gz: 2c0570b792f82fd1db7dc3f24b0de305fcc1a276133f5c0b9be3592edc3019380550e135054f354d9a485f578d66baf2f4ff0fa85deb8f6901ddc7e03a634b65
|
data/lib/omf_ec/backward/dsl.rb
CHANGED
data/lib/omf_ec/dsl.rb
CHANGED
@@ -325,5 +325,74 @@ module OmfEc
|
|
325
325
|
p.name = name
|
326
326
|
block.call(p)
|
327
327
|
end
|
328
|
+
|
329
|
+
# Define a query for measurements
|
330
|
+
# This requires that the EC was started with its JobService related
|
331
|
+
# parameters set (e.g. js_url or job_url)
|
332
|
+
# The EC contacts the JobService and:
|
333
|
+
# 1 - request the creation of a Measurement Point corresponding the query
|
334
|
+
# parameter of this function.
|
335
|
+
# 2 - read the data generated by that query, and return it.
|
336
|
+
#
|
337
|
+
# @param query a SQL query
|
338
|
+
#
|
339
|
+
def def_query(query)
|
340
|
+
raise "No valid URL to connect to the Job Service!" if OmfEc.experiment.job_url.nil?
|
341
|
+
require 'json'
|
342
|
+
require 'net/http'
|
343
|
+
begin
|
344
|
+
# Create a Measurement Point for that Job item
|
345
|
+
unless OmfEc.experiment.job_mps.include?(query)
|
346
|
+
mp = { name: "#{Time.now.to_i}", sql: query }
|
347
|
+
u = URI.parse(OmfEc.experiment.job_url+'/measurement_points')
|
348
|
+
req = Net::HTTP::Post.new(u.path, {'Content-Type' =>'application/json'})
|
349
|
+
req.body = JSON.pretty_generate(mp)
|
350
|
+
res = Net::HTTP.new(u.host, u.port).start {|http| http.request(req) }
|
351
|
+
raise "Could not connect to the service providing measurements\n"+
|
352
|
+
"Response #{res.code} #{res.message}:\n#{res.body}" unless res.kind_of? Net::HTTPSuccess
|
353
|
+
mp = JSON.parse(res.body)
|
354
|
+
raise "No valid URL to connect to the measurement point" if mp['href'].nil?
|
355
|
+
OmfEc.experiment.job_mps[query] = mp['href']
|
356
|
+
end
|
357
|
+
# Read and format data from that Measurement Point
|
358
|
+
u = URI.parse(OmfEc.experiment.job_mps[query]+'/data')
|
359
|
+
res = Net::HTTP.get(u)
|
360
|
+
raise "No valid data from the service providing measurements" if res.nil? || res.empty? || !(res.kind_of? String)
|
361
|
+
resjon = JSON.parse(res)
|
362
|
+
metrics = resjon['schema'].map { |e| e[0] }
|
363
|
+
data = []
|
364
|
+
resjon['data'].each do |a|
|
365
|
+
row = {}
|
366
|
+
a.each_index { |i| row[metrics[i].downcase.to_sym] = a[i] }
|
367
|
+
data << row
|
368
|
+
end
|
369
|
+
return data
|
370
|
+
rescue Exception => ex
|
371
|
+
error "def_query - #{ex}"
|
372
|
+
return nil
|
373
|
+
end
|
374
|
+
end
|
375
|
+
|
376
|
+
# Define a query for measurements, using the Sequel Syntax
|
377
|
+
# Refer to the def_query method above.
|
378
|
+
# In this variant, the query is defined using the Sequel Syntax against a
|
379
|
+
# Measurement Stream which must have been previously defined in the OEDl
|
380
|
+
# experiment (e.g. app.measure('foo') in a addApplication block)
|
381
|
+
#
|
382
|
+
# @param ms_name the name of the existing measurement stream on which to run
|
383
|
+
# this query
|
384
|
+
#
|
385
|
+
def ms(ms_name)
|
386
|
+
db = Sequel.postgres
|
387
|
+
db.instance_variable_set('@server_version', 90105)
|
388
|
+
if (table_name = OmfEc.experiment.mp_table_names[ms_name])
|
389
|
+
msb = OmfEc::Graph::MSBuilder.new(db[table_name.to_sym])
|
390
|
+
else
|
391
|
+
warn "Measurement point '#{ms_name}' NOT defined"
|
392
|
+
end
|
393
|
+
def_query(msb.sql)
|
394
|
+
end
|
395
|
+
|
396
|
+
|
328
397
|
end
|
329
398
|
end
|
data/lib/omf_ec/experiment.rb
CHANGED
@@ -16,7 +16,7 @@ module OmfEc
|
|
16
16
|
|
17
17
|
include MonitorMixin
|
18
18
|
|
19
|
-
attr_accessor :name, :sliceID, :oml_uri, :js_url, :app_definitions, :property, :cmdline_properties, :show_graph, :nodes
|
19
|
+
attr_accessor :name, :sliceID, :oml_uri, :js_url, :job_url, :job_mps, :app_definitions, :property, :cmdline_properties, :show_graph, :nodes
|
20
20
|
attr_reader :groups, :sub_groups, :state
|
21
21
|
|
22
22
|
# MP only used for injecting metadata
|
@@ -41,6 +41,9 @@ module OmfEc
|
|
41
41
|
@sub_groups ||= []
|
42
42
|
@cmdline_properties ||= Hash.new
|
43
43
|
@show_graph = false
|
44
|
+
@js_url = nil
|
45
|
+
@job_url = nil
|
46
|
+
@job_mps = {}
|
44
47
|
end
|
45
48
|
|
46
49
|
def property
|
@@ -198,7 +201,7 @@ module OmfEc
|
|
198
201
|
def eval_trigger(event)
|
199
202
|
if event[:callbacks] && !event[:callbacks].empty? && event[:trigger].call(@state)
|
200
203
|
# Periodic check event
|
201
|
-
event[:periodic_timer].cancel if event[:periodic_timer]
|
204
|
+
event[:periodic_timer].cancel if event[:periodic_timer] && event[:consume_event]
|
202
205
|
|
203
206
|
@events.delete(event) if event[:consume_event]
|
204
207
|
event_names = ([event[:name]] + event[:aliases]).join(', ')
|
@@ -233,6 +236,30 @@ module OmfEc
|
|
233
236
|
)
|
234
237
|
end
|
235
238
|
|
239
|
+
# If EC is launched with --job-service setup, then it needs to
|
240
|
+
# create a job entry for this experiment trial
|
241
|
+
# Do nothing if:
|
242
|
+
# - a JobService URL has not been provided, i.e. EC runs without needs to contact JS
|
243
|
+
# - we already have a Job URL, i.e. the job entry has already been created
|
244
|
+
def create_job
|
245
|
+
return unless @job_url.nil?
|
246
|
+
return if @js_url.nil?
|
247
|
+
require 'json'
|
248
|
+
require 'net/http'
|
249
|
+
begin
|
250
|
+
job = { name: self.id }
|
251
|
+
u = URI.parse(@js_url+'/jobs')
|
252
|
+
req = Net::HTTP::Post.new(u.path, {'Content-Type' =>'application/json'})
|
253
|
+
req.body = JSON.pretty_generate(job)
|
254
|
+
res = Net::HTTP.new(u.host, u.port).start {|http| http.request(req) }
|
255
|
+
raise "Could not create a job for this experiment trial\n"+
|
256
|
+
"Response #{res.code} #{res.message}:\n#{res.body}" unless res.kind_of? Net::HTTPSuccess
|
257
|
+
job = JSON.parse(res.body)
|
258
|
+
raise "No valid URL received for the created job for this experiment trial" if job['href'].nil?
|
259
|
+
@job_url = job['href']
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
236
263
|
# Purely for backward compatibility
|
237
264
|
class << self
|
238
265
|
# Disconnect communicator, try to delete any XMPP affiliations
|
data/lib/omf_ec/runner.rb
CHANGED
@@ -103,9 +103,14 @@ module OmfEc
|
|
103
103
|
remove_cmd_opts_from_argv("--slice", slice)
|
104
104
|
end
|
105
105
|
|
106
|
-
op.on("--
|
106
|
+
op.on("--job-service URL", "URL to the JobService [optional]") do |url|
|
107
107
|
OmfEc.experiment.js_url = url
|
108
|
-
remove_cmd_opts_from_argv("--
|
108
|
+
remove_cmd_opts_from_argv("--job-service", url)
|
109
|
+
end
|
110
|
+
|
111
|
+
op.on("--job-url URL", "URL to the Job for this experiment trial [optional]") do |url|
|
112
|
+
OmfEc.experiment.job_url = url
|
113
|
+
remove_cmd_opts_from_argv("--job-url", url)
|
109
114
|
end
|
110
115
|
|
111
116
|
op.on("--oml_uri URI", "URI for the OML data collection of experiment applications") do |uri|
|
@@ -287,6 +292,7 @@ module OmfEc
|
|
287
292
|
OmfEc.experiment.log_metadata("exp_path", @oedl_path)
|
288
293
|
OmfEc.experiment.log_metadata("ec_pid", "#{Process.pid}")
|
289
294
|
OmfEc.experiment.archive_oedl(@oedl_path)
|
295
|
+
OmfEc.experiment.create_job
|
290
296
|
|
291
297
|
begin
|
292
298
|
load @oedl_path
|
metadata
CHANGED
@@ -1,126 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omf_ec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.1.9.pre.
|
5
|
-
prerelease: 6
|
4
|
+
version: 6.1.9.pre.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- NICTA
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-09 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: minitest
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: simplecov
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: pry
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: mocha
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: evented-spec
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: omf_common
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
87
|
- - '='
|
100
88
|
- !ruby/object:Gem::Version
|
101
|
-
version: 6.1.9.pre.
|
89
|
+
version: 6.1.9.pre.3
|
102
90
|
type: :runtime
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
94
|
- - '='
|
108
95
|
- !ruby/object:Gem::Version
|
109
|
-
version: 6.1.9.pre.
|
96
|
+
version: 6.1.9.pre.3
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: sequel
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - '>='
|
116
102
|
- !ruby/object:Gem::Version
|
117
103
|
version: '0'
|
118
104
|
type: :runtime
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
|
-
- -
|
108
|
+
- - '>='
|
124
109
|
- !ruby/object:Gem::Version
|
125
110
|
version: '0'
|
126
111
|
description: Experiment controller of OMF, a generic framework for controlling and
|
@@ -186,26 +171,34 @@ files:
|
|
186
171
|
homepage: http://omf.mytestbed.net
|
187
172
|
licenses:
|
188
173
|
- MIT
|
174
|
+
metadata: {}
|
189
175
|
post_install_message:
|
190
176
|
rdoc_options: []
|
191
177
|
require_paths:
|
192
178
|
- lib
|
193
179
|
required_ruby_version: !ruby/object:Gem::Requirement
|
194
|
-
none: false
|
195
180
|
requirements:
|
196
|
-
- -
|
181
|
+
- - '>='
|
197
182
|
- !ruby/object:Gem::Version
|
198
183
|
version: 1.9.3
|
199
184
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
200
|
-
none: false
|
201
185
|
requirements:
|
202
|
-
- -
|
186
|
+
- - '>'
|
203
187
|
- !ruby/object:Gem::Version
|
204
188
|
version: 1.3.1
|
205
189
|
requirements: []
|
206
190
|
rubyforge_project: omf_ec
|
207
|
-
rubygems_version: 1.
|
191
|
+
rubygems_version: 2.1.11
|
208
192
|
signing_key:
|
209
|
-
specification_version:
|
193
|
+
specification_version: 4
|
210
194
|
summary: OMF experiment controller
|
211
|
-
test_files:
|
195
|
+
test_files:
|
196
|
+
- test/oedls/empty.oedl
|
197
|
+
- test/omf_ec/app_context_spec.rb
|
198
|
+
- test/omf_ec/context_spec.rb
|
199
|
+
- test/omf_ec/dsl_spec.rb
|
200
|
+
- test/omf_ec/experiment_property_spec.rb
|
201
|
+
- test/omf_ec/experiment_spec.rb
|
202
|
+
- test/omf_ec/group_spec.rb
|
203
|
+
- test/omf_ec/runner_spec.rb
|
204
|
+
- test/test_helper.rb
|