omf_ec 6.0.1 → 6.0.2.pre.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/Gemfile +4 -0
- data/bin/omf_ec +30 -7
- data/lib/omf_ec.rb +25 -30
- data/lib/omf_ec/app_definition.rb +18 -6
- data/lib/omf_ec/backward/default_events.rb +1 -1
- data/lib/omf_ec/context/app_context.rb +1 -1
- data/lib/omf_ec/dsl.rb +1 -1
- data/lib/omf_ec/experiment.rb +5 -5
- data/lib/omf_ec/group.rb +2 -2
- data/lib/omf_ec/version.rb +1 -1
- data/omf_ec.gemspec +3 -0
- data/test/omf_ec/experiment_property_spec.rb +1 -1
- data/test/omf_ec/experiment_spec.rb +1 -1
- metadata +60 -7
data/Gemfile
CHANGED
data/bin/omf_ec
CHANGED
@@ -23,9 +23,17 @@ flag [:u, :uri]
|
|
23
23
|
desc "Debug XMPP traffic mode (include XMPP debug logging messages under debug mode)."
|
24
24
|
switch [:x, :xmpp]
|
25
25
|
|
26
|
-
desc "
|
26
|
+
desc "Root certificate file"
|
27
|
+
arg_name "cert", :optional
|
28
|
+
flag [:root_cert]
|
29
|
+
|
30
|
+
desc "Your certificate"
|
31
|
+
arg_name "cert", :optional
|
32
|
+
flag [:cert]
|
33
|
+
|
34
|
+
desc "Your private key"
|
27
35
|
arg_name "key", :optional
|
28
|
-
flag [:
|
36
|
+
flag [:key]
|
29
37
|
|
30
38
|
desc "Log file directory"
|
31
39
|
arg_name "directory"
|
@@ -52,8 +60,8 @@ command :exec do |c|
|
|
52
60
|
help_now! "Missing experiment script" if args[0].nil?
|
53
61
|
help_now! "Experiment script not found" unless File.exist?(args[0])
|
54
62
|
|
55
|
-
# User-provided command line values for Experiment Properties cannot be
|
56
|
-
# set here as the propertties have not been defined yet by the experiment.
|
63
|
+
# User-provided command line values for Experiment Properties cannot be
|
64
|
+
# set here as the propertties have not been defined yet by the experiment.
|
57
65
|
# Thus just pass them to the experiment, which will be responsible
|
58
66
|
# for setting them later
|
59
67
|
properties = {}
|
@@ -239,11 +247,22 @@ end
|
|
239
247
|
|
240
248
|
def load_exp(exp_path, global_options = {} , options = {}, properties = {})
|
241
249
|
begin
|
250
|
+
if global_options[:root_cert] && File.exist?(global_options[:root_cert])
|
251
|
+
root = OmfCommon::Auth::Certificate.create_from_x509(File.read(global_options[:root_cert]))
|
252
|
+
end
|
253
|
+
|
254
|
+
if global_options[:cert] && File.exist?(global_options[:cert]) &&
|
255
|
+
global_options[:key] && File.exist?(global_options[:key])
|
256
|
+
|
257
|
+
entity = OmfCommon::Auth::Certificate.create_from_x509(File.read(global_options[:cert]),
|
258
|
+
File.read(global_options[:key]))
|
259
|
+
end
|
260
|
+
|
242
261
|
opts = {
|
243
262
|
communication: { url: global_options[:uri] },
|
244
263
|
eventloop: { type: :em },
|
245
264
|
logging: {
|
246
|
-
level: global_options[:debug] ? 'debug' : 'info',
|
265
|
+
level: { default: global_options[:debug] ? 'debug' : 'info' },
|
247
266
|
appenders: {
|
248
267
|
stdout: {
|
249
268
|
date_pattern: '%H:%M:%S',
|
@@ -254,13 +273,18 @@ def load_exp(exp_path, global_options = {} , options = {}, properties = {})
|
|
254
273
|
}
|
255
274
|
}
|
256
275
|
|
276
|
+
opts[:communication][:auth] = { certs: [ root.to_pem_compact ] } if root
|
277
|
+
|
257
278
|
OmfCommon.init(:development, opts) do |el|
|
258
279
|
setup_logging(global_options)
|
259
280
|
|
260
281
|
OmfCommon.comm.on_connected do |comm|
|
261
|
-
info "Connected"
|
282
|
+
info "Connected using #{comm.conn_info}"
|
262
283
|
info "Start experiment: #{OmfEc.experiment.id}"
|
263
284
|
|
285
|
+
OmfCommon::Auth::CertificateStore.instance.register(root) if root
|
286
|
+
OmfCommon::Auth::CertificateStore.instance.register(entity, OmfCommon.comm.local_address) if entity
|
287
|
+
|
264
288
|
begin
|
265
289
|
include OmfEc::Backward::DefaultEvents
|
266
290
|
load exp_path
|
@@ -269,7 +293,6 @@ def load_exp(exp_path, global_options = {} , options = {}, properties = {})
|
|
269
293
|
error e.backtrace.join("\n")
|
270
294
|
end
|
271
295
|
|
272
|
-
#comm.on_interrupted { Experiment.done }
|
273
296
|
comm.on_interrupted { comm.disconnect }
|
274
297
|
end
|
275
298
|
end
|
data/lib/omf_ec.rb
CHANGED
@@ -29,41 +29,36 @@ module OmfEc
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def register_default_callback(topic)
|
32
|
-
topic.
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
32
|
+
topic.on_inform do |msg|
|
33
|
+
case msg.itype
|
34
|
+
when 'CREATION.FAILED'
|
35
|
+
warn "RC reports creation.failed: '#{msg[:reason]}'"
|
36
|
+
debug msg
|
37
|
+
when 'ERROR'
|
38
|
+
warn "RC reports error: '#{msg[:reason]}'"
|
39
|
+
debug msg
|
40
|
+
when 'WARN'
|
41
|
+
warn "RC reports warning: '#{msg[:reason]}'"
|
42
|
+
debug msg
|
43
|
+
when 'CREATION.OK'
|
44
|
+
debug "Received CREATION.OK via #{topic.id}"
|
45
|
+
info "Resource #{msg[:res_id]} #{msg.resource.address} created"
|
46
46
|
|
47
|
-
|
48
|
-
debug "Received CREATION.OK via #{topic.id}"
|
49
|
-
info "Resource #{msg[:res_id]} created"
|
47
|
+
OmfEc.experiment.add_or_update_resource_state(msg.resource.address, msg.properties)
|
50
48
|
|
51
|
-
|
49
|
+
OmfEc.experiment.process_events
|
50
|
+
when 'STATUS'
|
51
|
+
props = []
|
52
|
+
msg.each_property { |k, v| props << "#{k}: #{v}" }
|
53
|
+
debug "#{topic.id} >> inform: #{props.join(", ")}"
|
52
54
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
topic.on_status do |msg|
|
57
|
-
props = []
|
58
|
-
msg.each_property { |k, v| props << "#{k}: #{v}" }
|
59
|
-
debug "#{topic.id} >> inform: #{props.join(", ")}"
|
55
|
+
if msg[:status_type] == 'APP_EVENT'
|
56
|
+
info "APP_EVENT #{msg[:event]} from app #{msg[:app]} - msg: #{msg[:msg]}"
|
57
|
+
end
|
60
58
|
|
61
|
-
|
62
|
-
|
59
|
+
OmfEc.experiment.add_or_update_resource_state(msg.src, msg.properties)
|
60
|
+
OmfEc.experiment.process_events
|
63
61
|
end
|
64
|
-
|
65
|
-
OmfEc.experiment.add_or_update_resource_state(msg[:uid], msg.properties)
|
66
|
-
OmfEc.experiment.process_events
|
67
62
|
end
|
68
63
|
end
|
69
64
|
|
@@ -8,7 +8,7 @@ module OmfEc
|
|
8
8
|
|
9
9
|
# TODO: eventually this call would mirror all the properties of the App Proxy
|
10
10
|
# right now we just have name, binary_path, parameters
|
11
|
-
attr_accessor :name, :properties
|
11
|
+
attr_accessor :name, :properties
|
12
12
|
|
13
13
|
# @param [String] name name of the application to define
|
14
14
|
def initialize(name)
|
@@ -17,23 +17,23 @@ module OmfEc
|
|
17
17
|
end
|
18
18
|
|
19
19
|
# Add new parameter(s) to this Application Definition
|
20
|
-
#
|
20
|
+
#
|
21
21
|
# @param [Hash] params a hash with the parameters to add
|
22
22
|
#
|
23
23
|
def define_parameter(params)
|
24
|
-
@properties[:parameters] = Hashie::Mash.new unless @properties.key?(:parameters)
|
24
|
+
@properties[:parameters] = Hashie::Mash.new unless @properties.key?(:parameters)
|
25
25
|
if params.kind_of? Hash
|
26
26
|
@properties[:parameters].merge!(params)
|
27
27
|
else
|
28
28
|
error "Cannot define parameter for app '#{self.name}'! Parameter "+
|
29
29
|
"not passed as a Hash ('#{params.inspect}')"
|
30
|
-
end
|
30
|
+
end
|
31
31
|
end
|
32
32
|
|
33
33
|
def define_measurement_point(mp)
|
34
34
|
@properties[:oml] = Hashie::Mash.new unless @properties.key?(:oml)
|
35
35
|
if mp.kind_of? Hash
|
36
|
-
@properties[:oml][:available_mps] = Array.new unless @properties[:oml].key?(:available_mps)
|
36
|
+
@properties[:oml][:available_mps] = Array.new unless @properties[:oml].key?(:available_mps)
|
37
37
|
@properties[:oml][:available_mps] << mp
|
38
38
|
else
|
39
39
|
error "Cannot define Measurement Point for app '#{self.name}'! MP "+
|
@@ -41,12 +41,24 @@ module OmfEc
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
+
warn_removed :version
|
45
|
+
|
46
|
+
def path=(arg)
|
47
|
+
@properties[:binary_path] = arg
|
48
|
+
warn_deprecation :path=, :binary_path=
|
49
|
+
end
|
50
|
+
|
51
|
+
def shortDescription=(arg)
|
52
|
+
@properties[:description] = arg
|
53
|
+
warn_deprecation :shortDescription=, :description=
|
54
|
+
end
|
55
|
+
|
44
56
|
def method_missing(method_name, *args)
|
45
57
|
k = method_name.to_sym
|
46
58
|
return @properties[k] if @properties.key?(k)
|
47
59
|
m = method_name.to_s.match(/(.*?)([=]?)$/)
|
48
60
|
if m[2] == '='
|
49
|
-
@properties[m[1].to_sym] = args.first
|
61
|
+
@properties[m[1].to_sym] = args.first
|
50
62
|
else
|
51
63
|
super
|
52
64
|
end
|
@@ -11,7 +11,7 @@ module OmfEc
|
|
11
11
|
plan = g.members.uniq.sort
|
12
12
|
actual = state.find_all do |v|
|
13
13
|
v[:membership] && v[:membership].include?(g.id)
|
14
|
-
end.map { |v| v[:
|
14
|
+
end.map { |v| v[:address] }.sort
|
15
15
|
|
16
16
|
debug "Planned: #{g.name}(#{g.id}): #{plan}"
|
17
17
|
debug "Actual: #{g.name}(#{g.id}): #{actual}"
|
data/lib/omf_ec/dsl.rb
CHANGED
@@ -9,7 +9,7 @@ module OmfEc
|
|
9
9
|
# raised when the OMF EC is processing an OEDL experiment scripts
|
10
10
|
#
|
11
11
|
# The base exception is OEDLException
|
12
|
-
class OEDLException <
|
12
|
+
class OEDLException < StandardError; end
|
13
13
|
|
14
14
|
class OEDLArgumentException < OEDLException
|
15
15
|
attr_reader :cmd, :arg
|
data/lib/omf_ec/experiment.rb
CHANGED
@@ -34,8 +34,8 @@ module OmfEc
|
|
34
34
|
ExperimentProperty.create(name, value, description)
|
35
35
|
end
|
36
36
|
|
37
|
-
def resource_state(
|
38
|
-
@state.find { |v| v[:
|
37
|
+
def resource_state(address)
|
38
|
+
@state.find { |v| v[:address].to_s == address.to_s }
|
39
39
|
end
|
40
40
|
|
41
41
|
alias_method :resource, :resource_state
|
@@ -64,8 +64,8 @@ module OmfEc
|
|
64
64
|
end
|
65
65
|
end
|
66
66
|
else
|
67
|
-
info "Newly discovered resource >> #{
|
68
|
-
@state << Hashie::Mash.new({
|
67
|
+
info "Newly discovered resource >> #{name}"
|
68
|
+
@state << Hashie::Mash.new({ address: name }).merge(opts)
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
@@ -111,7 +111,7 @@ module OmfEc
|
|
111
111
|
|
112
112
|
def add_event(name, trigger)
|
113
113
|
self.synchronize do
|
114
|
-
raise RuntimeError, "Event '#{name}' has been defined" if event(name)
|
114
|
+
raise RuntimeError, "Event '#{name}' has already been defined" if event(name)
|
115
115
|
@events << { name: name, trigger: trigger }
|
116
116
|
end
|
117
117
|
end
|
data/lib/omf_ec/group.rb
CHANGED
@@ -61,8 +61,8 @@ module OmfEc
|
|
61
61
|
@members += g.members
|
62
62
|
self.add_resource(*g.members.uniq)
|
63
63
|
else
|
64
|
-
@members << name.to_s
|
65
64
|
OmfEc.subscribe_and_monitor(name) do |res|
|
65
|
+
@members << res.address
|
66
66
|
info "Config #{name} to join #{self.name}"
|
67
67
|
res.configure(membership: self.id)
|
68
68
|
end
|
@@ -82,7 +82,7 @@ module OmfEc
|
|
82
82
|
# Make a deep copy of opts in case it contains structures of structures
|
83
83
|
begin
|
84
84
|
opts = Marshal.load ( Marshal.dump(opts.merge(hrn: name)))
|
85
|
-
rescue
|
85
|
+
rescue => e
|
86
86
|
raise "#{e.message} - Could not deep copy opts: '#{opts.inspect}'"
|
87
87
|
end
|
88
88
|
|
data/lib/omf_ec/version.rb
CHANGED
data/omf_ec.gemspec
CHANGED
@@ -22,6 +22,9 @@ Gem::Specification.new do |s|
|
|
22
22
|
|
23
23
|
# specify any dependencies here; for example:
|
24
24
|
s.add_development_dependency "minitest", "~> 3.2"
|
25
|
+
s.add_development_dependency "em-minitest-spec", "~> 1.1.1"
|
26
|
+
s.add_development_dependency "simplecov"
|
27
|
+
s.add_development_dependency "pry"
|
25
28
|
s.add_runtime_dependency "omf_common", "~> 6.0.0"
|
26
29
|
s.add_runtime_dependency "gli", "~> 2.5.3"
|
27
30
|
end
|
@@ -35,7 +35,7 @@ describe OmfEc::Experiment do
|
|
35
35
|
|
36
36
|
it "must be able to add resource to state" do
|
37
37
|
@experiment.add_or_update_resource_state('bob', type: :test)
|
38
|
-
@experiment.resource_state('bob')[:
|
38
|
+
@experiment.resource_state('bob')[:address].must_equal 'bob'
|
39
39
|
@experiment.resource_state('bob')[:type].must_equal :test
|
40
40
|
end
|
41
41
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omf_ec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.1
|
5
|
-
prerelease:
|
4
|
+
version: 6.0.2.pre.1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- NICTA
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
@@ -27,6 +27,54 @@ dependencies:
|
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '3.2'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: em-minitest-spec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.1.1
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.1.1
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: simplecov
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: pry
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
30
78
|
- !ruby/object:Gem::Dependency
|
31
79
|
name: omf_common
|
32
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,14 +170,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
122
170
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
171
|
none: false
|
124
172
|
requirements:
|
125
|
-
- - ! '
|
173
|
+
- - ! '>'
|
126
174
|
- !ruby/object:Gem::Version
|
127
|
-
version:
|
175
|
+
version: 1.3.1
|
128
176
|
requirements: []
|
129
177
|
rubyforge_project: omf_ec
|
130
178
|
rubygems_version: 1.8.25
|
131
179
|
signing_key:
|
132
180
|
specification_version: 3
|
133
181
|
summary: OMF experiment controller
|
134
|
-
test_files:
|
135
|
-
|
182
|
+
test_files:
|
183
|
+
- test/omf_ec/context_spec.rb
|
184
|
+
- test/omf_ec/dsl_spec.rb
|
185
|
+
- test/omf_ec/experiment_property_spec.rb
|
186
|
+
- test/omf_ec/experiment_spec.rb
|
187
|
+
- test/omf_ec/group_spec.rb
|
188
|
+
- test/test_helper.rb
|