Module: FlowChat::Instrumentation

Extended by:
ActiveSupport::Concern
Included in:
BaseProcessor, Context, Http::Gateway::Simple, Session::CacheSessionStore, Session::Middleware, Session::RailsSessionStore, Ussd::Gateway::Nalo, Ussd::Gateway::Nsano, Ussd::Middleware::Pagination, Whatsapp::Client, Whatsapp::Gateway::CloudApi
Defined in:
lib/flow_chat/instrumentation.rb,
lib/flow_chat/instrumentation/setup.rb,
lib/flow_chat/instrumentation/log_subscriber.rb,
lib/flow_chat/instrumentation/metrics_collector.rb

Defined Under Namespace

Modules: Events, Setup Classes: LogSubscriber, MetricsCollector

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.instrument(event_name, payload = {}, &block) ⇒ Object

Module-level method for direct calls like FlowChat::Instrumentation.instrument



28
29
30
31
32
33
34
35
36
# File 'lib/flow_chat/instrumentation.rb', line 28

def self.instrument(event_name, payload = {}, &block)
  full_event_name = "#{event_name}.flow_chat"

  enriched_payload = {
    timestamp: Time.current
  }.merge(payload || {}).compact

  ActiveSupport::Notifications.instrument(full_event_name, enriched_payload, &block)
end

Instance Method Details

#instrument(event_name, payload = {}, &block) ⇒ Object

Instrument a block of code with the given event name and payload



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/flow_chat/instrumentation.rb', line 8

def instrument(event_name, payload = {}, &block)
  enriched_payload = payload&.dup || {}
  if respond_to?(:context) && context
    enriched_payload[:request_id] = context["request.id"] if context["request.id"]
    enriched_payload[:session_id] = context["session.id"] if context["session.id"]
    enriched_payload[:flow_name] = context["flow.name"] if context["flow.name"]
    enriched_payload[:gateway] = context["request.gateway"] if context["request.gateway"]
    enriched_payload[:platform] = context["request.platform"] if context["request.platform"]
  end

  self.class.instrument(event_name, enriched_payload, &block)
end