omf_ec 6.0.1 → 6.0.2.pre.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|