class RSFServices

Attributes

package_basepath[R]
registry[R]
services[R]

Public Class Methods

new(reg=nil, package_basepath: '', log: nil, debug: false, app_rsf: nil) click to toggle source
Calls superclass method
# File lib/rsf_services.rb, line 86
def initialize(reg=nil, package_basepath: '', log: nil, debug: false,
               app_rsf: nil)

  @log, @debug = log, debug

  puts 'inside RSF_services' if @debug

  super(log: log, debug: debug)

  @package_basepath, @services = package_basepath, {}

  @initialized = {}

  if reg then

    @registry = @services['registry'] = if reg.is_a? String then
      reg = DWSRegistry.new reg_path
    else
      reg
    end

    # load the system/startup RSF jobs

    startup = reg.get_key('system/startup')

    jobs =  startup.xpath('*[load="1"]').inject({}) do |r, job|
      settings = reg.get_keys("system/packages/#{job.name}/*")\
                        .inject({}){|r,x| r.merge(x.name.to_sym => x.text) }
      r.merge(job.name => settings)
    end

    jobs.each do |package, settings|
      r = run_job(package.to_s, 'load', settings,
                                              package_path: settings[:url])
    end
  end

  @app = AppMgr.new(rsf: app_rsf, reg: reg, rsc: self) if app_rsf

end

Public Instance Methods

delete() click to toggle source
# File lib/rsf_services.rb, line 128
def delete()
  PackageMethod.new self, type: :delete
end
get() click to toggle source
# File lib/rsf_services.rb, line 132
def get()
  PackageMethod.new self
end
package_methods(package) click to toggle source
# File lib/rsf_services.rb, line 202
def package_methods(package)

  url = File.join(@package_basepath, package + '.rsf')
  doc = Rexle.new URI.open(url, 'UserAgent' => 'ClientRscript').read
  doc.root.xpath('job/attribute::id').map {|x| x.value.to_s.gsub('-','_') }

end
post() click to toggle source
# File lib/rsf_services.rb, line 140
def post()
  PackageMethod.new self, type: :post
end
put() click to toggle source
# File lib/rsf_services.rb, line 136
def put()
  PackageMethod.new self, type: :put
end
run_job(package, jobs, params={}, *qargs) { |params| ... } click to toggle source
# File lib/rsf_services.rb, line 144
def run_job(package, jobs, params={}, *qargs)

  puts 'inside run_job' #if @debug

  package_path = "%s/%s.rsf" % [@package_basepath, package]

  if @log or @debug then
    msg = 'RSFServices/run job: ' +
        ("package: %s jobs: %s params: %s qargs: %s " + \
          " package_path: %s" % [package, jobs, params, qargs, package_path])
    @log.info msg if @log
    puts msg if @debug
  end

  yield(params) if block_given?

  a = [package_path, jobs.split(/\s/).map{|x| "//job:%s" % x} ,qargs].flatten(2)
  @log.info 'RSFServices/run job: a: ' + a.inspect if @log

  puts 'a: ' + a.inspect if @debug

  c, args, _ = read(a)
  puts 'c: ' + c.inspect if @debug
  rws, reg, app = self, @registry, @app

  begin

    @log.info 'RSFServices/run job: code: ' + c if @log and c.is_a? String

    # if there is a job id called *initialize* then execute if it hasn't
    # already been executed

    if self.jobs(package_path).include? :initialize and
        !@initialized[package_path]  and jobs != 'initialize' then
      run_job(package, 'initialize')
      @initialized[package_path] = true
    end

    r = instance_eval c
    puts 'r: ' + r.inspect if @debug
    #thread = Thread.new {Thread.current[:v] = eval c}
    #thread.join
    #r = thread[:v]

    @log.info 'RSFServices/run job: result: ' + r if @log and r.is_a? String

    return r

  rescue Exception => e

    params = {}
    err_label = e.message.to_s + " :: \n" + e.backtrace.join("\n")
    @log.debug 'RSFServices/run_job/error: ' + err_label if @log

  end

end

Private Instance Methods

method_missing(method_name, *args) click to toggle source
# File lib/rsf_services.rb, line 212
def method_missing(method_name, *args)

  puts 'inside method_missing' if @debug
  self.type = :get
  Package.new self, method_name.to_s, debug: @debug
end