fleck 2.0.0 → 2.1.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 10ed68bc695f23ef3d185e03f57fe4c6d5a71cb890b2f550f8c84cb445330933
4
- data.tar.gz: 3dabbac45e9efa3cbc12eb5d3affa2d9a586d317df8d37d5378afd1a8c7b287f
3
+ metadata.gz: 1ba4104d51ed9b8954789594108e46d754a5ebedbb281ebf03b11e4c7af762fd
4
+ data.tar.gz: 7a7fe6fdac9a8fc0ef6effd8ab321dbd0940b7f580a39dc2cc4132dd5f81d4c2
5
5
  SHA512:
6
- metadata.gz: 791ebf6760b8a5aea71df57a8eebe386cf5bb3a5a877a7a50f6c4a4a73a0fe89b89cd06b1c09fc8a1a8b7480aab65e96f609d61f762100f866f0454607a319cd
7
- data.tar.gz: '094dab3b65a3b0c9e1453a88339fb3e6d7f3955e26c888d02ea2aae75adde5033c7a879cf1d00249c6d5f03e4364d6d1f662ffa01093fa3f28592a78ab964c8c'
6
+ metadata.gz: b98ae1a23554c782a5d99001edf83a054ccbba794d57a6778a6322dff7e8bf21d09a5d45f797f9d0e3cb247b4cb5b495959e39976d380edcd6a61bd6a288055a
7
+ data.tar.gz: 603c304bb7bec0bb967fb83afe6bf0f0a27d9ff71a1ea1e3e8d80539bd7ad2ff9c2fb681418461bbde12a7d2df50bb9aa0968bc82b1e59a8e847ba7bb2b05ba4
data/examples/actions.rb CHANGED
@@ -24,12 +24,13 @@ class MyConsumer < Fleck::Consumer
24
24
 
25
25
  action 'hello', "An action which returns 'Hello'"
26
26
  def hello
27
- ok! 'Hello!'
27
+ ok! result: 'Hello', message: 'Ciao'
28
28
  end
29
29
 
30
30
  action 'ciao', "An action which returns 'Ciao'"
31
+ param :world, type: 'boolean', required: true, default: false
31
32
  def my_custom_method
32
- ok! 'Ciao!'
33
+ ok! params[:world] ? 'Ciao, Mondo!' : 'Ciao!'
33
34
  end
34
35
 
35
36
  action :aloha
@@ -47,13 +48,13 @@ end
47
48
  actions = %i[hello ciao aloha not_an_action]
48
49
 
49
50
  SAMPLES.to_i.times do |num|
50
- action = actions[(rand * actions.size).to_i]
51
+ action = actions.sample
51
52
  name = ['John Doe', 'Willie Wonka', 'Billie Smith'].sample
52
- client.request(action: action, params: { num: num, name: name, number: rand * 100 }, timeout: 5) do |_, response|
53
+ client.request(action: action, params: { num: num, name: name, number: rand * 100, world: %w[yes no].sample }, timeout: 5) do |_, response|
53
54
  if response.status == 200
54
- Fleck.logger.info "ACTION: (#{action.inspect}) #{response.body}"
55
+ Fleck.logger.info "ACTION: (#{action.inspect}) #{response.body.inspect}"
55
56
  else
56
- Fleck.logger.error "ACTION: (#{action.inspect}) #{response.errors.join(', ')} --- #{response.body}"
57
+ Fleck.logger.error "ACTION: (#{action.inspect}) #{response.errors.join(', ')} --- #{response.body.inspect}"
57
58
  end
58
59
  end
59
60
  end
@@ -4,8 +4,6 @@
4
4
  module Fleck
5
5
  # `Fleck::Configuration` implements a set of methods useful for `Fleck` clients and consumers configuration.
6
6
  class Configuration
7
- autoload :HostRating, 'fleck/utilities/host_rating.rb'
8
-
9
7
  attr_reader :logfile, :loglevel, :progname, :hosts
10
8
  attr_accessor :default_user, :default_pass, :default_host, :default_port, :default_vhost, :default_queue,
11
9
  :app_name, :filters
@@ -49,6 +49,7 @@ module Fleck
49
49
  action_name = request.action.to_s
50
50
  action = actions[action_name]
51
51
  unless action
52
+ request.log_headers_and_params!
52
53
  message = "Action #{action_name.inspect} not found!"
53
54
  not_found! error: message, body: [
54
55
  { type: 'action', name: action_name, value: action_name, error: 'not_found', message: message }
@@ -58,12 +59,14 @@ module Fleck
58
59
  # iterate over action params and use param options to validate incoming request params.
59
60
  action[:params].each { |_, param| validate_action_param!(param) }
60
61
 
62
+ request.log_headers_and_params!
61
63
  send(action[:method_name])
62
64
  end
63
65
 
64
66
  def validate_action_param!(param)
65
67
  validation = param.validate(request.params[param.name])
66
68
  unless validation.valid?
69
+ request.log_headers_and_params!
67
70
  bad_request! error: "Invalid param value: #{param.name} = #{validation.value.inspect}",
68
71
  body: validation.errors
69
72
  end
@@ -24,9 +24,10 @@ module Fleck
24
24
  end
25
25
 
26
26
  def success_method(name, code)
27
- define_method(name) do |body = nil, interrupt: true|
27
+ define_method(name) do |*args|
28
+ interrupt = (args[1] ? args[1][:interrupt] : true)
28
29
  response.status = code
29
- response.body = body
30
+ response.body = args[0]
30
31
  throw INTERRUPT_NAME if interrupt
31
32
  end
32
33
  end
@@ -67,7 +67,7 @@ module Fleck
67
67
 
68
68
  def exchange_and_queue_name
69
69
  ex_name = rmq_exchange_name.to_s == '' ? ''.inspect : rmq_exchange_name
70
- "(#{ex_name.to_s.inspect}|#{exchange_type_code}|#{queue_name}) "
70
+ "(#{ex_name}|#{exchange_type_code}|#{queue_name}) "
71
71
  end
72
72
 
73
73
  def request_metadata
@@ -19,8 +19,8 @@ module Fleck
19
19
  @app_id = metadata[:app_id]
20
20
  @reply_to = @metadata.reply_to
21
21
  @payload = payload
22
- @exchange = delivery_info.exchange.inspect
23
- @queue = delivery_info.routing_key.inspect
22
+ @exchange = delivery_info.exchange
23
+ @queue = delivery_info.routing_key
24
24
  @delivery_tag = delivery_info.delivery_tag
25
25
  @data = {}
26
26
  @headers = (@metadata.headers || {}).to_hash_with_indifferent_access
@@ -61,13 +61,24 @@ module Fleck
61
61
  @requeue
62
62
  end
63
63
 
64
+ def log_headers_and_params!
65
+ queue_name = "(#{@exchange == '' ? @queue : "#{@queue}@#{@exchange}"})".color(:red)
66
+ endpoint = "/#{action} :#{@version || 'v1'}".color(:red)
67
+ message = "\n" \
68
+ "#{ip} - #{queue_name} #{endpoint} [#{@id}]\n" \
69
+ " ~ headers ~ #{headers.inspect.color(:green)}\n" \
70
+ " @params #{params.inspect.color(:green)}"
71
+ logger.debug message
72
+ end
73
+
64
74
  protected
65
75
 
66
76
  def parse_request!
67
77
  @data = Oj.load(@payload, mode: :compat).to_hash_with_indifferent_access.filtered!
68
78
  @headers.merge!(@data['headers'] || {}).filtered!
69
79
 
70
- logger.debug "Processing request (exchange: #{@exchange}, queue: #{@queue}, options: #{@headers}, message: #{@data})"
80
+ logger.debug "Request (exchange: #{@exchange.inspect}, queue: #{@queue.inspect}, " \
81
+ "options: #{@headers}, message: #{@data})"
71
82
 
72
83
  @action ||= @headers['action']
73
84
  @headers['action'] ||= @action
@@ -64,41 +64,39 @@ module Fleck
64
64
  ensure
65
65
  @updated_at = Time.now
66
66
  end
67
- end
68
67
 
69
- private
68
+ # Use a socket to test connection latency.
69
+ def measure_latency
70
+ socket = create_socket
70
71
 
71
- # Use a socket to test connection latency.
72
- def measure_latency
73
- socket = create_socket
72
+ started_at = Time.now.to_f
73
+ begin
74
+ socket.connect_nonblock(sock_addr)
75
+ rescue IO::WaitWritable
76
+ IO.select(nil, [socket], nil, CONN_TIMEOUT) or raise Timeout::Error
77
+ end
74
78
 
75
- started_at = Time.now.to_f
76
- begin
77
- socket.connect_nonblock(sock_addr)
78
- rescue IO::WaitWritable
79
- IO.select(nil, [socket], nil, CONN_TIMEOUT) or raise Timeout::Error
79
+ (Time.now.to_f - started_at) * 1000 # ms
80
+ ensure
81
+ socket&.close
80
82
  end
81
83
 
82
- (Time.now.to_f - started_at) * 1000 # ms
83
- ensure
84
- socket&.close
85
- end
86
-
87
- # Create a new socket for connection test.
88
- def create_socket
89
- socket = Socket.new(:AF_INET, :SOCK_STREAM, 0)
90
- socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
84
+ # Create a new socket for connection test.
85
+ def create_socket
86
+ socket = Socket.new(:AF_INET, :SOCK_STREAM, 0)
87
+ socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
91
88
 
92
- socket
93
- end
89
+ socket
90
+ end
94
91
 
95
- # Resolve domain name in order to obtain IP address to test.
96
- def sock_addr
97
- return @sock_addr if @sock_addr
92
+ # Resolve domain name in order to obtain IP address to test.
93
+ def sock_addr
94
+ return @sock_addr if @sock_addr
98
95
 
99
- addr = Socket.getaddrinfo(@host, nil)
100
- @sock_addr = Socket.pack_sockaddr_in(@port, addr[0][3])
96
+ addr = Socket.getaddrinfo(@host, nil)
97
+ @sock_addr = Socket.pack_sockaddr_in(@port, addr[0][3])
101
98
 
102
- @sock_addr
99
+ @sock_addr
100
+ end
103
101
  end
104
102
  end
data/lib/fleck/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Open `Fleck` module to set `VERSION` constant.
4
4
  module Fleck
5
- VERSION = '2.0.0'
5
+ VERSION = '2.1.3'
6
6
  end
data/lib/fleck.rb CHANGED
@@ -23,6 +23,7 @@ require 'fleck/utilities/hash_with_indifferent_access'
23
23
  module Fleck
24
24
  autoload :VERSION, 'fleck/version.rb'
25
25
  autoload :Loggable, 'fleck/loggable.rb'
26
+ autoload :HostRating, 'fleck/utilities/host_rating.rb'
26
27
  autoload :Configuration, 'fleck/configuration.rb'
27
28
  autoload :Core, 'fleck/core.rb'
28
29
  autoload :Consumer, 'fleck/consumer.rb'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fleck
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Groza Sergiu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-31 00:00:00.000000000 Z
11
+ date: 2022-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler