Sha256: cc8c9459e9d6cd18bd78b10bff0c1578c48b399862a9f2d829b882c9a6fafd0b
Contents?: true
Size: 1.76 KB
Versions: 2
Compression:
Stored size: 1.76 KB
Contents
# frozen_string_literal: true require "drb/drb" require "concurrent-ruby" require_relative "./application" module Shatter module Web class Application include Concurrent::Async def response_for(uuid) druby_instance_url = Shatter::Service::Discovery.service_instance_url_for_uuid(uuid) return unless druby_instance_url DRbObject.new_with_uri("druby://#{druby_instance_url}").response_for(uuid) end def route(uuid, path, params) operation = path.scan(/\/(.+)$/).first&.first raise 'failed to route' if operation.nil? Shatter.logger.info Shatter::Service::Base.service_definition.function_collection Shatter.logger.info operation function = Shatter::Service::Base.service_definition.function_collection[operation] if function.nil? DRbObject.new_with_uri("druby://#{Shatter::Service::Discovery.service_instance_url}") .set_static_result_for(uuid, {result: nil, error: :unknown_operation}) else begin func_params = params.merge(uuid:) Shatter.logger.info "routing #{path}/#{func_params}" DRbObject.new_with_uri("druby://#{Shatter::Service::Discovery.service_instance_url}") .send( operation.to_sym, func_params ) rescue ArgumentError => e DRbObject.new_with_uri("druby://#{Shatter::Service::Discovery.service_instance_url}") .set_static_result_for(uuid, {result: nil, error: e.message }) end end rescue Exception => e Shatter.logger.error "caught error: #{e.message}" Shatter.logger.error "#{e.backtrace.join("\n")}" { data:, error: e.message, uuid: } end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
shatter-rb-0.0.2 | lib/shatter/web/application.rb |
shatter-rb-0.0.1 | lib/shatter/web/application.rb |