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")