Class: RseProxy::PassThru

Inherits:
Object
  • Object
show all
Defined in:
lib/rse.rb

Instance Method Summary collapse

Constructor Details

#initialize(serversx = [], servers: serversx, log: nil) ⇒ PassThru

Returns a new instance of PassThru.



99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/rse.rb', line 99

def initialize(serversx=[], servers: serversx, log: nil )
  
  DRb.start_service
  
  @servers = servers.map do |x|
    
    host, port = x.is_a?(Hash) ? [x[:host], x[:port]] : x        
    
  end
  
  @log = Logger.new log, 'daily' if log
  
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args) ⇒ Object (private)



173
174
175
# File 'lib/rse.rb', line 173

def method_missing(method_name, *args)    
  fetch_server() { |rse| rse.get.method(method_name).call(*args) }
end

Instance Method Details

#deleteObject



113
114
115
# File 'lib/rse.rb', line 113

def delete()
  fetch_server() { |rse| rse.delete }
end

#fetch_serverObject



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'lib/rse.rb', line 142

def fetch_server()
  
  begin
    
    servers = @servers.clone
      
    server = servers.shift
    host, port = server
    rse = DRbObject.new_with_uri("druby://#{host}:#{port}")    
    yield(rse) if block_given?
    
  rescue
    
    puts ($!).inspect
    @log.warn "server #{host}:#{port} down" if @log
    retry if servers.any?        
    
  end
  
end

#getObject



117
118
119
# File 'lib/rse.rb', line 117

def get()
  fetch_server() { |rse| rse.get }
end

#package_methods(name) ⇒ Object



129
130
131
# File 'lib/rse.rb', line 129

def package_methods(name)
  fetch_server() { |rse| rse.package_methods(name) }
end

#postObject



125
126
127
# File 'lib/rse.rb', line 125

def post()
  fetch_server() { |rse| rse.post }
end

#putObject



121
122
123
# File 'lib/rse.rb', line 121

def put()
  fetch_server() { |rse| rse.put }
end

#run_job(package, job, params = {}, *args) ⇒ Object



133
134
135
136
137
138
139
140
# File 'lib/rse.rb', line 133

def run_job(package, job, params={}, *args)
  
  @log.info "package: %s, job: %s, params: %s, args: %s" \
      % [package, job, params, args] if @log
  
  fetch_server() { |rse| rse.run_job package, job, params, *args    }
  
end

#typeObject



163
164
165
# File 'lib/rse.rb', line 163

def type()
  fetch_server() { |rse| rse.type }
end

#type=(s) ⇒ Object



167
168
169
# File 'lib/rse.rb', line 167

def type=(s)
  fetch_server() { |rse| rse.type=(s) }
end