oml4r 2.9.3 → 2.9.4

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/lib/oml4r.rb CHANGED
@@ -37,9 +37,9 @@ module OML4R
37
37
  @@logger = logger
38
38
  end
39
39
 
40
- class OML4RExeption < Exception; end
41
- class MissingArgumentException < OML4RExeption; end
42
- class ArgumentMismatchException < OML4RExeption; end
40
+ class OML4RException < Exception; end
41
+ class MissingArgumentException < OML4RException; end
42
+ class ArgumentMismatchException < OML4RException; end
43
43
  #
44
44
  # Measurement Point Class
45
45
  # Ruby applications using this module should sub-class this MPBase class
@@ -228,8 +228,14 @@ module OML4R
228
228
  # It will then connect to the OML server (if requested on the command line), and
229
229
  # send the initial instruction to setup the database and the tables for each MPs.
230
230
  #
231
- # - argv = the Array of command line arguments from the calling Ruby application
232
- # - & block = a block which defines the additional application-specific arguments
231
+ # param argv = the Array of command line arguments from the calling Ruby application
232
+ # param opts
233
+ # opts [String] :domain
234
+ # opts [String] :nodeID
235
+ # opts [String] :appName
236
+ # opts [Integer] :protocol
237
+ # opts [Proc] :afterParse
238
+ # param block = a block which defines the additional application-specific arguments
233
239
  #
234
240
  def self.init(argv, opts = {}, &block)
235
241
  OML4R#{VERSION_STRING} [#{COPYRIGHT}")
@@ -240,21 +246,21 @@ module OML4R
240
246
  OML4R.logger.warn "opts[:expID] and ENV['OML_EXP_ID'] are getting deprecated; please use opts[:domain] or ENV['OML_DOMAIN'] instead"
241
247
  opts[:domain] ||= d
242
248
  end
243
- domain ||= ENV['OML_DOMAIN'] || opts[:domain]
249
+ opts[:domain] = ENV['OML_DOMAIN'] || opts[:domain]
244
250
 
245
251
  # TODO: Same as above; here, though, :id might actually be the way to go; or
246
252
  # perhaps instId?
247
253
  #if opts[:id]
248
254
  # raise 'OML4R: :id is not a valid option. Do you mean :nodeID?'
249
255
  #end
250
- nodeID = ENV['OML_NAME'] || opts[:nodeID] || opts[:id] || ENV['OML_ID']
256
+ opts[:nodeID] = ENV['OML_NAME'] || opts[:nodeID] || opts[:id] || ENV['OML_ID']
251
257
  #
252
258
  # XXX: Same again; also, this is the responsibility of the developer, not the user
253
259
  #if opts[:app]
254
260
  # raise 'OML4R: :app is not a valid option. Do you mean :appName?'
255
261
  #end
256
- appName = opts[:appName] || opts[:app]
257
- protocol = opts[:protocol] = DEF_PROTOCOL
262
+ opts[:appName] ||= opts[:app]
263
+ opts[:protocol] ||= DEF_PROTOCOL
258
264
 
259
265
  if ENV['OML_URL'] || opts[:omlURL] || opts[:url]
260
266
  raise MissingArgumentException.new 'neither OML_URL, :omlURL nor :url are valid. Do you mean OML_COLLECT or :omlCollect?'
@@ -262,7 +268,7 @@ module OML4R
262
268
  if ENV['OML_SERVER'] || opts[:omlServer]
263
269
  OML4R.logger.warn "opts[:omlServer] and ENV['OML_SERVER'] are getting deprecated; please use opts[:collect] or ENV['OML_COLLECT'] instead"
264
270
  end
265
- omlCollectUri = ENV['OML_COLLECT'] || ENV['OML_SERVER'] || opts[:collect] || opts[:omlServer]
271
+ opts[:collect] = ENV['OML_COLLECT'] || ENV['OML_SERVER'] || opts[:collect] || opts[:omlServer]
266
272
  noop = opts[:noop] || false
267
273
 
268
274
  if argv
@@ -271,10 +277,10 @@ module OML4R
271
277
  # Include the definition of application's specific arguments
272
278
  yield(op) if block
273
279
  # Include the definition of OML specific arguments
274
- op.on("--oml-id id", "Name to identify this app instance [#{nodeID || 'undefined'}]") { |name| nodeID = name }
275
- op.on("--oml-domain domain", "Name of experimental domain [#{domain || 'undefined'}] *EXPERIMENTAL*") { |name| domain = name }
276
- op.on("--oml-collect uri", "URI of server to send measurements to") { |u| omlCollectUri = u }
277
- op.on("--oml-protocol p", "Protocol number [#{OML4R::DEF_PROTOCOL}]") { |l| protocol = l.to_i }
280
+ op.on("--oml-id id", "Name to identify this app instance [#{opts[:nodeID] || 'undefined'}]") { |name| opts[:nodeID] = name }
281
+ op.on("--oml-domain domain", "Name of experimental domain [#{opts[:domain] || 'undefined'}] *EXPERIMENTAL*") { |name| opts[:domain] = name }
282
+ op.on("--oml-collect uri", "URI of server to send measurements to") { |u| opts[:omlCollectUri] = u }
283
+ op.on("--oml-protocol p", "Protocol number [#{OML4R::DEF_PROTOCOL}]") { |l| opts[:protocol] = l.to_i }
278
284
  op.on("--oml-log-level l", "Log level used (info: 1 .. debug: 0)") { |l| OML4R.logger.level = l.to_i }
279
285
  op.on("--oml-noop", "Do not collect measurements") { noop = true }
280
286
  op.on("--oml-exp-id domain", "Obsolescent equivalent to --oml-domain domain") { |name|
@@ -282,12 +288,12 @@ module OML4R
282
288
  OML4R.logger.warn "Option --oml-exp-id is getting deprecated; please use '--oml-domain #{domain}' instead"
283
289
  }
284
290
  op.on("--oml-file localPath", "Obsolescent equivalent to --oml-collect file:localPath") { |name|
285
- omlCollectUri = "file:#{name}"
286
- OML4R.logger.warn "Option --oml-file is getting deprecated; please use '--oml-collect #{omlCollectUri}' instead"
291
+ opts[:omlCollectUri] = "file:#{name}"
292
+ OML4R.logger.warn "Option --oml-file is getting deprecated; please use '--oml-collect #{opts[:omlCollectUri]}' instead"
287
293
  }
288
294
  op.on("--oml-server uri", "Obsolescent equivalent to --oml-collect uri") {|u|
289
- omlCollectUri = u
290
- OML4R.logger.warn "Option --oml-server is getting deprecated; please use '--oml-collect #{omlCollectUri}' instead"
295
+ opts[:omlCollectUri] = "tcp:#{u}"
296
+ OML4R.logger.warn "Option --oml-server is getting deprecated; please use '--oml-collect #{opts[:omlCollectUri]}' instead"
291
297
  }
292
298
  op.on_tail("--oml-help", "Show this message") { $stderr.puts op; exit }
293
299
  # XXX: This should be set by the application writer, not the command line
@@ -296,46 +302,52 @@ module OML4R
296
302
  # Now parse the command line
297
303
  OML4R.logger.debug "ARGV: #{argv.inspect}"
298
304
  rest = op.parse(argv)
305
+ if opts[:afterParse]
306
+ # give the app a chance to fix missing parameters
307
+ opts[:afterParse].call(opts)
308
+ end
299
309
  return if noop
300
310
  end
301
311
 
302
- unless nodeID
312
+ unless opts[:nodeID]
303
313
  begin
304
314
  # Create a default nodeID by concatinating the local hostname with the process ID
305
315
  hostname = nil
306
316
  begin
307
- hostname = Socket.gethostbyname(Socket.gethostname)[0]
317
+ #hostname = Socket.gethostbyname(Socket.gethostname)[0]
318
+ hostname = Socket.gethostname
308
319
  rescue Exception
309
320
  begin
310
- hostname = `hostname`
321
+ hostname = (`hostname`).chop
311
322
  rescue Exception; end
312
323
  end
313
324
  if hostname
314
- nodeID = "#{hostname}-#{Process.pid}"
325
+ opts[:nodeID] = "#{hostname}-#{Process.pid}"
315
326
  end
316
327
  end
317
- unless nodeID
328
+ unless opts[:nodeID]
318
329
  raise MissingArgumentException.new 'OML4R: Missing values for parameter :nodeID (--oml-id)'
319
330
  end
320
331
  end
321
332
 
322
- unless domain && appName
333
+ unless opts[:domain] && opts[:appName]
323
334
  raise MissingArgumentException.new 'OML4R: Missing values for parameters :domain (--oml-domain), :nodeID (--oml-id), or :appName (in code)!'
324
335
  end
325
336
 
326
-
327
337
  unless opts[:create_default_channel] == false
328
338
  # Set a default collection URI if nothing has been specified
329
- unless omlCollectUri
330
- omlCollectUri = "file:#{appName}_#{nodeID}_#{domain}_#{Time.now.strftime("%Y-%m-%dt%H.%M.%S%z")}"
331
- OML4R.logger.info "Collection URI is #{omlCollectUri}"
339
+ unless opts[:omlCollectUri]
340
+ require 'time'
341
+ opts[:omlCollectUri] = "file:#{opts[:appName]}_#{Time.now.iso8601}"
342
+ #opts[:omlCollectUri] = "file:-"
343
+ OML4R.logger.info "Collection URI is #{opts[:omlCollectUri]}"
332
344
  end
333
- create_channel(:default, omlCollectUri)
345
+ create_channel(:default, opts[:omlCollectUri])
334
346
  end
335
347
 
336
348
  # Handle the defined Measurement Points
337
349
  startTime = Time.now
338
- Channel.init_all(domain, nodeID, appName, startTime, protocol)
350
+ Channel.init_all(opts[:domain], opts[:nodeID], opts[:appName], startTime, opts[:protocol])
339
351
  rest || []
340
352
  end
341
353
 
@@ -376,12 +388,6 @@ module OML4R
376
388
  return @@channels[key] = self.new(url, domain)
377
389
  end
378
390
 
379
- # def self._create(key, domain, url)
380
- # out = _connect(url)
381
- # @@channels[key] = self.new(url, domain, out)
382
- # end
383
-
384
-
385
391
  def self.[](name = :default, domain = :default)
386
392
  key = "#{name}:#{domain}"
387
393
  unless (@@channels.key?(key))
@@ -566,7 +572,7 @@ module OML4R
566
572
  loop do
567
573
  sleep 5
568
574
  begin
569
- @out = self.class._connect(@url)
575
+ @out = _connect(@url)
570
576
  @header_sent = false
571
577
  OML4R.logger.info "Reconnected to '#{@url}'"
572
578
  return _send(msg)
@@ -3,6 +3,13 @@
3
3
  # You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
4
4
  # By downloading or using this software you accept the terms and the liability disclaimer in the License.
5
5
  # ------------------
6
+ #
7
+ # = oml_outputter.rb
8
+ #
9
+ # == Description
10
+ #
11
+ # Log4r outputter which turn logging events into an OML stream
12
+ #
6
13
 
7
14
  require 'log4r/outputter/outputter'
8
15
  require 'oml4r'
@@ -23,7 +30,6 @@ module Log4r
23
30
  param :data
24
31
  end
25
32
 
26
-
27
33
  # Initialise an outputter which turns logging messages
28
34
  # into an OML stream
29
35
  #
data/lib/oml4r/version.rb CHANGED
@@ -5,7 +5,7 @@
5
5
  # ------------------
6
6
 
7
7
  module OML4R
8
- VERSION = "2.9.3"
8
+ VERSION = "2.9.4"
9
9
  VERSION_STRING = "OML4R Client V#{VERSION}"
10
10
  COPYRIGHT = "Copyright 2009-2013, NICTA"
11
11
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oml4r
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.9.3
4
+ version: 2.9.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-29 00:00:00.000000000 Z
12
+ date: 2013-08-30 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ! '["Simple OML client library for Ruby"]'
15
15
  email: