tcell_agent 1.1.3 → 1.1.4

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.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/bin/tcell_agent +10 -2
  3. data/lib/tcell_agent.rb +3 -3
  4. data/lib/tcell_agent/agent.rb +42 -52
  5. data/lib/tcell_agent/agent/event_processor.rb +129 -162
  6. data/lib/tcell_agent/agent/fork_pipe_manager.rb +57 -62
  7. data/lib/tcell_agent/agent/policy_manager.rb +83 -104
  8. data/lib/tcell_agent/agent/policy_types.rb +24 -29
  9. data/lib/tcell_agent/agent/route_manager.rb +36 -46
  10. data/lib/tcell_agent/agent/static_agent.rb +19 -21
  11. data/lib/tcell_agent/api.rb +23 -28
  12. data/lib/tcell_agent/appsensor/injections_reporter.rb +7 -11
  13. data/lib/tcell_agent/authlogic.rb +7 -7
  14. data/lib/tcell_agent/cmdi.rb +22 -23
  15. data/lib/tcell_agent/config/unknown_options.rb +71 -69
  16. data/lib/tcell_agent/configuration.rb +187 -191
  17. data/lib/tcell_agent/devise.rb +13 -15
  18. data/lib/tcell_agent/hooks/login_fraud.rb +1 -1
  19. data/lib/tcell_agent/instrumentation.rb +120 -124
  20. data/lib/tcell_agent/logger.rb +29 -45
  21. data/lib/tcell_agent/patches.rb +5 -5
  22. data/lib/tcell_agent/policies/dataloss_policy.rb +263 -288
  23. data/lib/tcell_agent/policies/http_redirect_policy.rb +25 -37
  24. data/lib/tcell_agent/policies/http_tx_policy.rb +48 -52
  25. data/lib/tcell_agent/policies/login_fraud_policy.rb +15 -20
  26. data/lib/tcell_agent/policies/policy.rb +0 -2
  27. data/lib/tcell_agent/policies/rust_policies.rb +24 -29
  28. data/lib/tcell_agent/rails.rb +2 -3
  29. data/lib/tcell_agent/rails/auth/authlogic.rb +2 -2
  30. data/lib/tcell_agent/rails/auth/devise.rb +2 -2
  31. data/lib/tcell_agent/rails/auth/doorkeeper.rb +2 -2
  32. data/lib/tcell_agent/rails/better_ip.rb +12 -16
  33. data/lib/tcell_agent/rails/csrf_exception.rb +4 -7
  34. data/lib/tcell_agent/rails/dlp.rb +208 -107
  35. data/lib/tcell_agent/rails/dlp/process_request.rb +37 -47
  36. data/lib/tcell_agent/rails/dlp_handler.rb +9 -11
  37. data/lib/tcell_agent/rails/js_agent_insert.rb +11 -14
  38. data/lib/tcell_agent/rails/middleware/body_filter_middleware.rb +8 -7
  39. data/lib/tcell_agent/rails/middleware/context_middleware.rb +4 -5
  40. data/lib/tcell_agent/rails/middleware/global_middleware.rb +5 -8
  41. data/lib/tcell_agent/rails/middleware/headers_middleware.rb +24 -27
  42. data/lib/tcell_agent/rails/on_start.rb +5 -5
  43. data/lib/tcell_agent/rails/responses.rb +7 -9
  44. data/lib/tcell_agent/rails/routes.rb +62 -81
  45. data/lib/tcell_agent/rails/routes/grape.rb +25 -30
  46. data/lib/tcell_agent/rails/routes/route_id.rb +9 -14
  47. data/lib/tcell_agent/rails/settings_reporter.rb +44 -33
  48. data/lib/tcell_agent/rails/tcell_body_proxy.rb +15 -18
  49. data/lib/tcell_agent/routes/table.rb +31 -33
  50. data/lib/tcell_agent/rust/{libtcellagent-1.3.0.dylib → libtcellagent-1.3.1.dylib} +0 -0
  51. data/lib/tcell_agent/rust/{libtcellagent-1.3.0.so → libtcellagent-1.3.1.so} +0 -0
  52. data/lib/tcell_agent/rust/{libtcellagent-alpine-1.3.0.so → libtcellagent-alpine-1.3.1.so} +0 -0
  53. data/lib/tcell_agent/rust/models.rb +32 -37
  54. data/lib/tcell_agent/rust/tcellagent-1.3.1.dll +0 -0
  55. data/lib/tcell_agent/rust/whisperer.rb +101 -104
  56. data/lib/tcell_agent/sensor_events/app_config.rb +7 -7
  57. data/lib/tcell_agent/sensor_events/appsensor_event.rb +26 -27
  58. data/lib/tcell_agent/sensor_events/appsensor_meta_event.rb +20 -88
  59. data/lib/tcell_agent/sensor_events/command_injection.rb +52 -80
  60. data/lib/tcell_agent/sensor_events/discovery.rb +27 -27
  61. data/lib/tcell_agent/sensor_events/dlp.rb +50 -56
  62. data/lib/tcell_agent/sensor_events/honeytokens.rb +9 -9
  63. data/lib/tcell_agent/sensor_events/metrics.rb +20 -21
  64. data/lib/tcell_agent/sensor_events/patches.rb +10 -12
  65. data/lib/tcell_agent/sensor_events/sensor.rb +32 -36
  66. data/lib/tcell_agent/sensor_events/server_agent.rb +130 -127
  67. data/lib/tcell_agent/sensor_events/util/sanitizer_utilities.rb +60 -80
  68. data/lib/tcell_agent/sensor_events/util/utils.rb +3 -5
  69. data/lib/tcell_agent/servers/passenger.rb +5 -9
  70. data/lib/tcell_agent/servers/puma.rb +18 -27
  71. data/lib/tcell_agent/servers/rails_server.rb +5 -9
  72. data/lib/tcell_agent/servers/thin.rb +2 -4
  73. data/lib/tcell_agent/servers/unicorn.rb +18 -27
  74. data/lib/tcell_agent/servers/webrick.rb +2 -4
  75. data/lib/tcell_agent/settings_reporter.rb +126 -0
  76. data/lib/tcell_agent/sinatra.rb +24 -26
  77. data/lib/tcell_agent/start_background_thread.rb +21 -142
  78. data/lib/tcell_agent/system_info.rb +4 -3
  79. data/lib/tcell_agent/tcell_context.rb +150 -0
  80. data/lib/tcell_agent/userinfo.rb +3 -3
  81. data/lib/tcell_agent/utils/io.rb +19 -24
  82. data/lib/tcell_agent/utils/params.rb +9 -15
  83. data/lib/tcell_agent/utils/queue_with_timeout.rb +26 -32
  84. data/lib/tcell_agent/utils/strings.rb +4 -6
  85. data/lib/tcell_agent/version.rb +1 -1
  86. data/spec/lib/tcell_agent/agent/policy_manager_spec.rb +5 -5
  87. data/spec/lib/tcell_agent/agent/static_agent_spec.rb +7 -7
  88. data/spec/lib/tcell_agent/cmdi_spec.rb +21 -21
  89. data/spec/lib/tcell_agent/hooks/login_fraud_spec.rb +29 -24
  90. data/spec/lib/tcell_agent/instrumentation_spec.rb +4 -4
  91. data/spec/lib/tcell_agent/patches_spec.rb +8 -8
  92. data/spec/lib/tcell_agent/policies/appsensor_policy_spec.rb +23 -23
  93. data/spec/lib/tcell_agent/policies/patches_policy_spec.rb +2 -2
  94. data/spec/lib/tcell_agent/rails/csrf_exception_spec.rb +69 -0
  95. data/spec/lib/tcell_agent/rails/dlp_spec.rb +1039 -0
  96. data/spec/lib/tcell_agent/rails/js_agent_insert_spec.rb +271 -0
  97. data/spec/lib/tcell_agent/rails/logger_spec.rb +5 -5
  98. data/spec/lib/tcell_agent/rails/middleware/appsensor_middleware_spec.rb +3 -3
  99. data/spec/lib/tcell_agent/rails/middleware/dlp_middleware_spec.rb +4 -4
  100. data/spec/lib/tcell_agent/rails/middleware/global_middleware_spec.rb +5 -5
  101. data/spec/lib/tcell_agent/rails/middleware/redirect_middleware_spec.rb +1 -1
  102. data/spec/lib/tcell_agent/rails/middleware/tcell_body_proxy_spec.rb +11 -8
  103. data/spec/lib/tcell_agent/rails/responses_spec.rb +2 -2
  104. data/spec/lib/tcell_agent/rails/routes/grape_spec.rb +2 -2
  105. data/spec/lib/tcell_agent/rails/routes/route_id_spec.rb +1 -1
  106. data/spec/lib/tcell_agent/rails/routes/routes_spec.rb +4 -4
  107. data/spec/lib/tcell_agent/rust/models_spec.rb +83 -75
  108. data/spec/lib/tcell_agent/rust/whisperer_spec.rb +14 -14
  109. data/spec/lib/tcell_agent/sensor_events/appsensor_meta_event_spec.rb +19 -70
  110. data/spec/lib/tcell_agent/sensor_events/sessions_metric_spec.rb +1 -1
  111. data/spec/lib/tcell_agent/settings_reporter_spec.rb +162 -0
  112. data/spec/lib/tcell_agent/tcell_context_spec.rb +154 -0
  113. data/spec/spec_helper.rb +5 -0
  114. metadata +18 -10
  115. data/lib/tcell_agent/appsensor/meta_data.rb +0 -132
  116. data/lib/tcell_agent/patches/meta_data.rb +0 -59
  117. data/lib/tcell_agent/rust/tcellagent-1.3.0.dll +0 -0
  118. data/spec/lib/tcell_agent/appsensor/meta_data_spec.rb +0 -71
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9d0b4e34b740cbb9f4e3a004dc99b77a01b09a53
4
- data.tar.gz: d3522bcd25ca86a2d3cd65e238b580d4a253f6e5
3
+ metadata.gz: 1fee1b53b8297dddbb44b9f4ae21b6371f61b138
4
+ data.tar.gz: a78a2255a86ff92852a058b58699acd5537c13e1
5
5
  SHA512:
6
- metadata.gz: 8c539fcef0eb17c3cbf0f39ae61f54e01843ed197dfc1b65fb813d78387cae444a7c285d2b77cab639a4c845b19798419acd7463e662529fd912282abc29638c
7
- data.tar.gz: 33c45e6e14e5cda851e4b3853ab5091322b7aa86be6fe4ba5f552701d4bd8d1289ba26cb4903fb871c8f1b0fcdb2bee887f720e67248a17bdae536b3dc916df7
6
+ metadata.gz: 23478b101ec414872fb96958c4de2208ad099d898513636e50c5ff22b18ff660b4d73068e0ebfc405a9512c56426ef4d189753f03280c6e1d80d541ff0fd1476
7
+ data.tar.gz: ea0ce97ae0cbf568cace44c6cfed0a39de4954bec81d0e5e2f012c0a7f710de4ddf19226024d36bac23c00bffdba93b9a64a2d54a69ec62355c5c8a8be37b903
@@ -227,9 +227,17 @@ elsif command == 'test'
227
227
  end
228
228
  puts 'passed'
229
229
 
230
- printf '%-50s', 'Application has api_key and app_id... '
230
+ printf '%-50s', 'Application has app_id... '
231
231
  tcell_application = config_hash.fetch('applications')[0]
232
- if !tcell_application.key?('app_id') || !tcell_application.key?('api_key')
232
+ if !tcell_application.key?('app_id') && !ENV['TCELL_AGENT_APP_ID']
233
+ puts 'failed'
234
+ Kernel.exit(1)
235
+ end
236
+ puts 'passed'
237
+
238
+ printf '%-50s', 'Application has api_key... '
239
+ tcell_application = config_hash.fetch('applications')[0]
240
+ if !tcell_application.key?('api_key') && !ENV['TCELL_AGENT_API_KEY']
233
241
  puts 'failed'
234
242
  Kernel.exit(1)
235
243
  end
@@ -1,8 +1,8 @@
1
1
  # See the file "LICENSE" for the full license governing this code.
2
2
 
3
- require "tcell_agent/utils/passwords"
4
- require "tcell_agent/utils/strings"
5
- require "tcell_agent/utils/io"
3
+ require 'tcell_agent/utils/passwords'
4
+ require 'tcell_agent/utils/strings'
5
+ require 'tcell_agent/utils/io'
6
6
  require 'tcell_agent/logger'
7
7
  require 'tcell_agent/configuration'
8
8
 
@@ -1,21 +1,21 @@
1
1
  # See the file "LICENSE" for the full license governing this code.
2
2
 
3
- require "tcell_agent/logger"
4
- require "tcell_agent/version"
5
- require "tcell_agent/api"
6
- require "tcell_agent/configuration"
3
+ require 'tcell_agent/logger'
4
+ require 'tcell_agent/version'
5
+ require 'tcell_agent/api'
6
+ require 'tcell_agent/configuration'
7
7
 
8
- require "tcell_agent/sensor_events/server_agent"
9
- require "tcell_agent/utils/queue_with_timeout"
8
+ require 'tcell_agent/sensor_events/server_agent'
9
+ require 'tcell_agent/utils/queue_with_timeout'
10
10
 
11
- require "tcell_agent/agent/event_processor"
12
- require "tcell_agent/agent/policy_manager"
13
- require "tcell_agent/agent/static_agent"
14
- require "tcell_agent/agent/policy_types"
15
- require "tcell_agent/agent/route_manager"
16
- require "tcell_agent/agent/fork_pipe_manager"
11
+ require 'tcell_agent/agent/event_processor'
12
+ require 'tcell_agent/agent/policy_manager'
13
+ require 'tcell_agent/agent/static_agent'
14
+ require 'tcell_agent/agent/policy_types'
15
+ require 'tcell_agent/agent/route_manager'
16
+ require 'tcell_agent/agent/fork_pipe_manager'
17
17
 
18
- require "tcell_agent/routes/table"
18
+ require 'tcell_agent/routes/table'
19
19
 
20
20
  require 'net/http'
21
21
  require 'thread'
@@ -25,9 +25,8 @@ require 'monitor'
25
25
 
26
26
  module TCellAgent
27
27
  class Agent
28
-
29
28
  attr_accessor :start_pid
30
- attr_accessor :eventQueue
29
+ attr_accessor :event_queue
31
30
 
32
31
  attr_accessor :fork_event_queue
33
32
  attr_accessor :fork_event_thread
@@ -49,53 +48,46 @@ module TCellAgent
49
48
  attr_accessor :policy_polling_thread
50
49
  attr_accessor :policy_polling_worker_mutex
51
50
 
52
-
53
51
  attr_accessor :event_queue_monitor
54
52
  attr_accessor :event_dispatch_monitor
55
53
 
56
54
  attr_accessor :stop_agent
57
55
  attr_accessor :complete_policy_cache
58
56
 
59
-
60
- def initialize(start_pid=Process.pid)
57
+ def initialize(start_pid = Process.pid)
61
58
  @start_pid = start_pid
62
- @dispatchEventsTimeout = TCellAgent.configuration.event_time_limit_seconds || 55
63
- @dispatchEventsLimit = TCellAgent.configuration.event_batch_size_limit || 20
59
+ @dispatch_events_timeout = TCellAgent.configuration.event_time_limit_seconds || 55
60
+ @dispatch_events_limit = TCellAgent.configuration.event_batch_size_limit || 20
64
61
  @worker_mutex = Mutex.new
65
62
  @policy_polling_worker_mutex = Mutex.new
66
63
  @@policy_tapi = TCellApi.new
67
64
 
68
65
  # Agent request thread
69
66
  @policies = {
70
- TCellAgent::PolicyTypes::Rust => TCellAgent::Policies::RustPolicies.new
67
+ TCellAgent::PolicyTypes::RUST => TCellAgent::Policies::RustPolicies.new
71
68
  }
72
69
  @lock = Monitor.new
73
70
 
74
- self.initialize_processor_variables
71
+ initialize_processor_variables
75
72
 
76
- if TCellAgent.configuration.preload_policy_filename != nil
77
- TCellAgent.logger.info("Preloading a policy file")
73
+ if TCellAgent.configuration.preload_policy_filename
74
+ TCellAgent.logger.info('Preloading a policy file')
78
75
  begin
79
76
  policy_file = File.open(TCellAgent.configuration.preload_policy_filename).read
80
77
  policy_jsons = JSON.parse(policy_file)
81
- if policy_jsons.key?("result")
82
- policy_jsons = policy_jsons["result"]
83
- end
84
- processPolicyJson(policy_jsons, false)
78
+ policy_jsons = policy_jsons['result'] if policy_jsons.key?('result')
79
+ process_policy_json(policy_jsons, false)
85
80
  rescue StandardError => e
86
81
  TCellAgent.logger.error(e.message)
87
82
  end
88
83
  end
89
84
  cached_policies = policies_from_cachefile
90
- if (cached_policies)
91
- processPolicyJson(cached_policies, false)
92
- end
85
+ process_policy_json(cached_policies, false) if cached_policies
93
86
  end
94
87
 
95
88
  def initialize_processor_variables
96
89
  @complete_policy_cache = {}
97
90
 
98
- @metricsLock = Monitor.new
99
91
  @stop_agent = false
100
92
  @route_table = TCellAgent::Routes::RouteTable.new
101
93
 
@@ -103,43 +95,41 @@ module TCellAgent
103
95
  @event_dispatch_monitor = Monitor.new
104
96
  @mutex = Monitor.new
105
97
 
106
-
107
98
  @response_time_table = {}
108
99
  @sessions_metrics = TCellAgent::SensorEvents::SessionsMetric.new
109
100
  @sessions_metrics_mutex = Monitor.new
110
101
 
111
- @dispatchEvents = []
112
- @eventQueue = BoundedQueue.new(200)
102
+ @dispatch_events = []
103
+ @event_queue = BoundedQueue.new(200)
113
104
 
114
- @fork_event_queue=Queue.new
115
- @fork_event_thread_mutex=Monitor.new
105
+ @fork_event_queue = Queue.new
106
+ @fork_event_thread_mutex = Monitor.new
116
107
 
117
- @metrics_event_queue=Queue.new
118
- @metrics_event_thread_mutex=Monitor.new
108
+ @metrics_event_queue = Queue.new
109
+ @metrics_event_thread_mutex = Monitor.new
119
110
  end
120
111
 
121
- def is_parent_process?
112
+ def parent_process?
122
113
  @start_pid == Process.pid
123
114
  end
124
115
 
125
116
  def start
126
- if (TCellAgent::Utils::Strings.blank?(TCellAgent.configuration.api_key) ||
127
- TCellAgent::Utils::Strings.blank?(TCellAgent.configuration.app_id))
128
- puts " ********* ********* ********* *********"
129
- puts "* tCell.io *"
130
- puts "* Configuration info is missing, you may *"
131
- puts "* need to download config file and place *"
132
- puts "* it in the config/ directory *"
133
- puts " ********* ********* ********* *********"
117
+ if TCellAgent::Utils::Strings.blank?(TCellAgent.configuration.api_key) ||
118
+ TCellAgent::Utils::Strings.blank?(TCellAgent.configuration.app_id)
119
+ puts ' ********* ********* ********* *********'
120
+ puts '* tCell.io *'
121
+ puts '* Configuration info is missing, you may *'
122
+ puts '* need to download config file and place *'
123
+ puts '* it in the config/ directory *'
124
+ puts ' ********* ********* ********* *********'
134
125
  TCellAgent.configuration.enabled = false
135
126
  return
136
127
  end
137
128
 
138
- TCellAgent.logger.debug("Starting thread agent")
129
+ TCellAgent.logger.debug('Starting thread agent')
139
130
 
140
- self.ensure_policy_polling_running
141
- self.ensure_event_processor_running
131
+ ensure_policy_polling_running
132
+ ensure_event_processor_running
142
133
  end
143
-
144
134
  end
145
135
  end
@@ -1,37 +1,33 @@
1
- # encoding: utf-8
2
-
3
1
  # See the file "LICENSE" for the full license governing this code.
4
2
 
5
- require "tcell_agent/logger"
6
- require "tcell_agent/version"
7
- require "tcell_agent/api"
8
- require "tcell_agent/configuration"
3
+ require 'tcell_agent/logger'
4
+ require 'tcell_agent/version'
5
+ require 'tcell_agent/api'
6
+ require 'tcell_agent/configuration'
9
7
 
10
- require "tcell_agent/policies/http_tx_policy"
11
- require "tcell_agent/policies/http_redirect_policy"
8
+ require 'tcell_agent/policies/http_tx_policy'
9
+ require 'tcell_agent/policies/http_redirect_policy'
12
10
 
13
- require "tcell_agent/sensor_events/server_agent"
14
- require "tcell_agent/sensor_events/metrics"
11
+ require 'tcell_agent/sensor_events/server_agent'
12
+ require 'tcell_agent/sensor_events/metrics'
15
13
 
16
- require "tcell_agent/utils/queue_with_timeout"
14
+ require 'tcell_agent/utils/queue_with_timeout'
17
15
 
18
- require "tcell_agent/agent/fork_pipe_manager"
19
- require "tcell_agent/agent/static_agent"
16
+ require 'tcell_agent/agent/fork_pipe_manager'
17
+ require 'tcell_agent/agent/static_agent'
20
18
 
21
19
  require 'net/http'
22
20
  require 'thread'
23
21
  require 'logger'
24
22
  require 'json'
25
23
 
26
-
27
24
  module TCellAgent
28
- class Agent
29
-
25
+ class Agent # rubocop:disable Metrics/ClassLength
30
26
  # cmdi events are special because they can be triggered very easily by running any shell command.
31
27
  # Startup scripts are likely to run shell commands. It's not a good idea to startup the event
32
28
  # processor before worker processses are forked, so the safest thing to do is let a different
33
29
  # event start the event processor to avoid deadlocking worker processes.
34
- def safe_to_send_cmdi_events?()
30
+ def safe_to_send_cmdi_events?
35
31
  event_processor_running?
36
32
  end
37
33
 
@@ -40,71 +36,63 @@ module TCellAgent
40
36
  return if TCellAgent.configuration.should_start_event_manager? == false
41
37
  @worker_mutex.synchronize do
42
38
  return if event_processor_running?
43
- if self.is_parent_process? == false
44
- self.initialize_processor_variables
45
- end
39
+ initialize_processor_variables if parent_process? == false
46
40
  start_event_processor
47
41
  end
48
42
  end
49
43
 
50
44
  def event_processor_running?
51
- if TCellAgent::Agent.is_parent_process? == false
52
- return true
53
- end
45
+ return true if TCellAgent::Agent.parent_process? == false
54
46
  @event_processor_thread && @event_processor_thread.alive?
55
47
  end
56
48
 
57
49
  def stop_event_processor
58
- TCellAgent.logger.debug("Stopping event processor thread")
59
- if @event_processor_thread && @event_processor_thread.alive?
60
- @event_processor_thread.exit
61
- end
50
+ TCellAgent.logger.debug('Stopping event processor thread')
51
+ @event_processor_thread.exit if @event_processor_thread && @event_processor_thread.alive?
62
52
  end
63
53
 
64
54
  def send_dispatch_events(tapi)
65
- events_to_send = []
66
- @event_dispatch_monitor.synchronize {
67
- events_to_send = @dispatchEvents
68
- @dispatchEvents = []
69
- }
70
- if (@response_time_table.size > 0)
71
- metrics_event = TCellAgent::SensorEvents::MetricsEvent.new
72
- metrics_event.set_route_count_table(@response_time_table)
73
- events_to_send.push( metrics_event )
74
- @mutex.synchronize do
75
- @response_time_table = {}
76
- end
77
- end
78
- if @sessions_metrics.has_sessions?
79
- sessions_to_send = []
80
- @sessions_metrics_mutex.synchronize do
81
- sessions_to_send = @sessions_metrics
82
- @sessions_metrics = TCellAgent::SensorEvents::SessionsMetric.new
83
- end
84
- events_to_send.push( sessions_to_send )
55
+ events_to_send = []
56
+ @event_dispatch_monitor.synchronize do
57
+ events_to_send = @dispatch_events
58
+ @dispatch_events = []
59
+ end
60
+
61
+ unless @response_time_table.empty?
62
+ metrics_event = TCellAgent::SensorEvents::MetricsEvent.new
63
+ metrics_event.set_route_count_table(@response_time_table)
64
+ events_to_send.push(metrics_event)
65
+ @mutex.synchronize do
66
+ @response_time_table = {}
85
67
  end
86
- success = tapi.send_event_set(events_to_send)
87
- if ( success == false )
88
- ensured_events = events_to_send.find_all{|item| item.ensure == true }
89
- @event_dispatch_monitor.synchronize {
90
- @dispatchEvents.push(*ensured_events)
91
- }
68
+ end
69
+
70
+ if @sessions_metrics.sessions?
71
+ sessions_to_send = []
72
+ @sessions_metrics_mutex.synchronize do
73
+ sessions_to_send = @sessions_metrics
74
+ @sessions_metrics = TCellAgent::SensorEvents::SessionsMetric.new
92
75
  end
93
- end
76
+ events_to_send.push(sessions_to_send)
77
+ end
78
+
79
+ return if tapi.send_event_set(events_to_send)
94
80
 
81
+ ensured_events = events_to_send.find_all { |item| item.ensure == true }
82
+ @event_dispatch_monitor.synchronize do
83
+ @dispatch_events.push(*ensured_events)
84
+ end
85
+ end
95
86
 
96
- def start_event_processor(send_empties=true)
87
+ def start_event_processor(send_empties = true)
97
88
  return if TCellAgent.configuration.should_start_event_manager? == false
98
89
 
99
- if TCellAgent::Agent.is_parent_process? == false
100
- return
101
- end
90
+ return if TCellAgent::Agent.parent_process? == false
102
91
 
103
- TCellAgent.logger.debug("Starting event processor thread")
92
+ TCellAgent.logger.debug('Starting event processor thread')
104
93
  @events_send_empties = send_empties
105
94
  Thread.abort_on_exception = true
106
95
  @event_processor_thread = Thread.new do
107
-
108
96
  begin
109
97
  tapi = TCellApi.new
110
98
 
@@ -113,30 +101,32 @@ module TCellAgent
113
101
  begin
114
102
  begin
115
103
  now = Time.now
116
- wait_for = @dispatchEventsTimeout - (now - last_run_time).to_i.abs
117
- event = @eventQueue.pop([wait_for, 1].max)
118
- if event == nil
119
- if (@events_send_empties || @dispatchEvents.length > 0)
104
+ wait_for = @dispatch_events_timeout - (now - last_run_time).to_i.abs
105
+ event = @event_queue.pop([wait_for, 1].max)
106
+ if event.nil?
107
+ if @events_send_empties || !@dispatch_events.empty?
120
108
  last_run_time = Time.now
121
- self.send_dispatch_events(tapi)
109
+ send_dispatch_events(tapi)
122
110
  end
123
111
  else
124
112
  event.post_process
125
113
  if event.send == true
126
- @event_dispatch_monitor.synchronize {
127
- @dispatchEvents.push(event)
128
- }
114
+ @event_dispatch_monitor.synchronize do
115
+ @dispatch_events.push(event)
116
+ end
129
117
  end
130
- if (event.flush || @dispatchEvents.length >= @dispatchEventsLimit || wait_for < 0)
118
+ if event.flush || @dispatch_events.length >= @dispatch_events_limit || wait_for < 0
131
119
  last_run_time = Time.now
132
- self.send_dispatch_events(tapi)
120
+ send_dispatch_events(tapi)
133
121
  end
134
122
  end
135
- rescue ThreadError
123
+ rescue ThreadError => te
124
+ TCellAgent.logger.error("ThreadError while processing events: #{te.message}")
125
+ TCellAgent.logger.debug(te.backtrace)
136
126
  last_run_time = Time.now
137
- @event_dispatch_monitor.synchronize {
138
- @dispatchEvents = []
139
- }
127
+ @event_dispatch_monitor.synchronize do
128
+ @dispatch_events = []
129
+ end
140
130
  end
141
131
  rescue TCellAgent::ConfigurationException
142
132
  Thread.exit
@@ -144,18 +134,16 @@ module TCellAgent
144
134
  last_run_time = Time.now
145
135
  TCellAgent.logger.error("Exception while processing events: #{e.message}")
146
136
  TCellAgent.logger.debug(e.backtrace)
147
- @event_dispatch_monitor.synchronize {
148
- @dispatchEvents = []
149
- }
137
+ @event_dispatch_monitor.synchronize do
138
+ @dispatch_events = []
139
+ end
150
140
  end
151
141
  end
152
142
  rescue StandardError => xyz
153
143
  TCellAgent.logger.error("Exception while starting processor: #{xyz.message}")
154
144
  TCellAgent.logger.debug(xyz.backtrace)
155
145
  end
156
-
157
146
  end
158
-
159
147
  end
160
148
 
161
149
  def ensure_fork_event_thread_running
@@ -167,46 +155,38 @@ module TCellAgent
167
155
  end
168
156
 
169
157
  def event_fork_thread_running?
170
- if TCellAgent::Agent.is_parent_process?
171
- return true
172
- end
158
+ return true if TCellAgent::Agent.parent_process?
173
159
  @fork_event_thread && @fork_event_thread.alive?
174
160
  end
175
161
 
176
162
  def start_fork_event_thread
177
163
  @fork_event_thread = Thread.new do
178
- begin
179
- loop do
180
- begin
181
- event = @fork_event_queue.pop
182
- if event.send == false
183
- event.post_process
184
- else
185
- TCellAgent::Agent.send_to_event_pipe(event)
186
- end
187
- rescue StandardError => e
188
- TCellAgent.logger.error("Exception while processing (forked) events: #{e.message}")
189
- TCellAgent.logger.debug(e.backtrace)
164
+ loop do
165
+ begin
166
+ event = @fork_event_queue.pop
167
+ if event.send
168
+ TCellAgent::Agent.send_to_event_pipe(event)
169
+ else
170
+ event.post_process
190
171
  end
172
+ rescue StandardError => e
173
+ TCellAgent.logger.error("Exception while processing (forked) events: #{e.message}")
174
+ TCellAgent.logger.debug(e.backtrace)
191
175
  end
192
- rescue StandardError => e
193
- TCellAgent.logger.error("Exception while running (forked) events: #{e.message}")
194
- TCellAgent.logger.debug(e.backtrace)
195
176
  end
196
177
  end
197
178
  end
198
179
 
199
180
  def queue_forked_event(event)
200
- begin
201
- self.ensure_fork_event_thread_running
202
- if (@fork_event_queue.length() > 100)
203
- TCellAgent.logger.debug("Dropping (forked) event because queue full")
204
- return
205
- end
206
- @fork_event_queue.push(event)
207
- rescue StandardError => queue_exception
208
- TCellAgent.logger.debug("Could not add (forked) event #{queue_exception.message}")
181
+ ensure_fork_event_thread_running
182
+ if @fork_event_queue.length > 100
183
+ TCellAgent.logger.debug('Dropping (forked) event because queue full')
184
+ return
209
185
  end
186
+ @fork_event_queue.push(event)
187
+ rescue StandardError => queue_exception
188
+ TCellAgent.logger.debug("Could not add (forked) event #{queue_exception.message}")
189
+ TCellAgent.logger.debug(queue_exception.backtrace)
210
190
  end
211
191
 
212
192
  def ensure_metrics_event_thread_running
@@ -218,17 +198,13 @@ module TCellAgent
218
198
  end
219
199
 
220
200
  def event_metrics_thread_running?
221
- if TCellAgent::Agent.is_parent_process?
222
- return true
223
- end
201
+ return true if TCellAgent::Agent.parent_process?
224
202
  @metrics_event_thread && @metrics_event_thread.alive?
225
203
  end
226
204
 
227
205
  def stop_metrics_event_thread
228
- TCellAgent.logger.debug("Stopping metrics event thread")
229
- if @metrics_event_thread && @metrics_event_thread.alive?
230
- @metrics_event_thread.exit
231
- end
206
+ TCellAgent.logger.debug('Stopping metrics event thread')
207
+ @metrics_event_thread.exit if @metrics_event_thread && @metrics_event_thread.alive?
232
208
  end
233
209
 
234
210
  def start_metrics_event_thread
@@ -247,54 +223,50 @@ module TCellAgent
247
223
  end
248
224
 
249
225
  def _queue_metric(event)
250
- return if TCellAgent.configuration.should_consume_event? == false
226
+ return unless TCellAgent.configuration.should_consume_event?
227
+
251
228
  begin
252
- self.ensure_metrics_event_thread_running
253
- if (@metrics_event_queue.length() > 100)
254
- TCellAgent.logger.debug("Dropping (forked) metric because queue full")
229
+ ensure_metrics_event_thread_running
230
+ if @metrics_event_queue.length > 100
231
+ TCellAgent.logger.debug('Dropping (forked) metric because queue full')
255
232
  return
256
233
  end
257
234
  @metrics_event_queue.push(event)
258
235
  rescue StandardError => queue_exception
259
236
  TCellAgent.logger.debug("Could not add (forked) metric #{queue_exception.message}")
237
+ TCellAgent.logger.debug(queue_exception.backtrace)
260
238
  end
261
239
  end
262
240
 
263
- def queueSensorEvent(event)
264
- return if TCellAgent.configuration.should_consume_event? == false
265
- begin
266
- if TCellAgent::Agent.is_parent_process? == false
267
- self.queue_forked_event(event)
268
- return
269
- end
241
+ def queue_sensor_event(event)
242
+ return unless TCellAgent.configuration.should_consume_event?
270
243
 
271
- begin
272
- self.ensure_event_processor_running
273
- @event_queue_monitor.synchronize {
274
- @eventQueue.push(event, 10)
275
- }
244
+ if TCellAgent::Agent.parent_process? == false
245
+ queue_forked_event(event)
246
+ return
247
+ end
276
248
 
277
- rescue RuntimeError
278
- TCellAgent.logger.debug("Dropping event because queue full")
249
+ begin
250
+ ensure_event_processor_running
251
+ @event_queue_monitor.synchronize do
252
+ @event_queue.push(event, 10)
279
253
  end
280
-
281
254
  rescue StandardError => queue_exception
282
- TCellAgent.logger.debug("Could not add event #{queue_exception.message}")
255
+ TCellAgent.logger.debug("Dropping event because queue full #{queue_exception.message}")
256
+ TCellAgent.logger.debug(queue_exception.backtrace)
283
257
  end
284
258
  end
285
259
 
286
260
  def increment_session_info(hmac_session_id, user_id, ip_address, user_agent)
287
-
288
- TCellAgent::Instrumentation.safe_block("Incrementing session info") do
289
-
290
- if TCellAgent::Agent.is_parent_process? == false
291
- TCellAgent.queue_metric({
292
- "_type"=>"increment_session_info",
293
- "hmac_session_id" => hmac_session_id,
294
- "user_id" => user_id,
295
- "ip_address" => ip_address,
296
- "user_agent" => user_agent
297
- })
261
+ TCellAgent::Instrumentation.safe_block('Incrementing session info') do
262
+ if TCellAgent::Agent.parent_process? == false
263
+ TCellAgent.queue_metric(
264
+ '_type' => 'increment_session_info',
265
+ 'hmac_session_id' => hmac_session_id,
266
+ 'user_id' => user_id,
267
+ 'ip_address' => ip_address,
268
+ 'user_agent' => user_agent
269
+ )
298
270
  return
299
271
  end
300
272
 
@@ -309,29 +281,24 @@ module TCellAgent
309
281
  end
310
282
 
311
283
  def increment_route(route_id, response_time)
312
- TCellAgent::Instrumentation.safe_block("Incrementing route") do
313
-
314
- if TCellAgent::Agent.is_parent_process? == false
315
- TCellAgent.queue_metric({
316
- "_type"=>"increment_route",
317
- "route_id"=>route_id,
318
- "response_time"=>response_time
319
- })
284
+ TCellAgent::Instrumentation.safe_block('Incrementing route') do
285
+ if TCellAgent::Agent.parent_process? == false
286
+ TCellAgent.queue_metric(
287
+ '_type' => 'increment_route',
288
+ 'route_id' => route_id,
289
+ 'response_time' => response_time
290
+ )
320
291
  return
321
292
  end
322
293
  @mutex.synchronize do
323
- if (route_id == nil || route_id == "")
324
- route_id = "?"
325
- end
326
- @response_time_table[route_id] = @response_time_table.fetch(route_id,{})
327
- @response_time_table[route_id]["c"] = @response_time_table[route_id].fetch("c",0) + 1
328
- @response_time_table[route_id]["mx"] = [@response_time_table[route_id].fetch("mx",0), response_time].max
329
- @response_time_table[route_id]["mn"] = [@response_time_table[route_id].fetch("mn",response_time), response_time].min
330
- @response_time_table[route_id]["t"] = ((@response_time_table[route_id].fetch("t",0)*(@response_time_table[route_id]["c"]-1)) + response_time) / @response_time_table[route_id]["c"]
294
+ route_id = '?' if route_id.nil? || route_id == ''
295
+ @response_time_table[route_id] = @response_time_table.fetch(route_id, {})
296
+ @response_time_table[route_id]['c'] = @response_time_table[route_id].fetch('c', 0) + 1
297
+ @response_time_table[route_id]['mx'] = [@response_time_table[route_id].fetch('mx', 0), response_time].max
298
+ @response_time_table[route_id]['mn'] = [@response_time_table[route_id].fetch('mn', response_time), response_time].min
299
+ @response_time_table[route_id]['t'] = ((@response_time_table[route_id].fetch('t', 0) * (@response_time_table[route_id]['c'] - 1)) + response_time) / @response_time_table[route_id]['c']
331
300
  end
332
-
333
301
  end
334
302
  end
335
-
336
303
  end
337
304
  end