sqreen 1.20.4.beta1 → 1.21.0
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 +4 -4
- data/CHANGELOG.md +13 -0
- data/lib/sqreen/condition_evaluator.rb +8 -2
- data/lib/sqreen/deliveries/batch.rb +8 -1
- data/lib/sqreen/ecosystem.rb +123 -0
- data/lib/sqreen/ecosystem/databases/database_connection_data.rb +23 -0
- data/lib/sqreen/ecosystem/databases/mongo.rb +39 -0
- data/lib/sqreen/ecosystem/databases/mysql.rb +54 -0
- data/lib/sqreen/ecosystem/databases/postgres.rb +51 -0
- data/lib/sqreen/ecosystem/databases/redis.rb +36 -0
- data/lib/sqreen/ecosystem/dispatch_table.rb +43 -0
- data/lib/sqreen/ecosystem/exception_reporting.rb +28 -0
- data/lib/sqreen/ecosystem/http/net_http.rb +50 -0
- data/lib/sqreen/ecosystem/http/rack_request.rb +39 -0
- data/lib/sqreen/ecosystem/loggable.rb +13 -0
- data/lib/sqreen/ecosystem/messaging/bunny.rb +61 -0
- data/lib/sqreen/ecosystem/messaging/kafka.rb +70 -0
- data/lib/sqreen/ecosystem/messaging/kinesis.rb +66 -0
- data/lib/sqreen/ecosystem/messaging/sqs.rb +68 -0
- data/lib/sqreen/ecosystem/module_api.rb +30 -0
- data/lib/sqreen/ecosystem/module_api/event_listener.rb +18 -0
- data/lib/sqreen/ecosystem/module_api/instrumentation.rb +23 -0
- data/lib/sqreen/ecosystem/module_api/message_producer.rb +57 -0
- data/lib/sqreen/ecosystem/module_api/signal_producer.rb +24 -0
- data/lib/sqreen/ecosystem/module_api/tracing.rb +45 -0
- data/lib/sqreen/ecosystem/module_api/tracing/client_data.rb +31 -0
- data/lib/sqreen/ecosystem/module_api/tracing/consumer_data.rb +13 -0
- data/lib/sqreen/ecosystem/module_api/tracing/messaging_data.rb +35 -0
- data/lib/sqreen/ecosystem/module_api/tracing/producer_data.rb +13 -0
- data/lib/sqreen/ecosystem/module_api/tracing/server_data.rb +27 -0
- data/lib/sqreen/ecosystem/module_api/tracing_id_generation.rb +16 -0
- data/lib/sqreen/ecosystem/module_api/transaction_storage.rb +71 -0
- data/lib/sqreen/ecosystem/module_registry.rb +48 -0
- data/lib/sqreen/ecosystem/tracing/modules/client.rb +35 -0
- data/lib/sqreen/ecosystem/tracing/modules/consumer.rb +35 -0
- data/lib/sqreen/ecosystem/tracing/modules/determine_ip.rb +28 -0
- data/lib/sqreen/ecosystem/tracing/modules/producer.rb +35 -0
- data/lib/sqreen/ecosystem/tracing/modules/server.rb +30 -0
- data/lib/sqreen/ecosystem/tracing/sampler.rb +160 -0
- data/lib/sqreen/ecosystem/tracing/sampling_configuration.rb +150 -0
- data/lib/sqreen/ecosystem/tracing/signals/tracing_client.rb +53 -0
- data/lib/sqreen/ecosystem/tracing/signals/tracing_consumer.rb +56 -0
- data/lib/sqreen/ecosystem/tracing/signals/tracing_producer.rb +56 -0
- data/lib/sqreen/ecosystem/tracing/signals/tracing_server.rb +53 -0
- data/lib/sqreen/ecosystem/tracing_broker.rb +101 -0
- data/lib/sqreen/ecosystem/tracing_id_setup.rb +34 -0
- data/lib/sqreen/ecosystem/transaction_storage.rb +64 -0
- data/lib/sqreen/ecosystem/util/call_writers_from_init.rb +13 -0
- data/lib/sqreen/ecosystem_integration.rb +81 -0
- data/lib/sqreen/ecosystem_integration/around_callbacks.rb +89 -0
- data/lib/sqreen/ecosystem_integration/instrumentation_service.rb +38 -0
- data/lib/sqreen/ecosystem_integration/request_lifecycle_tracking.rb +58 -0
- data/lib/sqreen/ecosystem_integration/signal_consumption.rb +35 -0
- data/lib/sqreen/events/request_record.rb +0 -1
- data/lib/sqreen/frameworks/generic.rb +15 -1
- data/lib/sqreen/frameworks/request_recorder.rb +2 -0
- data/lib/sqreen/graft/call.rb +9 -0
- data/lib/sqreen/graft/hook.rb +5 -3
- data/lib/sqreen/graft/hook_point.rb +17 -10
- data/lib/sqreen/kit/signals/specialized/sqreen_exception.rb +2 -0
- data/lib/sqreen/legacy/old_event_submission_strategy.rb +9 -2
- data/lib/sqreen/remote_command.rb +3 -0
- data/lib/sqreen/rules.rb +7 -3
- data/lib/sqreen/rules/custom_error_cb.rb +3 -3
- data/lib/sqreen/rules/waf_cb.rb +3 -3
- data/lib/sqreen/runner.rb +19 -5
- data/lib/sqreen/session.rb +2 -0
- data/lib/sqreen/signals/conversions.rb +6 -1
- data/lib/sqreen/version.rb +1 -1
- data/lib/sqreen/weave/legacy/instrumentation.rb +38 -19
- metadata +57 -11
- data/lib/sqreen/encoding_sanitizer.rb +0 -27
|
@@ -23,6 +23,7 @@ module Sqreen
|
|
|
23
23
|
:ips_whitelist => :change_whitelisted_ips,
|
|
24
24
|
:get_bundle => :upload_bundle,
|
|
25
25
|
:performance_budget => :change_performance_budget,
|
|
26
|
+
:tracing_enable => :tracing_enable,
|
|
26
27
|
}.freeze
|
|
27
28
|
|
|
28
29
|
attr_reader :uuid
|
|
@@ -40,6 +41,8 @@ module Sqreen
|
|
|
40
41
|
begin
|
|
41
42
|
output = runner.send(KNOWN_COMMANDS[@name], *@params, context_infos)
|
|
42
43
|
rescue => e
|
|
44
|
+
Sqreen.log.warn { "Command failed with #{e}" }
|
|
45
|
+
Sqreen.log.debug { e.backtrace.map { |x| " #{x}" }.join("\n") }
|
|
43
46
|
Sqreen::RemoteException.record(e)
|
|
44
47
|
return { :status => false, :reason => "error: #{e.inspect}" }
|
|
45
48
|
end
|
data/lib/sqreen/rules.rb
CHANGED
|
@@ -120,9 +120,13 @@ module Sqreen
|
|
|
120
120
|
|
|
121
121
|
cb_class = ExecJSCB if js
|
|
122
122
|
|
|
123
|
-
if cbname
|
|
124
|
-
|
|
125
|
-
|
|
123
|
+
if cbname
|
|
124
|
+
cb_class = if cbname.include?('::')
|
|
125
|
+
# Only load callbacks from sqreen
|
|
126
|
+
Rules.walk_const_get(cbname) if cbname.start_with?('::Sqreen::', 'Sqreen::')
|
|
127
|
+
else
|
|
128
|
+
Rules.const_get(cbname) if Rules.const_defined?(cbname) # rubocop:disable Style/IfInsideElse
|
|
129
|
+
end
|
|
126
130
|
end
|
|
127
131
|
|
|
128
132
|
if cb_class.nil?
|
|
@@ -55,12 +55,12 @@ module Sqreen
|
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
def respond_page
|
|
58
|
-
page
|
|
58
|
+
@page ||= File.open(File.join(File.dirname(__FILE__), '../attack_detected.html'), 'rb', &:read)
|
|
59
59
|
headers = {
|
|
60
60
|
'Content-Type' => 'text/html',
|
|
61
|
-
'Content-Length' => page.size.to_s,
|
|
61
|
+
'Content-Length' => @page.size.to_s,
|
|
62
62
|
}
|
|
63
|
-
[@status_code, headers, page]
|
|
63
|
+
[@status_code, headers, [@page]]
|
|
64
64
|
end
|
|
65
65
|
end
|
|
66
66
|
end
|
data/lib/sqreen/rules/waf_cb.rb
CHANGED
|
@@ -11,7 +11,7 @@ require 'sqreen/safe_json'
|
|
|
11
11
|
require 'sqreen/exception'
|
|
12
12
|
require 'sqreen/util/capper'
|
|
13
13
|
require 'sqreen/dependency/libsqreen'
|
|
14
|
-
require 'sqreen/
|
|
14
|
+
require 'sqreen/kit/string_sanitizer'
|
|
15
15
|
|
|
16
16
|
module Sqreen
|
|
17
17
|
module Rules
|
|
@@ -60,7 +60,7 @@ module Sqreen
|
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
# 0 for using defaults (PW_RUN_TIMEOUT)
|
|
63
|
-
@max_run_budget_us = (@data['values'].fetch('
|
|
63
|
+
@max_run_budget_us = (@data['values'].fetch('max_budget_ms', 0) * 1000).to_i
|
|
64
64
|
@max_run_budget_us = INFINITE_BUDGET_US if @max_run_budget_us >= INFINITE_BUDGET_US
|
|
65
65
|
|
|
66
66
|
Sqreen.log.debug { "Max WAF run budget for #{@waf_rule_name} set to #{@max_run_budget_us} us" }
|
|
@@ -82,7 +82,7 @@ module Sqreen
|
|
|
82
82
|
waf_args = binding_accessors.each_with_object({}) do |(e, b), h|
|
|
83
83
|
h[e] = capper.call(b.resolve(*env))
|
|
84
84
|
end
|
|
85
|
-
waf_args = Sqreen::
|
|
85
|
+
waf_args = Sqreen::Kit::StringSanitizer.sanitize(waf_args)
|
|
86
86
|
|
|
87
87
|
if budget
|
|
88
88
|
rem_budget_s = budget - (Sqreen.time - start)
|
data/lib/sqreen/runner.rb
CHANGED
|
@@ -14,6 +14,7 @@ require 'sqreen/log'
|
|
|
14
14
|
require 'sqreen/agent_message'
|
|
15
15
|
require 'sqreen/rules'
|
|
16
16
|
require 'sqreen/session'
|
|
17
|
+
require 'sqreen/version'
|
|
17
18
|
require 'sqreen/remote_command'
|
|
18
19
|
require 'sqreen/capped_queue'
|
|
19
20
|
require 'sqreen/metrics_store'
|
|
@@ -26,6 +27,7 @@ require 'sqreen/legacy/instrumentation'
|
|
|
26
27
|
require 'sqreen/call_countable'
|
|
27
28
|
require 'sqreen/weave/legacy/instrumentation'
|
|
28
29
|
require 'sqreen/kit/configuration'
|
|
30
|
+
require 'sqreen/ecosystem_integration'
|
|
29
31
|
|
|
30
32
|
module Sqreen
|
|
31
33
|
@features = {}
|
|
@@ -52,10 +54,6 @@ module Sqreen
|
|
|
52
54
|
@queue ||= CappedQueue.new(MAX_QUEUE_LENGTH)
|
|
53
55
|
end
|
|
54
56
|
|
|
55
|
-
def update_queue(queue)
|
|
56
|
-
@queue = queue
|
|
57
|
-
end
|
|
58
|
-
|
|
59
57
|
def observations_queue
|
|
60
58
|
@observations_queue ||= CappedQueue.new(MAX_OBS_QUEUE_LENGTH)
|
|
61
59
|
end
|
|
@@ -104,8 +102,8 @@ module Sqreen
|
|
|
104
102
|
# we may want to do that in a thread in order to prevent delaying app
|
|
105
103
|
# startup
|
|
106
104
|
# set_at_exit do not place a global at_exit (used for testing)
|
|
105
|
+
# @param [Sqreen::Frameworks::GenericFramework] framework
|
|
107
106
|
def initialize(configuration, framework, set_at_exit = true, session_class = Sqreen::Session)
|
|
108
|
-
Sqreen.update_queue(CappedQueue.new(MAX_QUEUE_LENGTH))
|
|
109
107
|
@logged_out_tried = false
|
|
110
108
|
@configuration = configuration
|
|
111
109
|
@framework = framework
|
|
@@ -132,6 +130,7 @@ module Sqreen
|
|
|
132
130
|
Sqreen::Kit::Configuration.ingestion_url = chosen_endpoints.ingestion.url
|
|
133
131
|
Sqreen::Kit::Configuration.certificate_store = chosen_endpoints.ingestion.ca_store
|
|
134
132
|
Sqreen::Kit::Configuration.proxy_url = @proxy_url
|
|
133
|
+
Sqreen::Kit::Configuration.default_source = "sqreen:agent:ruby:#{Sqreen::VERSION}"
|
|
135
134
|
|
|
136
135
|
register_exit_cb if set_at_exit
|
|
137
136
|
|
|
@@ -168,6 +167,10 @@ module Sqreen
|
|
|
168
167
|
end
|
|
169
168
|
self.features = wanted_features
|
|
170
169
|
|
|
170
|
+
@ecosystem_integration = EcosystemIntegration.new(framework, Sqreen.queue)
|
|
171
|
+
framework.req_start_cb = @ecosystem_integration.method(:request_start)
|
|
172
|
+
framework.req_end_cb = @ecosystem_integration.method(:request_end)
|
|
173
|
+
|
|
171
174
|
# Ensure a deliverer is there unless features have set it first
|
|
172
175
|
self.deliverer ||= Deliveries::Simple.new(session)
|
|
173
176
|
context_infos = {}
|
|
@@ -268,6 +271,10 @@ module Sqreen
|
|
|
268
271
|
rulespack_id, rules = load_rules(context_infos)
|
|
269
272
|
@framework.instrument_when_ready!(instrumenter, rules)
|
|
270
273
|
Sqreen.log.info 'Instrumentation set up'
|
|
274
|
+
|
|
275
|
+
# XXX: ecosystem instrumentation should likely be deferred
|
|
276
|
+
# the same way the rest might be
|
|
277
|
+
@ecosystem_integration.init
|
|
271
278
|
rulespack_id.to_s
|
|
272
279
|
end
|
|
273
280
|
|
|
@@ -409,6 +416,13 @@ module Sqreen
|
|
|
409
416
|
{ :was => prev }
|
|
410
417
|
end
|
|
411
418
|
|
|
419
|
+
# @param [String] tracing_id_prefix
|
|
420
|
+
# @param [Array<Hash{String=>Object}>] sampling_config
|
|
421
|
+
def tracing_enable(tracing_id_prefix, sampling_config, _context_infos = {})
|
|
422
|
+
@ecosystem_integration.handle_tracing_command(tracing_id_prefix, sampling_config)
|
|
423
|
+
{ status: true }
|
|
424
|
+
end
|
|
425
|
+
|
|
412
426
|
def upload_bundle(_context_infos = {})
|
|
413
427
|
t = Time.now
|
|
414
428
|
session.post_bundle(RuntimeInfos.dependencies_signature, RuntimeInfos.dependencies)
|
data/lib/sqreen/session.rb
CHANGED
|
@@ -249,8 +249,10 @@ module Sqreen
|
|
|
249
249
|
end
|
|
250
250
|
Sqreen.log.info 'Login success.'
|
|
251
251
|
@session_id = res['session_id']
|
|
252
|
+
|
|
252
253
|
Kit::Configuration.session_key = @session_id
|
|
253
254
|
Kit.reset
|
|
255
|
+
|
|
254
256
|
Sqreen.log.debug { "received session_id #{@session_id}" }
|
|
255
257
|
Sqreen.logged_in = true
|
|
256
258
|
res
|
|
@@ -118,6 +118,7 @@ module Sqreen
|
|
|
118
118
|
signals += req_rec.processed_sdk_calls
|
|
119
119
|
.select { |h| h[:name] == :track }
|
|
120
120
|
.map { |h| convert_track(h) }
|
|
121
|
+
signals += (observed[:signals] || [])
|
|
121
122
|
|
|
122
123
|
trace = Kit::Signals::Specialized::HttpTrace.new(
|
|
123
124
|
actor: Kit::Signals::Actor.new(
|
|
@@ -137,7 +138,7 @@ module Sqreen
|
|
|
137
138
|
trace
|
|
138
139
|
end
|
|
139
140
|
|
|
140
|
-
# @
|
|
141
|
+
# @return [Array<Sqreen::Kit::Signals::Signal|Sqreen::Kit::Signals::Trace>]
|
|
141
142
|
def convert_batch(batch)
|
|
142
143
|
batch.map do |evt|
|
|
143
144
|
case evt
|
|
@@ -147,6 +148,10 @@ module Sqreen
|
|
|
147
148
|
convert_metric_sample(evt)
|
|
148
149
|
when RequestRecord
|
|
149
150
|
convert_req_record(evt)
|
|
151
|
+
when Sqreen::Kit::Signals::Signal
|
|
152
|
+
evt
|
|
153
|
+
when Sqreen::Kit::Signals::Trace
|
|
154
|
+
evt
|
|
150
155
|
else
|
|
151
156
|
raise NotImplementedError, "Unknown type of event in batch: #{evt}"
|
|
152
157
|
end
|
data/lib/sqreen/version.rb
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
require 'sqreen/weave/legacy'
|
|
7
7
|
require 'sqreen/weave/budget'
|
|
8
|
+
require 'sqreen/graft/hook'
|
|
8
9
|
require 'sqreen/graft/hook_point'
|
|
9
10
|
require 'sqreen/call_countable'
|
|
10
11
|
require 'sqreen/rules'
|
|
@@ -172,8 +173,8 @@ class Sqreen::Weave::Legacy::Instrumentation
|
|
|
172
173
|
request_timer.start
|
|
173
174
|
sqreen_timer = Sqreen::Graft::Timer.new("sqreen")
|
|
174
175
|
budget = Sqreen::Weave::Budget.current
|
|
175
|
-
request_budget_threshold = budget.threshold
|
|
176
|
-
request_budget_ratio = budget.ratio
|
|
176
|
+
request_budget_threshold = budget.threshold if budget
|
|
177
|
+
request_budget_ratio = budget.ratio if budget
|
|
177
178
|
request_budget_is_dynamic = !request_budget_ratio.nil?
|
|
178
179
|
request_budget = !request_budget_threshold.nil?
|
|
179
180
|
timed_level = (Sqreen.features['perf_level'] || 1).to_i
|
|
@@ -212,12 +213,16 @@ class Sqreen::Weave::Legacy::Instrumentation
|
|
|
212
213
|
if request[:timed_level] >= 1
|
|
213
214
|
request[:timed_callbacks].each do |timer|
|
|
214
215
|
duration = timer.duration
|
|
216
|
+
|
|
215
217
|
timer.tag =~ /weave,rule=(.*)$/ && rule = $1
|
|
216
|
-
|
|
217
|
-
timer.tag =~ /@after/ && whence = 'post'
|
|
218
|
-
timer.tag =~ /@raised/ && whence = 'failing'
|
|
218
|
+
next unless rule
|
|
219
219
|
|
|
220
|
-
|
|
220
|
+
whence = case timer.tag
|
|
221
|
+
when /@before/ then 'pre'
|
|
222
|
+
when /@after/ then 'post'
|
|
223
|
+
when /@raised/ then 'failing'
|
|
224
|
+
end
|
|
225
|
+
next unless whence
|
|
221
226
|
|
|
222
227
|
metric_name = "sq.#{rule}.#{whence}"
|
|
223
228
|
metrics_engine.update(metric_name, now, nil, duration * 1000)
|
|
@@ -270,12 +275,16 @@ class Sqreen::Weave::Legacy::Instrumentation
|
|
|
270
275
|
tallies = Hash.new(0.0)
|
|
271
276
|
request[:timed_callbacks].each do |timer|
|
|
272
277
|
duration = timer.duration
|
|
278
|
+
|
|
273
279
|
timer.tag =~ /weave,rule=(.*)$/ && rule = $1
|
|
274
|
-
|
|
275
|
-
timer.tag =~ /@after/ && whence = 'post'
|
|
276
|
-
timer.tag =~ /@raised/ && whence = 'failing'
|
|
280
|
+
next unless rule
|
|
277
281
|
|
|
278
|
-
|
|
282
|
+
whence = case timer.tag
|
|
283
|
+
when /@before/ then 'pre'
|
|
284
|
+
when /@after/ then 'post'
|
|
285
|
+
when /@raised/ then 'failing'
|
|
286
|
+
end
|
|
287
|
+
next unless whence
|
|
279
288
|
|
|
280
289
|
metric_name = "req.sq.#{rule}.#{whence}"
|
|
281
290
|
tallies[metric_name] += duration
|
|
@@ -364,15 +373,25 @@ class Sqreen::Weave::Legacy::Instrumentation
|
|
|
364
373
|
end
|
|
365
374
|
end
|
|
366
375
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
+
next if ret.nil? || !ret.is_a?(Hash)
|
|
377
|
+
|
|
378
|
+
throw_val =
|
|
379
|
+
case ret[:status]
|
|
380
|
+
when :skip, 'skip'
|
|
381
|
+
b.return(ret[:new_return_value]).break! if ret.key?(:new_return_value)
|
|
382
|
+
when :modify_args, 'modify_args'
|
|
383
|
+
b.args(ret[:args])
|
|
384
|
+
when :raise, 'raise'
|
|
385
|
+
if ret.key?(:exception)
|
|
386
|
+
b.raise(ret[:exception])
|
|
387
|
+
else
|
|
388
|
+
b.raise(Sqreen::AttackBlocked.new("Sqreen blocked a security threat (type: #{callback.rule_name}). No action is required."))
|
|
389
|
+
end
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
next unless throw_val
|
|
393
|
+
throw_val.break! if ret[:skip_rem_cbs]
|
|
394
|
+
throw(b, throw_val)
|
|
376
395
|
end
|
|
377
396
|
end
|
|
378
397
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sqreen
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.21.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sqreen
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-
|
|
11
|
+
date: 2020-09-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: sqreen-backport
|
|
@@ -30,14 +30,14 @@ dependencies:
|
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 0.2.
|
|
33
|
+
version: 0.2.2
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 0.2.
|
|
40
|
+
version: 0.2.2
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: sq_mini_racer
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -123,7 +123,55 @@ files:
|
|
|
123
123
|
- lib/sqreen/dependency/sentry.rb
|
|
124
124
|
- lib/sqreen/dependency/sinatra.rb
|
|
125
125
|
- lib/sqreen/deprecation.rb
|
|
126
|
-
- lib/sqreen/
|
|
126
|
+
- lib/sqreen/ecosystem.rb
|
|
127
|
+
- lib/sqreen/ecosystem/databases/database_connection_data.rb
|
|
128
|
+
- lib/sqreen/ecosystem/databases/mongo.rb
|
|
129
|
+
- lib/sqreen/ecosystem/databases/mysql.rb
|
|
130
|
+
- lib/sqreen/ecosystem/databases/postgres.rb
|
|
131
|
+
- lib/sqreen/ecosystem/databases/redis.rb
|
|
132
|
+
- lib/sqreen/ecosystem/dispatch_table.rb
|
|
133
|
+
- lib/sqreen/ecosystem/exception_reporting.rb
|
|
134
|
+
- lib/sqreen/ecosystem/http/net_http.rb
|
|
135
|
+
- lib/sqreen/ecosystem/http/rack_request.rb
|
|
136
|
+
- lib/sqreen/ecosystem/loggable.rb
|
|
137
|
+
- lib/sqreen/ecosystem/messaging/bunny.rb
|
|
138
|
+
- lib/sqreen/ecosystem/messaging/kafka.rb
|
|
139
|
+
- lib/sqreen/ecosystem/messaging/kinesis.rb
|
|
140
|
+
- lib/sqreen/ecosystem/messaging/sqs.rb
|
|
141
|
+
- lib/sqreen/ecosystem/module_api.rb
|
|
142
|
+
- lib/sqreen/ecosystem/module_api/event_listener.rb
|
|
143
|
+
- lib/sqreen/ecosystem/module_api/instrumentation.rb
|
|
144
|
+
- lib/sqreen/ecosystem/module_api/message_producer.rb
|
|
145
|
+
- lib/sqreen/ecosystem/module_api/signal_producer.rb
|
|
146
|
+
- lib/sqreen/ecosystem/module_api/tracing.rb
|
|
147
|
+
- lib/sqreen/ecosystem/module_api/tracing/client_data.rb
|
|
148
|
+
- lib/sqreen/ecosystem/module_api/tracing/consumer_data.rb
|
|
149
|
+
- lib/sqreen/ecosystem/module_api/tracing/messaging_data.rb
|
|
150
|
+
- lib/sqreen/ecosystem/module_api/tracing/producer_data.rb
|
|
151
|
+
- lib/sqreen/ecosystem/module_api/tracing/server_data.rb
|
|
152
|
+
- lib/sqreen/ecosystem/module_api/tracing_id_generation.rb
|
|
153
|
+
- lib/sqreen/ecosystem/module_api/transaction_storage.rb
|
|
154
|
+
- lib/sqreen/ecosystem/module_registry.rb
|
|
155
|
+
- lib/sqreen/ecosystem/tracing/modules/client.rb
|
|
156
|
+
- lib/sqreen/ecosystem/tracing/modules/consumer.rb
|
|
157
|
+
- lib/sqreen/ecosystem/tracing/modules/determine_ip.rb
|
|
158
|
+
- lib/sqreen/ecosystem/tracing/modules/producer.rb
|
|
159
|
+
- lib/sqreen/ecosystem/tracing/modules/server.rb
|
|
160
|
+
- lib/sqreen/ecosystem/tracing/sampler.rb
|
|
161
|
+
- lib/sqreen/ecosystem/tracing/sampling_configuration.rb
|
|
162
|
+
- lib/sqreen/ecosystem/tracing/signals/tracing_client.rb
|
|
163
|
+
- lib/sqreen/ecosystem/tracing/signals/tracing_consumer.rb
|
|
164
|
+
- lib/sqreen/ecosystem/tracing/signals/tracing_producer.rb
|
|
165
|
+
- lib/sqreen/ecosystem/tracing/signals/tracing_server.rb
|
|
166
|
+
- lib/sqreen/ecosystem/tracing_broker.rb
|
|
167
|
+
- lib/sqreen/ecosystem/tracing_id_setup.rb
|
|
168
|
+
- lib/sqreen/ecosystem/transaction_storage.rb
|
|
169
|
+
- lib/sqreen/ecosystem/util/call_writers_from_init.rb
|
|
170
|
+
- lib/sqreen/ecosystem_integration.rb
|
|
171
|
+
- lib/sqreen/ecosystem_integration/around_callbacks.rb
|
|
172
|
+
- lib/sqreen/ecosystem_integration/instrumentation_service.rb
|
|
173
|
+
- lib/sqreen/ecosystem_integration/request_lifecycle_tracking.rb
|
|
174
|
+
- lib/sqreen/ecosystem_integration/signal_consumption.rb
|
|
127
175
|
- lib/sqreen/endpoint_testing.rb
|
|
128
176
|
- lib/sqreen/error_handling_middleware.rb
|
|
129
177
|
- lib/sqreen/event.rb
|
|
@@ -279,9 +327,7 @@ metadata:
|
|
|
279
327
|
changelog_uri: https://docs.sqreen.com/ruby/release-notes/
|
|
280
328
|
source_code_uri: https://github.com/sqreen/ruby-agent
|
|
281
329
|
bug_tracker_uri: https://github.com/sqreen/ruby-agent/issues
|
|
282
|
-
post_install_message:
|
|
283
|
-
This is a Sqreen beta release and may not work in all situations.
|
|
284
|
-
Make sure to review CHANGELOG.md for important details.
|
|
330
|
+
post_install_message:
|
|
285
331
|
rdoc_options: []
|
|
286
332
|
require_paths:
|
|
287
333
|
- lib
|
|
@@ -292,11 +338,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
292
338
|
version: 1.9.3
|
|
293
339
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
294
340
|
requirements:
|
|
295
|
-
- - "
|
|
341
|
+
- - ">="
|
|
296
342
|
- !ruby/object:Gem::Version
|
|
297
|
-
version:
|
|
343
|
+
version: '0'
|
|
298
344
|
requirements: []
|
|
299
|
-
rubygems_version: 3.1.
|
|
345
|
+
rubygems_version: 3.1.4
|
|
300
346
|
signing_key:
|
|
301
347
|
specification_version: 4
|
|
302
348
|
summary: Sqreen Ruby agent
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
4
|
-
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
5
|
-
|
|
6
|
-
module Sqreen
|
|
7
|
-
class EncodingSanitizer
|
|
8
|
-
def self.sanitize(obj)
|
|
9
|
-
case obj
|
|
10
|
-
when String
|
|
11
|
-
sanitize_string(obj)
|
|
12
|
-
when Array
|
|
13
|
-
obj.map { |e| sanitize(e) }
|
|
14
|
-
when Hash
|
|
15
|
-
obj.each_with_object({}) { |(k, v), h| h[k] = sanitize(v) }
|
|
16
|
-
else
|
|
17
|
-
obj
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def self.sanitize_string(s)
|
|
22
|
-
return s if s.encoding.name == 'UTF-8' && s.valid_encoding?
|
|
23
|
-
|
|
24
|
-
s.encode('UTF-16', :invalid => :replace, :undef => :replace).encode('UTF-8')
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|