lib/sqreen/runner.rb in sqreen-1.20.4-java vs lib/sqreen/runner.rb in sqreen-1.21.0.beta1
- old
+ new
@@ -12,10 +12,11 @@
require 'sqreen/log'
require 'sqreen/agent_message'
require 'sqreen/rules'
require 'sqreen/session'
+require 'sqreen/version'
require 'sqreen/remote_command'
require 'sqreen/capped_queue'
require 'sqreen/metrics_store'
require 'sqreen/deliveries/simple'
require 'sqreen/deliveries/batch'
@@ -24,10 +25,11 @@
require 'sqreen/performance_notifications/binned_metrics'
require 'sqreen/legacy/instrumentation'
require 'sqreen/call_countable'
require 'sqreen/weave/legacy/instrumentation'
require 'sqreen/kit/configuration'
+require 'sqreen/ecosystem_integration'
module Sqreen
@features = {}
@queue = nil
@@ -50,14 +52,10 @@
def queue
@queue ||= CappedQueue.new(MAX_QUEUE_LENGTH)
end
- def update_queue(queue)
- @queue = queue
- end
-
def observations_queue
@observations_queue ||= CappedQueue.new(MAX_OBS_QUEUE_LENGTH)
end
attr_accessor :instrumentation_ready
@@ -102,12 +100,12 @@
attr_accessor :next_metrics
# we may want to do that in a thread in order to prevent delaying app
# startup
# set_at_exit do not place a global at_exit (used for testing)
+ # @param [Sqreen::Frameworks::GenericFramework] framework
def initialize(configuration, framework, set_at_exit = true, session_class = Sqreen::Session)
- Sqreen.update_queue(CappedQueue.new(MAX_QUEUE_LENGTH))
@logged_out_tried = false
@configuration = configuration
@framework = framework
@heartbeat_delay = HEARTBEAT_MAX_DELAY
@last_heartbeat_request = Time.now
@@ -130,10 +128,11 @@
Sqreen::Kit::Configuration.logger = Sqreen.log
Sqreen::Kit::Configuration.ingestion_url = chosen_endpoints.ingestion.url
Sqreen::Kit::Configuration.certificate_store = chosen_endpoints.ingestion.ca_store
Sqreen::Kit::Configuration.proxy_url = @proxy_url
+ Sqreen::Kit::Configuration.default_source = "sqreen:agent:ruby:#{Sqreen::VERSION}"
register_exit_cb if set_at_exit
self.metrics_engine = MetricsStore.new
@@ -166,10 +165,14 @@
end
end
end
self.features = wanted_features
+ @ecosystem_integration = EcosystemIntegration.new(framework, Sqreen.queue)
+ framework.req_start_cb = @ecosystem_integration.method(:request_start)
+ framework.req_end_cb = @ecosystem_integration.method(:request_end)
+
# Ensure a deliverer is there unless features have set it first
self.deliverer ||= Deliveries::Simple.new(session)
context_infos = {}
%w[rules pack_id].each do |p|
context_infos[p] = response[p] unless response[p].nil?
@@ -266,10 +269,14 @@
def setup_instrumentation(context_infos = {})
Sqreen.log.info 'Setting up instrumentation'
rulespack_id, rules = load_rules(context_infos)
@framework.instrument_when_ready!(instrumenter, rules)
Sqreen.log.info 'Instrumentation set up'
+
+ # XXX: ecosystem instrumentation should likely be deferred
+ # the same way the rest might be
+ @ecosystem_integration.init
rulespack_id.to_s
end
def remove_instrumentation(_context_infos = {})
Sqreen.log.debug 'Removing instrumentation'
@@ -385,32 +392,22 @@
true
end
def change_performance_budget(budget, _context_infos = {})
return false unless budget.nil? || budget.to_f > 0
-
- if @configuration.get(:weave)
- prev = Sqreen::Weave::Budget.current
- prev = prev.to_h if prev
-
- budget_s = budget.to_f / 1000 if budget
-
- feature = features['performance_budget']
- if feature
- budget_s = feature['threshold'] if feature.key?('threshold')
- ratio = feature['ratio'] if feature.key?('ratio')
- end
-
- Sqreen::Weave::Budget.update(threshold: budget_s, ratio: ratio)
- else
- prev = Sqreen.performance_budget
- Sqreen.update_performance_budget(budget)
- end
-
+ prev = Sqreen.performance_budget
+ Sqreen.update_performance_budget(budget)
{ :was => prev }
end
+ # @param [String] tracing_id_prefix
+ # @param [Array<Hash{String=>Object}>] sampling_config
+ def tracing_enable(tracing_id_prefix, sampling_config, _context_infos = {})
+ @ecosystem_integration.handle_tracing_command(tracing_id_prefix, sampling_config)
+ { status: true }
+ end
+
def upload_bundle(_context_infos = {})
t = Time.now
session.post_bundle(RuntimeInfos.dependencies_signature, RuntimeInfos.dependencies)
Time.now - t
end
@@ -491,18 +488,9 @@
end
def shutdown(_context_infos = {})
remove_instrumentation
logout
- end
-
- def restart(_context_infos = {})
- shutdown
- heartbeat_delay = @heartbeat_delay
- Thread.new do
- sleep(2 * heartbeat_delay)
- Sqreen::Worker.start(Sqreen.framework)
- end
end
def logout(retrying = true)
return unless session
Sqreen.log.debug("Logging out")