Class: Kameleoon::Managers::Tracking::TrackingManager
- Inherits:
-
Object
- Object
- Kameleoon::Managers::Tracking::TrackingManager
- Defined in:
- lib/kameleoon/managers/tracking/tracking_manager.rb
Constant Summary collapse
- LINES_DELIMETER =
"\n"- REQUEST_SIZE_LIMIT =
2.5 * 1024^2 characters
2560 * 1024
- PROBE_MAX_VISITORS =
1- MAX_SEND_THREADS =
8- MAX_QUEUED_REQUESTS =
32- SEND_THREAD_IDLE_SECONDS =
60- STOP_WAIT_SECONDS =
1
Instance Method Summary collapse
- #add_visitor_code(visitor_code) ⇒ Object
-
#initialize(data_manager, network_manager, visitor_manager, track_interval_seconds, scheduler, executor: nil) ⇒ TrackingManager
constructor
A new instance of TrackingManager.
-
#probe_mode? ⇒ Boolean
Test purpose only.
- #stop ⇒ Object
- #track_all ⇒ Object
- #track_visitor(visitor_code) ⇒ Object
Constructor Details
#initialize(data_manager, network_manager, visitor_manager, track_interval_seconds, scheduler, executor: nil) ⇒ TrackingManager
Returns a new instance of TrackingManager.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/kameleoon/managers/tracking/tracking_manager.rb', line 21 def initialize( data_manager, network_manager, visitor_manager, track_interval_seconds, scheduler, executor: nil ) Logging::KameleoonLogger.debug( 'CALL: TrackingManager.new(data_manager, network_manager. visitor_manager, ' \ 'track_interval_seconds: %s, scheduler)', track_interval_seconds ) @tracking_visitors = ConcurrentVisitorTrackingRegistry.new(visitor_manager) @probe_mode = false @data_manager = data_manager @network_manager = network_manager @visitor_manager = visitor_manager @executor = executor || Concurrent::ThreadPoolExecutor.new( name: 'kameleoon-tracking', min_threads: 0, max_threads: MAX_SEND_THREADS, max_queue: MAX_QUEUED_REQUESTS, idletime: SEND_THREAD_IDLE_SECONDS, fallback_policy: :abort ) @track_all_job = scheduler.schedule_every(track_interval_seconds, method(:track_all)) unless scheduler.nil? Logging::KameleoonLogger.debug( 'RETURN: TrackingManager.new(data_manager, network_manager. visitor_manager, ' \ 'track_interval_seconds: %s, scheduler)', track_interval_seconds ) end |
Instance Method Details
#add_visitor_code(visitor_code) ⇒ Object
55 56 57 58 59 |
# File 'lib/kameleoon/managers/tracking/tracking_manager.rb', line 55 def add_visitor_code(visitor_code) Logging::KameleoonLogger.debug("CALL: TrackingManager.add_visitor_code(visitor_code: '%s')", visitor_code) @tracking_visitors.add(visitor_code) Logging::KameleoonLogger.debug("RETURN: TrackingManager.add_visitor_code(visitor_code: '%s')", visitor_code) end |
#probe_mode? ⇒ Boolean
Test purpose only
72 73 74 |
# File 'lib/kameleoon/managers/tracking/tracking_manager.rb', line 72 def probe_mode? @probe_mode end |
#stop ⇒ Object
44 45 46 47 48 49 50 51 52 53 |
# File 'lib/kameleoon/managers/tracking/tracking_manager.rb', line 44 def stop Logging::KameleoonLogger.debug('CALL: TrackingManager.stop') @track_all_job&.unschedule @track_all_job = nil # Queued requests still run; a later `track` is rejected and keeps its data (see `perform_tracking_request`). # The wait lets in-flight requests finish before the client disposal closes the connections. @executor.shutdown @executor.wait_for_termination(STOP_WAIT_SECONDS) Logging::KameleoonLogger.debug('RETURN: TrackingManager.stop') end |
#track_all ⇒ Object
61 62 63 64 65 66 67 68 69 |
# File 'lib/kameleoon/managers/tracking/tracking_manager.rb', line 61 def track_all Logging::KameleoonLogger.debug('CALL: TrackingManager.track_all') if @probe_mode track_probe else track(@tracking_visitors.extract) end Logging::KameleoonLogger.debug('RETURN: TrackingManager.track_all') end |
#track_visitor(visitor_code) ⇒ Object
76 77 78 79 80 |
# File 'lib/kameleoon/managers/tracking/tracking_manager.rb', line 76 def track_visitor(visitor_code) Logging::KameleoonLogger.debug("CALL: TrackingManager.track_visitor(visitor_code: '%s')", visitor_code) track([visitor_code]) Logging::KameleoonLogger.debug("RETURN: TrackingManager.track_visitor(visitor_code: '%s')", visitor_code) end |