Module: Legion::API::Routes::Transport
- Defined in:
- lib/legion/api/transport.rb
Class Method Summary collapse
- .register_discovery(app) ⇒ Object
- .register_publish(app) ⇒ Object
- .register_status(app) ⇒ Object
- .registered(app) ⇒ Object
Class Method Details
.register_discovery(app) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/legion/api/transport.rb', line 40 def self.register_discovery(app) app.get '/api/transport/exchanges' do klass = defined?(Legion::Transport::Exchange) ? Legion::Transport::Exchange : nil json_response(klass ? transport_subclasses(klass) : []) end app.get '/api/transport/queues' do klass = defined?(Legion::Transport::Queue) ? Legion::Transport::Queue : nil json_response(klass ? transport_subclasses(klass) : []) end end |
.register_publish(app) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/legion/api/transport.rb', line 52 def self.register_publish(app) app.post '/api/transport/publish' do Legion::Logging.debug "API: POST /api/transport/publish params=#{params.keys}" body = parse_request_body unless body[:exchange] Legion::Logging.warn 'API POST /api/transport/publish returned 422: exchange is required' halt 422, json_error('missing_field', 'exchange is required', status_code: 422) end unless body[:routing_key] Legion::Logging.warn 'API POST /api/transport/publish returned 422: routing_key is required' halt 422, json_error('missing_field', 'routing_key is required', status_code: 422) end = Legion::Transport::Messages::Dynamic.new( exchange: body[:exchange], routing_key: body[:routing_key], **(body[:payload] || {}) ) .publish Legion::Logging.info "API: published message to exchange=#{body[:exchange]} routing_key=#{body[:routing_key]}" json_response({ published: true, exchange: body[:exchange], routing_key: body[:routing_key] }, status_code: 201) rescue StandardError => e Legion::Logging.error "API POST /api/transport/publish: #{e.class} — #{e.}" json_error('publish_error', e., status_code: 500) end end |
.register_status(app) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/legion/api/transport.rb', line 13 def self.register_status(app) app.get '/api/transport' do connected = begin Legion::Settings[:transport][:connected] rescue StandardError => e Legion::Logging.debug "Transport#status failed to read connected setting: #{e.}" if defined?(Legion::Logging) false end session_open = begin Legion::Transport::Connection.session_open? rescue StandardError => e Legion::Logging.debug "Transport#status failed to check session_open: #{e.}" if defined?(Legion::Logging) false end channel_open = begin Legion::Transport::Connection.channel_open? rescue StandardError => e Legion::Logging.debug "Transport#status failed to check channel_open: #{e.}" if defined?(Legion::Logging) false end connector = defined?(Legion::Transport::TYPE) ? Legion::Transport::TYPE.to_s : 'unknown' json_response({ connected: connected, session_open: session_open, channel_open: channel_open, connector: connector }) end end |
.registered(app) ⇒ Object
7 8 9 10 11 |
# File 'lib/legion/api/transport.rb', line 7 def self.registered(app) register_status(app) register_discovery(app) register_publish(app) end |