omf_ec 6.1.9.pre.2 → 6.1.9.pre.3

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -19,6 +19,7 @@ module OmfEc
19
19
  v5_style(:defGroup, base)
20
20
  v5_style(:loadOEDL, base)
21
21
  v5_style(:ensureProperty, base)
22
+ v5_style(:defQuery, base)
22
23
  end
23
24
 
24
25
  def v5_style(name, base)
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
@@ -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("--job_service URL", "URL to the JobService [optional]") do |url|
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("--job_service", url)
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.2
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-08 00:00:00.000000000 Z
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.2
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.2
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.8.23
191
+ rubygems_version: 2.1.11
208
192
  signing_key:
209
- specification_version: 3
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