Module: TCellAgent

Defined in:
lib/tcell_agent/version.rb,
lib/tcell_agent/agent.rb,
lib/tcell_agent/logger.rb,
lib/tcell_agent/patches.rb,
lib/tcell_agent/sinatra.rb,
lib/tcell_agent/rails/dlp.rb,
lib/tcell_agent/rails/dlp.rb,
lib/tcell_agent/rust/models.rb,
lib/tcell_agent/rails/routes.rb,
lib/tcell_agent/routes/table.rb,
lib/tcell_agent/utils/params.rb,
lib/tcell_agent/configuration.rb,
lib/tcell_agent/tcell_context.rb,
lib/tcell_agent/utils/headers.rb,
lib/tcell_agent/utils/strings.rb,
lib/tcell_agent/instrumentation.rb,
lib/tcell_agent/policies/policy.rb,
lib/tcell_agent/rails/better_ip.rb,
lib/tcell_agent/rails/responses.rb,
lib/tcell_agent/hooks/login_fraud.rb,
lib/tcell_agent/rails/auth/devise.rb,
lib/tcell_agent/rails/dlp_handler.rb,
lib/tcell_agent/rust/agent_config.rb,
lib/tcell_agent/rust/native_agent.rb,
lib/tcell_agent/sensor_events/dlp.rb,
lib/tcell_agent/settings_reporter.rb,
lib/tcell_agent/agent/static_agent.rb,
lib/tcell_agent/config_initializer.rb,
lib/tcell_agent/rails/routes/grape.rb,
lib/tcell_agent/agent/route_manager.rb,
lib/tcell_agent/instrumentation/lfi.rb,
lib/tcell_agent/rails/auth/userinfo.rb,
lib/tcell_agent/rust/native_library.rb,
lib/tcell_agent/instrumentation/cmdi.rb,
lib/tcell_agent/rails/auth/authlogic.rb,
lib/tcell_agent/rails/csrf_exception.rb,
lib/tcell_agent/sensor_events/sensor.rb,
lib/tcell_agent/policies/login_policy.rb,
lib/tcell_agent/policies/policy_types.rb,
lib/tcell_agent/rails/auth/doorkeeper.rb,
lib/tcell_agent/rails/js_agent_insert.rb,
lib/tcell_agent/rails/routes/route_id.rb,
lib/tcell_agent/rails/tcell_body_proxy.rb,
lib/tcell_agent/policies/headers_policy.rb,
lib/tcell_agent/policies/patches_policy.rb,
lib/tcell_agent/policies/policy_polling.rb,
lib/tcell_agent/rails/settings_reporter.rb,
lib/tcell_agent/sensor_events/discovery.rb,
lib/tcell_agent/policies/dataloss_policy.rb,
lib/tcell_agent/policies/js_agent_policy.rb,
lib/tcell_agent/rails/auth/devise_helper.rb,
lib/tcell_agent/sensor_events/util/utils.rb,
lib/tcell_agent/policies/policies_manager.rb,
lib/tcell_agent/rails/dlp/process_request.rb,
lib/tcell_agent/policies/local_file_access.rb,
lib/tcell_agent/rust/native_agent_response.rb,
lib/tcell_agent/sensor_events/server_agent.rb,
lib/tcell_agent/policies/appfirewall_policy.rb,
lib/tcell_agent/policies/system_enablements.rb,
lib/tcell_agent/rails/auth/authlogic_helper.rb,
lib/tcell_agent/policies/http_redirect_policy.rb,
lib/tcell_agent/policies/command_injection_policy.rb,
lib/tcell_agent/sensor_events/agent_setting_event.rb,
lib/tcell_agent/rails/middleware/global_middleware.rb,
lib/tcell_agent/rails/middleware/context_middleware.rb,
lib/tcell_agent/rails/middleware/headers_middleware.rb,
lib/tcell_agent/rails/railties/tcell_agent_railties.rb,
lib/tcell_agent/sensor_events/app_config_setting_event.rb,
lib/tcell_agent/sensor_events/util/sanitizer_utilities.rb,
lib/tcell_agent/rails/middleware/body_filter_middleware.rb,
lib/tcell_agent/rails/railties/tcell_agent_unicorn_railties.rb

Overview

TODO(ralba): move TCellData from instrumentation.rb here and merge both models into one and drop usage of MetaData. TCellData needs to be serializable in order to do that

Defined Under Namespace

Modules: Cmdi, CsrfExceptionReporter, DLP, DeviseInstrumentation, DoorkeeperInstrumentation, Hooks, Instrumentation, ModuleLoggerAccess, Policies, Routes, Rust, SensorEvents, Utils Classes: Agent, ConfigInitializer, Configuration, ConfigurationException, MetaData, ModuleLogger, MyRailtie, NativeLogger, NullLoger, PoliciesManager, PolicyPolling, PolicyTypes, RubyLogger, TCellAgentCSRFRailtie, TCellAgentStartupRailtie, UserInformation

Constant Summary collapse

VERSION =
'2.2.0'.freeze
@@ruby_logger =
RubyLogger.new
@@instance_lock =
Mutex.new
@@my_thread_agent =
nil

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configurationObject

Returns the value of attribute configuration.



16
17
18
# File 'lib/tcell_agent/configuration.rb', line 16

def configuration
  @configuration
end

.initializer_configurationObject

Returns the value of attribute initializer_configuration.



17
18
19
# File 'lib/tcell_agent/configuration.rb', line 17

def initializer_configuration
  @initializer_configuration
end

Class Method Details

.configureObject



20
21
22
23
24
25
26
27
28
# File 'lib/tcell_agent/configuration.rb', line 20

def self.configure
  require 'tcell_agent/config_initializer'
  self.initializer_configuration ||= ConfigInitializer.new

  yield(initializer_configuration)
rescue NoMethodError => e
  logger = TCellAgent::ModuleLogger.new(TCellAgent::RubyLogger.new, name)
  logger.error("Error configuring tcell_agent with initializers: #{e}")
end

.discover_database_fields(route_id, database, schema, table, fields) ⇒ Object



33
34
35
# File 'lib/tcell_agent/agent/static_agent.rb', line 33

def self.discover_database_fields(route_id, database, schema, table, fields)
  thread_agent.discover_database_fields(route_id, database, schema, table, fields)
end

.loggerObject



76
77
78
79
80
# File 'lib/tcell_agent/logger.rb', line 76

def self.logger
  return @@ruby_logger unless defined?(@native_logger)

  @native_logger
end

.native_logger=(native_agent) ⇒ Object



82
83
84
# File 'lib/tcell_agent/logger.rb', line 82

def self.native_logger=(native_agent)
  @native_logger = NativeLogger.new(native_agent)
end

.policy(policy_type) ⇒ Object



29
30
31
# File 'lib/tcell_agent/agent/static_agent.rb', line 29

def self.policy(policy_type)
  thread_agent.policies.fetch(policy_type, nil)
end

.report_metrics(response_time, tcell_context) ⇒ Object



25
26
27
# File 'lib/tcell_agent/agent/static_agent.rb', line 25

def self.report_metrics(response_time, tcell_context)
  thread_agent.report_metrics(response_time, tcell_context)
end

.report_settingsObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/tcell_agent/settings_reporter.rb', line 8

def self.report_settings
  Thread.new do
    TCellAgent::Instrumentation.safe_block('Instrumenting Agent Details') do
      event = TCellAgent::SensorEvents::ServerAgentDetailsSensorEvent.new
      TCellAgent.send_event(event)
    end

    TCellAgent::Instrumentation.safe_block('Instrumenting Server Packages') do
      event = TCellAgent::SensorEvents::ServerAgentPackagesSensorEvent.new
      TCellAgent.send_event(event)
    end

    TCellAgent::Instrumentation.safe_block('Instrumenting Language Info') do
      TCellAgent.send_event(
        TCellAgent::SensorEvents::ServerAgentDetailsLanguageEvent.new(
          'Ruby',
          RUBY_VERSION
        )
      )
    end

    TCellAgent::Instrumentation.safe_block('Instrumenting Native Lib Status') do
      require 'tcell_agent/rust/native_agent'

      TCellAgent.send_event(
        TCellAgent::SensorEvents::AgentSettingEvent.new(
          'native_lib_loaded',
          TCellAgent::Rust::NativeLibrary.common_lib_available?.to_s
        )
      )
    end

    if defined?(::Rails)
      TCellAgent::Instrumentation.safe_block('Instrumenting routes') do
        TCellAgent::Instrumentation::Rails.instrument_routes
      end
    end
  end
end

.safe_to_check_cmdi?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/tcell_agent/agent/static_agent.rb', line 37

def self.safe_to_check_cmdi?
  thread_agent && thread_agent.safe_to_check_cmdi
end

.send_event(event) ⇒ Object



21
22
23
# File 'lib/tcell_agent/agent/static_agent.rb', line 21

def self.send_event(event)
  thread_agent.queue_sensor_event(event)
end

.stop_agentObject



41
42
43
# File 'lib/tcell_agent/agent/static_agent.rb', line 41

def self.stop_agent
  thread_agent.stop_agent = true
end

.thread_agentObject



5
6
7
8
9
10
11
12
13
# File 'lib/tcell_agent/agent/static_agent.rb', line 5

def self.thread_agent
  unless @@my_thread_agent
    @@instance_lock.synchronize do
      @@my_thread_agent ||= TCellAgent::Agent.new
    end
  end

  @@my_thread_agent
end

.thread_agent=(some_agent) ⇒ Object



15
16
17
18
19
# File 'lib/tcell_agent/agent/static_agent.rb', line 15

def self.thread_agent=(some_agent)
  @@instance_lock.synchronize do
    @@my_thread_agent = some_agent
  end
end