rookout 0.1.36 → 0.1.39
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rookout/augs/actions/action_run_processor.rb +1 -0
- data/lib/rookout/augs/aug.rb +3 -5
- data/lib/rookout/augs/aug_factory.rb +40 -16
- data/lib/rookout/augs/aug_rate_limiter.rb +35 -36
- data/lib/rookout/augs/limits_manager.rb +31 -0
- data/lib/rookout/augs/locations/location_file_line.rb +5 -1
- data/lib/rookout/com_ws/agent_com_ws.rb +4 -3
- data/lib/rookout/com_ws/envelope_wrapper.rb +7 -5
- data/lib/rookout/com_ws/git.rb +1 -1
- data/lib/rookout/com_ws/information.rb +2 -1
- data/lib/rookout/com_ws/output.rb +13 -7
- data/lib/rookout/commit.rb +1 -1
- data/lib/rookout/config.rb +55 -17
- data/lib/rookout/exceptions.rb +12 -9
- data/lib/rookout/interface.rb +9 -8
- data/lib/rookout/logger.rb +13 -7
- data/lib/rookout/processor/namespace_serializer.rb +1 -1
- data/lib/rookout/processor/namespace_serializer2.rb +26 -12
- data/lib/rookout/processor/namespaces/container_namespace.rb +1 -0
- data/lib/rookout/processor/namespaces/frame_namespace.rb +2 -3
- data/lib/rookout/processor/namespaces/namespace.rb +1 -0
- data/lib/rookout/processor/namespaces/noop_namespace.rb +0 -4
- data/lib/rookout/processor/namespaces/ruby_object_namespace.rb +31 -16
- data/lib/rookout/processor/namespaces/ruby_object_serializer.rb +9 -7
- data/lib/rookout/processor/namespaces/ruby_utils_namespace.rb +0 -4
- data/lib/rookout/processor/namespaces/stack_namespace.rb +1 -0
- data/lib/rookout/processor/namespaces/traceback_namespace.rb +4 -1
- data/lib/rookout/processor/operations/set_operation.rb +2 -0
- data/lib/rookout/processor/paths/arithmetic_path.rb +3 -1
- data/lib/rookout/processor/paths/canopy/actions.rb +5 -1
- data/lib/rookout/processor/paths/canopy/consts.rb +6 -4
- data/lib/rookout/processor/paths/canopy/markers.rb +15 -5
- data/lib/rookout/processor/processor_factory.rb +0 -2
- data/lib/rookout/processor/rook_error.rb +3 -1
- data/lib/rookout/rookout_singleton.rb +3 -2
- data/lib/rookout/sanitizer.rb +22 -0
- data/lib/rookout/services/position.rb +3 -2
- data/lib/rookout/services/tracer.rb +2 -2
- data/lib/rookout/utils.rb +7 -1
- data/lib/rookout/version.rb +1 -1
- data/lib/rookout.rb +4 -0
- metadata +41 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb5d9fef64ead13081355d267ad49671d0ca9ddf3e916ab5cf556d6d3b5997be
|
4
|
+
data.tar.gz: e114be3eb5224761c01f5a64bd4f367a90effed5d130c61f90ab4a8328152928
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1da019cfc4c4cbeada393163a6fb4fa01826fdfe9d76edfd0926218b40d6dbedafb2291de4c63a558ac521bf6d360fee76a8522b2a10d021ce7d3538ce1ae530
|
7
|
+
data.tar.gz: 0a24f0bee3b44a23c9ad1ab7e1cdd6c6fc694e50358abd9d96b219ab3a5116c6567ebfd94a498de0de3cda523605fe2d0d27617d3aca7a9161689eeaa9132131
|
data/lib/rookout/augs/aug.rb
CHANGED
@@ -10,13 +10,11 @@ module Rookout
|
|
10
10
|
require_relative "../logger"
|
11
11
|
|
12
12
|
class Aug
|
13
|
-
def initialize aug_id, action, condition,
|
14
|
-
# NOTE: max_aux_time is not implemented
|
15
|
-
|
13
|
+
def initialize aug_id, action, condition, limits_manager, _max_aug_time
|
16
14
|
@id = aug_id
|
17
15
|
@action = action
|
18
16
|
@condition = condition
|
19
|
-
@
|
17
|
+
@limits_manager = limits_manager
|
20
18
|
|
21
19
|
@enabled = true
|
22
20
|
@status = nil
|
@@ -36,7 +34,7 @@ module Rookout
|
|
36
34
|
namespace = create_namespaces frame, extracted
|
37
35
|
return if @condition && !@condition.evaluate(namespace)
|
38
36
|
|
39
|
-
@
|
37
|
+
@limits_manager.with_limit do
|
40
38
|
report_id = Utils.uuid
|
41
39
|
Logger.instance.info "Executing aug-\t#{id} (msg ID #{report_id})"
|
42
40
|
@action.execute @id, report_id, namespace, output
|
@@ -10,7 +10,9 @@ module Rookout
|
|
10
10
|
require_relative "locations/location_exception_handler"
|
11
11
|
require_relative "aug_rate_limiter"
|
12
12
|
require_relative "aug"
|
13
|
+
require_relative "limits_manager"
|
13
14
|
require_relative "../utils"
|
15
|
+
require_relative "../logger"
|
14
16
|
|
15
17
|
class AugFactory
|
16
18
|
def initialize output
|
@@ -34,10 +36,10 @@ module Rookout
|
|
34
36
|
end
|
35
37
|
condition = condition_configuration.nil? ? nil : Conditions::Condition.new(condition_configuration)
|
36
38
|
|
37
|
-
|
39
|
+
limits_manager = create_limits_manager configuration
|
38
40
|
|
39
41
|
max_aug_time_ns = Utils.milliseconds_to_nanoseconds max_aug_time
|
40
|
-
aug = Aug.new aug_id, action, condition,
|
42
|
+
aug = Aug.new aug_id, action, condition, limits_manager, max_aug_time_ns
|
41
43
|
|
42
44
|
location_configuration = configuration["location"]
|
43
45
|
raise Exceptions::RookAugInvalidKey.new("location", configuration) unless location_configuration.is_a? Hash
|
@@ -52,9 +54,9 @@ module Rookout
|
|
52
54
|
|
53
55
|
case name
|
54
56
|
when "file_line"
|
55
|
-
|
57
|
+
Locations::LocationFileLine.new configuration, @output, aug
|
56
58
|
when "exception_handler"
|
57
|
-
|
59
|
+
Locations::LocationExceptionHandler.new configuration, @output, aug
|
58
60
|
when "log_handler"
|
59
61
|
raise Exceptions::RookUnsupportedLiveLogger
|
60
62
|
else
|
@@ -62,25 +64,47 @@ module Rookout
|
|
62
64
|
end
|
63
65
|
end
|
64
66
|
|
65
|
-
def
|
66
|
-
|
67
|
-
|
67
|
+
def create_limits_manager configuration
|
68
|
+
limiters = []
|
69
|
+
if global_rate_limiter.nil?
|
70
|
+
rate_limit = parse_rate_limit configuration["rateLimit"], configuration["rateLimitModifier"], 200, 5000
|
71
|
+
limiters.append AugRateLimiter.new(*rate_limit)
|
72
|
+
else
|
73
|
+
limiters.append global_rate_limiter
|
74
|
+
end
|
68
75
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
+
LimitsManager.new limiters
|
77
|
+
end
|
78
|
+
|
79
|
+
def global_rate_limiter
|
80
|
+
if @global_rate_limiter.nil? && !Rookout::Config.global_rate_limit.nil?
|
81
|
+
rate_limit = parse_rate_limit Rookout::Config.global_rate_limit, "0", 0, 0
|
82
|
+
@global_rate_limiter = AugRateLimiter.new(*rate_limit)
|
83
|
+
Logger.instance.debug "Using global rate limiter with configuration: #{rate_limit}"
|
76
84
|
end
|
77
85
|
|
78
|
-
|
86
|
+
@global_rate_limiter
|
87
|
+
end
|
88
|
+
|
89
|
+
def parse_rate_limit config, modifier_config, default_quota, default_window
|
90
|
+
window_quota = default_quota
|
91
|
+
window_size = default_window
|
92
|
+
|
93
|
+
unless config.nil? || config.empty?
|
94
|
+
rate_limit_split = config.split "/"
|
95
|
+
unless rate_limit_split.length == 2 && rate_limit_split[0].is_number? && rate_limit_split[1].is_number?
|
96
|
+
raise Exceptions::RookInvalidRateLimitConfiguration, config
|
97
|
+
end
|
98
|
+
|
99
|
+
window_quota = rate_limit_split[0].to_i
|
100
|
+
window_size = rate_limit_split[1].to_i
|
101
|
+
end
|
79
102
|
|
80
103
|
window_quota_ns = Utils.milliseconds_to_nanoseconds window_quota
|
81
104
|
window_size_ns = Utils.milliseconds_to_nanoseconds window_size
|
105
|
+
rate_limit_modifier = modifier_config.to_i || 5
|
82
106
|
|
83
|
-
|
107
|
+
[window_quota_ns, window_size_ns, rate_limit_modifier]
|
84
108
|
end
|
85
109
|
end
|
86
110
|
end
|
@@ -8,51 +8,50 @@ module Rookout
|
|
8
8
|
@quota = quota
|
9
9
|
@has_quota = !@quota.nil? && (@quota > 0)
|
10
10
|
@window_size = window_size
|
11
|
-
|
11
|
+
if active_limit > 0
|
12
|
+
@active_weight = quota / active_limit
|
13
|
+
else
|
14
|
+
@active_weight = 0
|
15
|
+
end
|
12
16
|
|
13
17
|
@mutex = Mutex.new
|
14
18
|
@active_count = 0
|
15
19
|
@windows = {}
|
16
20
|
end
|
17
21
|
|
18
|
-
def
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
#
|
28
|
-
|
29
|
-
|
30
|
-
@
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
# If exceeding quota
|
38
|
-
if current_usage(now_ns, current_window_key, prev_window_key) > @quota
|
39
|
-
warning = Processor::RookError.new Exceptions::RookRuleRateLimited.new
|
40
|
-
UserWarnings.notify_warning warning
|
41
|
-
return
|
42
|
-
end
|
22
|
+
def before_run start_time
|
23
|
+
# If no quota, we can safely exit
|
24
|
+
unless @has_quota
|
25
|
+
return true
|
26
|
+
end
|
27
|
+
now_ns = Utils.time_to_nanoseconds start_time
|
28
|
+
current_window_key, prev_window_key = timestamp_to_window_keys now_ns
|
29
|
+
|
30
|
+
@mutex.synchronize do
|
31
|
+
# Clean old windows
|
32
|
+
cleanup now_ns
|
33
|
+
usage = current_usage now_ns, current_window_key, prev_window_key
|
34
|
+
@active_count += 1
|
35
|
+
|
36
|
+
# If exceeding quota
|
37
|
+
if usage > @quota
|
38
|
+
warning = Processor::RookError.new Exceptions::RookRuleRateLimited.new
|
39
|
+
UserWarnings.notify_warning warning
|
40
|
+
return false
|
43
41
|
end
|
42
|
+
|
43
|
+
return true
|
44
44
|
end
|
45
|
+
end
|
45
46
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
47
|
+
def after_run start_time
|
48
|
+
if @has_quota
|
49
|
+
now_ns = Utils.time_to_nanoseconds start_time
|
50
|
+
current_window_key, = timestamp_to_window_keys now_ns
|
51
|
+
@mutex.synchronize { record_usage current_window_key, Utils.time_to_nanoseconds(Time.now) - now_ns }
|
52
52
|
end
|
53
|
-
ensure
|
54
53
|
# Reduce active count
|
55
|
-
@mutex.synchronize { @active_count -= 1 }
|
54
|
+
@mutex.synchronize { @active_count -= 1 }
|
56
55
|
end
|
57
56
|
|
58
57
|
private
|
@@ -75,7 +74,7 @@ module Rookout
|
|
75
74
|
prev_window_usage = @windows[prev_window_key] || 0
|
76
75
|
|
77
76
|
# Previous window weight
|
78
|
-
prev_weight = 1 - (now_ns - current_window_key) / @window_size.to_f
|
77
|
+
prev_weight = 1 - ((now_ns - current_window_key) / @window_size.to_f)
|
79
78
|
|
80
79
|
# Final weighted usage
|
81
80
|
(prev_window_usage * prev_weight) + (@active_count * @active_weight) + current_window_usage
|
@@ -91,7 +90,7 @@ module Rookout
|
|
91
90
|
end
|
92
91
|
|
93
92
|
def cleanup now_ns
|
94
|
-
@windows.reject! { |key, _| key < (now_ns - @window_size * 5) } if @windows.length > 10
|
93
|
+
@windows.reject! { |key, _| key < (now_ns - (@window_size * 5)) } if @windows.length > 10
|
95
94
|
end
|
96
95
|
end
|
97
96
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Rookout
|
2
|
+
module Augs
|
3
|
+
class LimitsManager
|
4
|
+
def initialize limiters
|
5
|
+
@limiters = limiters
|
6
|
+
end
|
7
|
+
|
8
|
+
def with_limit start_time = nil
|
9
|
+
start_time ||= Time.now
|
10
|
+
can_execute = true
|
11
|
+
after_execute = []
|
12
|
+
|
13
|
+
@limiters.each do |limiter|
|
14
|
+
if limiter.before_run start_time
|
15
|
+
after_execute.append -> { limiter.after_run start_time }
|
16
|
+
else
|
17
|
+
can_execute = false
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
if can_execute
|
22
|
+
yield
|
23
|
+
end
|
24
|
+
ensure
|
25
|
+
unless after_execute.nil?
|
26
|
+
after_execute.each(&:call)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -21,7 +21,11 @@ module Rookout
|
|
21
21
|
@line_unique = arguments["line_unique"] || false
|
22
22
|
end
|
23
23
|
|
24
|
-
attr_reader :filename
|
24
|
+
attr_reader :filename
|
25
|
+
attr_reader :lineno
|
26
|
+
attr_reader :file_hash
|
27
|
+
attr_reader :line_crc
|
28
|
+
attr_reader :line_unique
|
25
29
|
|
26
30
|
def add_aug trigger_services
|
27
31
|
trigger_services.get_service("position").add_aug self
|
@@ -118,7 +118,7 @@ module Rookout
|
|
118
118
|
|
119
119
|
if @print_on_initial_connection
|
120
120
|
@print_on_initial_connection = false
|
121
|
-
|
121
|
+
$stderr.puts "[Rookout] Successfully connected to controller"
|
122
122
|
end
|
123
123
|
Logger.instance.debug "WebSocket connected successfully"
|
124
124
|
Logger.instance.info "Finished initialization"
|
@@ -205,9 +205,10 @@ module Rookout
|
|
205
205
|
msg = envelope_wrapper.envelope
|
206
206
|
@pending_messages_length -= envelope_wrapper.calculate_size
|
207
207
|
|
208
|
-
|
208
|
+
case msg
|
209
|
+
when ExitMessage
|
209
210
|
break if msg.thread == Thread.current
|
210
|
-
|
211
|
+
when FlushMessage
|
211
212
|
msg.event.set
|
212
213
|
else
|
213
214
|
begin
|
@@ -8,8 +8,7 @@ class EnvelopeWrapperBase
|
|
8
8
|
timestamp = Google::Protobuf::Timestamp.new
|
9
9
|
timestamp.from_time Time.new
|
10
10
|
envelope = Com::Rookout::Envelope.new msg: any_message, timestamp: timestamp
|
11
|
-
|
12
|
-
serialized
|
11
|
+
Com::Rookout::Envelope.encode envelope
|
13
12
|
end
|
14
13
|
|
15
14
|
def envelope
|
@@ -23,11 +22,13 @@ end
|
|
23
22
|
|
24
23
|
class Variant2EnvelopeWrapper < EnvelopeWrapperBase
|
25
24
|
def initialize agent_id, aug_id, report_id, arguments
|
25
|
+
super()
|
26
|
+
|
26
27
|
@aug_report_message = Com::Rookout::AugReportMessage.new agent_id: agent_id,
|
27
|
-
|
28
|
-
|
28
|
+
aug_id: aug_id,
|
29
|
+
report_id: report_id
|
29
30
|
@serializer = Rookout::Processor::NamespaceSerializer2.new
|
30
|
-
@aug_report_message.arguments2 = @serializer.dump arguments
|
31
|
+
@aug_report_message.arguments2 = @serializer.dump arguments, true
|
31
32
|
@serializer.string_cache.each { |key, value| @aug_report_message.strings_cache[key] = value }
|
32
33
|
@envelope = wrap_in_envelope @aug_report_message
|
33
34
|
@aug_report_message = nil
|
@@ -44,6 +45,7 @@ end
|
|
44
45
|
|
45
46
|
class EnvelopeWrapper < EnvelopeWrapperBase
|
46
47
|
def initialize message
|
48
|
+
super()
|
47
49
|
@envelope = wrap_in_envelope message
|
48
50
|
end
|
49
51
|
|
data/lib/rookout/com_ws/git.rb
CHANGED
@@ -42,7 +42,8 @@ module Rookout
|
|
42
42
|
@closing = false
|
43
43
|
end
|
44
44
|
|
45
|
-
attr_accessor :agent_id
|
45
|
+
attr_accessor :agent_id
|
46
|
+
attr_accessor :agent_com
|
46
47
|
|
47
48
|
def close
|
48
49
|
@closing = true
|
@@ -86,13 +87,17 @@ module Rookout
|
|
86
87
|
if arguments.nil? || arguments.call_method("size", "") == 0
|
87
88
|
protobuf_arguments = nil
|
88
89
|
else
|
89
|
-
protobuf_arguments = Processor::NamespaceSerializer.dump arguments
|
90
|
+
protobuf_arguments = Processor::NamespaceSerializer.dump arguments, true
|
90
91
|
end
|
91
92
|
|
92
|
-
envelope_wrapper = EnvelopeWrapper.new(
|
93
|
-
|
94
|
-
|
95
|
-
|
93
|
+
envelope_wrapper = EnvelopeWrapper.new(
|
94
|
+
Com::Rookout::AugReportMessage.new(
|
95
|
+
agent_id: @agent_id,
|
96
|
+
aug_id: aug_id,
|
97
|
+
report_id: report_id,
|
98
|
+
arguments: protobuf_arguments
|
99
|
+
)
|
100
|
+
)
|
96
101
|
end
|
97
102
|
|
98
103
|
@agent_com.add envelope_wrapper
|
@@ -123,7 +128,8 @@ module Rookout
|
|
123
128
|
protobuf_arguments = nil
|
124
129
|
else
|
125
130
|
protobuf_arguments = Processor::NamespaceSerializer.dump(
|
126
|
-
Processor::Namespaces::RubyObjectNamespace.new(arguments)
|
131
|
+
Processor::Namespaces::RubyObjectNamespace.new(arguments),
|
132
|
+
true
|
127
133
|
)
|
128
134
|
end
|
129
135
|
|
data/lib/rookout/commit.rb
CHANGED
data/lib/rookout/config.rb
CHANGED
@@ -6,21 +6,26 @@ module Rookout
|
|
6
6
|
# Magic to allow for module variables to be easily accessible
|
7
7
|
class << self
|
8
8
|
attr_accessor :debug
|
9
|
+
|
9
10
|
Rookout::Config.debug = false
|
10
11
|
|
11
|
-
attr_accessor :logger_filename
|
12
|
+
attr_accessor :logger_filename
|
13
|
+
attr_accessor :logger_log_to_stderr
|
14
|
+
attr_accessor :logger_log_level
|
15
|
+
|
12
16
|
Rookout::Config.logger_filename = "rookout/ruby-rook.log".freeze
|
13
17
|
Rookout::Config.logger_log_to_stderr = false
|
14
18
|
Rookout::Config.logger_log_level = :info
|
15
19
|
|
16
|
-
attr_accessor :agent_com_configuration_command_thread_name
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
attr_accessor :agent_com_configuration_command_thread_name
|
21
|
+
attr_accessor :agent_com_max_message_limit
|
22
|
+
attr_accessor :agent_com_max_queue_messages_length
|
23
|
+
attr_accessor :agent_com_timeout
|
24
|
+
attr_accessor :agent_com_ping_interval
|
25
|
+
attr_accessor :agent_com_ping_timeout
|
26
|
+
attr_accessor :agent_com_flush_timeout
|
27
|
+
attr_accessor :agent_com_max_queued_messages
|
28
|
+
|
24
29
|
Rookout::Config.agent_com_max_message_limit = 1024 * 1024
|
25
30
|
Rookout::Config.agent_com_max_queue_messages_length = 15 * 1024 * 1024
|
26
31
|
Rookout::Config.agent_com_timeout = 3
|
@@ -29,47 +34,80 @@ module Rookout
|
|
29
34
|
Rookout::Config.agent_com_flush_timeout = 3
|
30
35
|
Rookout::Config.agent_com_max_queued_messages = 100
|
31
36
|
|
32
|
-
attr_accessor :backoff_factor
|
37
|
+
attr_accessor :backoff_factor
|
38
|
+
attr_accessor :backoff_reset_time
|
39
|
+
attr_accessor :backoff_max_time
|
40
|
+
|
33
41
|
Rookout::Config.backoff_factor = 0.2
|
34
42
|
Rookout::Config.backoff_max_time = 60
|
35
43
|
Rookout::Config.backoff_reset_time = 3 * 60.0
|
36
44
|
|
37
|
-
attr_accessor :output_max_status_updates
|
38
|
-
|
39
|
-
|
40
|
-
|
45
|
+
attr_accessor :output_max_status_updates
|
46
|
+
attr_accessor :output_max_aug_messages
|
47
|
+
attr_accessor :output_max_log_items
|
48
|
+
attr_accessor :output_bucket_refresh_rate
|
49
|
+
|
41
50
|
Rookout::Config.output_max_status_updates = 200
|
42
51
|
Rookout::Config.output_max_aug_messages = 100
|
43
52
|
Rookout::Config.output_max_log_items = 200
|
44
53
|
Rookout::Config.output_bucket_refresh_rate = 10
|
45
54
|
|
46
55
|
attr_accessor :instrumentation_max_aug_time
|
56
|
+
|
47
57
|
Rookout::Config.instrumentation_max_aug_time = 400
|
48
58
|
|
49
|
-
attr_accessor :user_git_commit
|
59
|
+
attr_accessor :user_git_commit
|
60
|
+
attr_accessor :user_git_origin
|
61
|
+
|
50
62
|
Rookout::Config.user_git_commit = nil
|
51
63
|
Rookout::Config.user_git_origin = nil
|
52
64
|
|
53
|
-
attr_accessor :rookout_version
|
65
|
+
attr_accessor :rookout_version
|
66
|
+
attr_accessor :rookout_commit
|
67
|
+
|
54
68
|
Rookout::Config.rookout_version = Rookout::VERSION
|
55
69
|
Rookout::Config.rookout_commit = Rookout::COMMIT
|
56
70
|
|
57
71
|
attr_accessor :protobuf_version2
|
72
|
+
|
58
73
|
Rookout::Config.protobuf_version2 = false
|
59
74
|
|
60
75
|
attr_accessor :true_values
|
76
|
+
|
61
77
|
Rookout::Config.true_values = ["y", "Y", "yes", "Yes", "YES", "true", "True", "TRUE", "1"]
|
62
78
|
|
79
|
+
attr_accessor :global_rate_limit
|
80
|
+
|
81
|
+
Rookout::Config.global_rate_limit = nil
|
63
82
|
|
64
83
|
def update_config configuration
|
84
|
+
update_var2_config configuration
|
85
|
+
update_global_rate_limit_config configuration
|
86
|
+
end
|
87
|
+
|
88
|
+
def update_var2_config configuration
|
65
89
|
is_config_proto2 = configuration["RUBY_PROTOBUF_VERSION_2"]
|
66
90
|
return if is_config_proto2.nil?
|
67
|
-
is_env_proto2 = ENV["
|
91
|
+
is_env_proto2 = ENV["ROOKOUT_Protobuf_Version2"]
|
68
92
|
if is_env_proto2.nil?
|
69
93
|
@protobuf_version2 = true if @true_values.include? is_config_proto2
|
70
94
|
elsif @true_values.include? is_env_proto2
|
95
|
+
Logger.instance.debug "ROOKOUT_Protobuf_Version2 env is preset: #{is_env_proto2}"
|
71
96
|
@protobuf_version2 = true
|
72
97
|
end
|
98
|
+
Logger.instance.info "Updating ROOKOUT_Protobuf_Version2 value to: #{@protobuf_version2}"
|
99
|
+
end
|
100
|
+
|
101
|
+
def update_global_rate_limit_config configuration
|
102
|
+
global_rate_limit = ENV["ROOKOUT_GLOBAL_RATE_LIMIT"]
|
103
|
+
if global_rate_limit.nil?
|
104
|
+
global_rate_limit = configuration["RUBY_GLOBAL_RATE_LIMIT"]
|
105
|
+
end
|
106
|
+
|
107
|
+
return if global_rate_limit.nil?
|
108
|
+
|
109
|
+
@global_rate_limit = global_rate_limit
|
110
|
+
Logger.instance.info "Updating global rate limit to: #{global_rate_limit}"
|
73
111
|
end
|
74
112
|
end
|
75
113
|
end
|
data/lib/rookout/exceptions.rb
CHANGED
@@ -11,9 +11,6 @@ module Rookout
|
|
11
11
|
end
|
12
12
|
|
13
13
|
class RookInterfaceException < ToolException
|
14
|
-
def initialize message
|
15
|
-
super message
|
16
|
-
end
|
17
14
|
end
|
18
15
|
|
19
16
|
class RookVersionNotSupported < ToolException
|
@@ -92,8 +89,8 @@ module Rookout
|
|
92
89
|
class RookMessageSizeExceeded < ToolException
|
93
90
|
def initialize message_size, max_message_size
|
94
91
|
super "Message size of #{message_size} exceeds max size limit of #{max_message_size}. " \
|
95
|
-
|
96
|
-
|
92
|
+
"Change the depth of collection or change the default by setting ROOKOUT_MAX_MESSAGE_SIZE " \
|
93
|
+
"as environment variable or system property",
|
97
94
|
{ "message_size" => message_size, "max_message_size" => max_message_size }
|
98
95
|
end
|
99
96
|
end
|
@@ -101,7 +98,7 @@ module Rookout
|
|
101
98
|
class RookRuleRateLimited < ToolException
|
102
99
|
def initialize
|
103
100
|
super "Breakpoint was disabled due to rate-limiting. " \
|
104
|
-
|
101
|
+
"For more information: https://docs.rookout.com/docs/breakpoints-tasks.html#rate-limiting"
|
105
102
|
end
|
106
103
|
end
|
107
104
|
|
@@ -139,9 +136,6 @@ module Rookout
|
|
139
136
|
end
|
140
137
|
|
141
138
|
class RookInvalidOptions < ToolException
|
142
|
-
def initialize description
|
143
|
-
super description
|
144
|
-
end
|
145
139
|
end
|
146
140
|
|
147
141
|
class RookInvalidLabel < ToolException
|
@@ -220,6 +214,15 @@ module Rookout
|
|
220
214
|
end
|
221
215
|
end
|
222
216
|
|
217
|
+
class RookInvalidRateLimitConfiguration < ToolException
|
218
|
+
def initialize config
|
219
|
+
super "Invalid rate limit configuration: #{config}",
|
220
|
+
{
|
221
|
+
"rate_limit_config" => config
|
222
|
+
}
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
223
226
|
class RookUnsupportedLiveLogger < ToolException
|
224
227
|
def initialize
|
225
228
|
super "Live Logger is not supported. Try using Rookout Live Debugger instead."
|
data/lib/rookout/interface.rb
CHANGED
@@ -14,7 +14,7 @@ module Rookout
|
|
14
14
|
|
15
15
|
def print_debug_messages
|
16
16
|
puts "[Rookout] Running in debug mode"
|
17
|
-
puts "[Rookout] Rookout SDK for ruby:
|
17
|
+
puts "[Rookout] Rookout SDK for ruby: #{Config.rookout_version}"
|
18
18
|
end
|
19
19
|
|
20
20
|
def start options = {}
|
@@ -36,16 +36,16 @@ module Rookout
|
|
36
36
|
rook.connect(**@start_options)
|
37
37
|
rescue LoadError
|
38
38
|
raise if throw_errors
|
39
|
-
|
40
|
-
|
39
|
+
$stderr.puts "[Rookout] Failed to load Rookout. Please make sure to force build native extensions by setting" \
|
40
|
+
"'bundle config force_ruby_platform true'"
|
41
41
|
rescue RookMissingToken, RookInvalidToken, RookInvalidOptions, RookVersionNotSupported, RookBadProtobuf => e
|
42
42
|
raise if throw_errors
|
43
|
-
|
43
|
+
$stderr.puts "[Rookout] Failed to start Rookout: #{e.message}"
|
44
44
|
rescue RookCommunicationException => e
|
45
45
|
raise if throw_errors
|
46
|
-
Logger.instance.warning "[Rookout]
|
46
|
+
Logger.instance.warning "[Rookout] #{e.message}"
|
47
47
|
rescue Exception => e
|
48
|
-
|
48
|
+
$stderr.puts e.full_message if Config.debug
|
49
49
|
raise if throw_errors
|
50
50
|
end
|
51
51
|
end
|
@@ -82,12 +82,13 @@ module Rookout
|
|
82
82
|
# Only test alpine
|
83
83
|
return unless File.exist? "/etc/alpine-release"
|
84
84
|
|
85
|
+
# Make sure protobuf is built from source
|
85
86
|
protobuf = Gem::Specification.find_by_path "google/protobuf"
|
86
|
-
|
87
|
+
$stderr.puts RookBadProtobuf.new.message if protobuf.nil?
|
87
88
|
return unless protobuf.platform != "ruby"
|
88
89
|
|
89
90
|
error = RookBadProtobufPlatform.new protobuf.platform
|
90
|
-
|
91
|
+
$stderr.puts error.message
|
91
92
|
end
|
92
93
|
|
93
94
|
def configure_globals options
|