Class: SessionVision::Client
- Inherits:
-
Object
- Object
- SessionVision::Client
- Defined in:
- lib/sessionvision/client.rb
Instance Method Summary collapse
- #capture(event_name, user_id: nil, anonymous_id: nil, session_id: nil, properties: {}) ⇒ Object
- #flush ⇒ Object
- #identify(user_id, **traits) ⇒ Object
-
#initialize(config) ⇒ Client
constructor
A new instance of Client.
- #register(**properties) ⇒ Object
- #register_once(**properties) ⇒ Object
- #reset ⇒ Object
- #shutdown ⇒ Object
Constructor Details
#initialize(config) ⇒ Client
Returns a new instance of Client.
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 |
# File 'lib/sessionvision/client.rb', line 8 def initialize(config) @config = config @lock = Mutex.new @registered = {} @shutdown_called = false @logger = config.debug ? Logger.new($stdout, progname: "sessionvision") : nil @transport = Transport.new( ingest_host: config.ingest_host, max_retries: config.max_retries, retry_delays: config.retry_delays, gzip_threshold: config.gzip_threshold, on_error: config.on_error, logger: @logger ) @buffer = EventBuffer.new( flush_size: config.flush_size, flush_interval: config.flush_interval, send_fn: method(:send_batch), logger: @logger ) @buffer.start at_exit { shutdown } @logger&.debug("Client initialized (host=#{config.ingest_host})") end |
Instance Method Details
#capture(event_name, user_id: nil, anonymous_id: nil, session_id: nil, properties: {}) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/sessionvision/client.rb', line 38 def capture(event_name, user_id: nil, anonymous_id: nil, session_id: nil, properties: {}) raise ArgumentError, "event_name must be a non-empty string" unless event_name.is_a?(String) && !event_name.empty? raise ArgumentError, "Either user_id or anonymous_id is required" if user_id.nil? && anonymous_id.nil? merged_props = @lock.synchronize { @registered.merge(properties || {}) } event = { "event" => event_name, "timestamp" => (Time.now.to_f * 1000).to_i, "properties" => merged_props, "sessionId" => session_id || SecureRandom.uuid } event["userId"] = user_id if user_id event["anonymousId"] = anonymous_id if anonymous_id @logger&.debug("Event captured: #{event_name}") @buffer.push(event) end |
#flush ⇒ Object
78 79 80 |
# File 'lib/sessionvision/client.rb', line 78 def flush @buffer.flush end |
#identify(user_id, **traits) ⇒ Object
57 58 59 60 61 |
# File 'lib/sessionvision/client.rb', line 57 def identify(user_id, **traits) raise ArgumentError, "user_id must be a non-empty string" unless user_id.is_a?(String) && !user_id.empty? capture("$identify", user_id: user_id, properties: traits.transform_keys(&:to_s)) end |
#register(**properties) ⇒ Object
63 64 65 66 67 |
# File 'lib/sessionvision/client.rb', line 63 def register(**properties) @lock.synchronize do properties.each { |k, v| @registered[k.to_s] = v } end end |
#register_once(**properties) ⇒ Object
69 70 71 72 73 74 75 76 |
# File 'lib/sessionvision/client.rb', line 69 def register_once(**properties) @lock.synchronize do properties.each do |k, v| key = k.to_s @registered[key] = v unless @registered.key?(key) end end end |
#reset ⇒ Object
93 94 95 |
# File 'lib/sessionvision/client.rb', line 93 def reset @lock.synchronize { @registered.clear } end |
#shutdown ⇒ Object
82 83 84 85 86 87 88 89 90 91 |
# File 'lib/sessionvision/client.rb', line 82 def shutdown @lock.synchronize do return if @shutdown_called @shutdown_called = true end @logger&.debug("Shutting down") @buffer.shutdown end |