Class: FlowChat::Instrumentation::LogSubscriber

Inherits:
Object
  • Object
show all
Defined in:
lib/flow_chat/instrumentation/log_subscriber.rb

Instance Method Summary collapse

Instance Method Details

#api_request(event) ⇒ Object



132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 132

def api_request(event)
  payload = event.payload
  platform = payload[:platform] || "unknown"
  platform_name = format_platform_name(platform)
  duration = event.duration.round(2)

  if payload[:success]
    FlowChat.logger.debug { "#{platform_name} API Request: #{payload[:method]} #{payload[:endpoint]} (#{duration}ms) - Success" }
  else
    FlowChat.logger.error { "#{platform_name} API Request: #{payload[:method]} #{payload[:endpoint]} (#{duration}ms) - Failed: #{payload[:status]} #{payload[:error]}" }
  end
end

#context_created(event) ⇒ Object

Context events



146
147
148
149
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 146

def context_created(event)
  payload = event.payload
  FlowChat.logger.debug { "Context Created [Gateway: #{payload[:gateway] || "unknown"}]" }
end

#flow_execution_end(event) ⇒ Object



10
11
12
13
14
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 10

def flow_execution_end(event)
  payload = event.payload
  duration = event.duration.round(2)
  FlowChat.logger.info { "Flow Execution Completed: #{payload[:flow_name]}##{payload[:action]} (#{duration}ms) [Session: #{payload[:session_id]}]" }
end

#flow_execution_error(event) ⇒ Object



16
17
18
19
20
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 16

def flow_execution_error(event)
  payload = event.payload
  duration = event.duration.round(2)
  FlowChat.logger.error { "Flow Execution Failed: #{payload[:flow_name]}##{payload[:action]} (#{duration}ms) - #{payload[:error_class]}: #{payload[:error_message]} [Session: #{payload[:session_id]}]" }
end

#flow_execution_start(event) ⇒ Object

Flow execution events



5
6
7
8
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 5

def flow_execution_start(event)
  payload = event.payload
  FlowChat.logger.info { "Flow Execution Started: #{payload[:flow_name]}##{payload[:action]} [Session: #{payload[:session_id]}]" }
end

#media_upload(event) ⇒ Object



112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 112

def media_upload(event)
  payload = event.payload
  platform = payload[:platform] || "unknown"
  platform_name = format_platform_name(platform)
  duration = event.duration.round(2)

  if payload[:success] != false  # Check for explicit false, not just falsy
    FlowChat.logger.info { "#{platform_name} Media Upload: #{payload[:filename]} (#{format_bytes(payload[:size])}, #{duration}ms) - Success" }
  else
    FlowChat.logger.error { "#{platform_name} Media Upload Failed: #{payload[:filename]} (#{duration}ms) - #{payload[:error]}" }
  end
end

#message_received(event) ⇒ Object

Platform-agnostic events (new scalable approach)



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 66

def message_received(event)
  payload = event.payload
  platform = payload[:platform] || "unknown"
  platform_name = format_platform_name(platform)

  case platform.to_sym
  when :whatsapp
    contact_info = payload[:contact_name] ? " (#{payload[:contact_name]})" : ""
    FlowChat.logger.info { "#{platform_name} Message Received: #{payload[:from]}#{contact_info} - Type: #{payload[:message_type]} [ID: #{payload[:message_id]}]" }
  when :ussd
    FlowChat.logger.info { "#{platform_name} Message Received: #{payload[:from]} - Input: '#{payload[:message]}' [Session: #{payload[:session_id]}]" }
  else
    FlowChat.logger.info { "#{platform_name} Message Received: #{payload[:from]} - Message: '#{payload[:message]}' [Session: #{payload[:session_id]}]" }
  end
end

#message_sent(event) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 82

def message_sent(event)
  payload = event.payload
  platform = payload[:platform] || "unknown"
  platform_name = format_platform_name(platform)
  duration = event.duration.round(2)

  case platform.to_sym
  when :whatsapp
    FlowChat.logger.info { "#{platform_name} Message Sent: #{payload[:to]} - Type: #{payload[:message_type]} (#{duration}ms) [Length: #{payload[:content_length]} chars]" }
  when :ussd
    FlowChat.logger.info { "#{platform_name} Message Sent: #{payload[:to]} - Type: #{payload[:message_type]} (#{duration}ms) [Session: #{payload[:session_id]}]" }
  else
    FlowChat.logger.info { "#{platform_name} Message Sent: #{payload[:to]} - Type: #{payload[:message_type]} (#{duration}ms)" }
  end
end

#middleware_after(event) ⇒ Object



59
60
61
62
63
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 59

def middleware_after(event)
  payload = event.payload
  duration = event.duration.round(2)
  FlowChat.logger.debug { "Middleware After: #{payload[:middleware_name]} (#{duration}ms) [Session: #{payload[:session_id]}]" }
end

#middleware_before(event) ⇒ Object

Middleware events



54
55
56
57
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 54

def middleware_before(event)
  payload = event.payload
  FlowChat.logger.debug { "Middleware Before: #{payload[:middleware_name]} [Session: #{payload[:session_id]}]" }
end

#pagination_triggered(event) ⇒ Object



125
126
127
128
129
130
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 125

def pagination_triggered(event)
  payload = event.payload
  platform = payload[:platform] || "unknown"
  platform_name = format_platform_name(platform)
  FlowChat.logger.info { "#{platform_name} Pagination Triggered: Page #{payload[:current_page]}/#{payload[:total_pages]} (#{payload[:content_length]} chars) [Session: #{payload[:session_id]}]" }
end

#session_cache_hit(event) ⇒ Object



33
34
35
36
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 33

def session_cache_hit(event)
  payload = event.payload
  FlowChat.logger.debug { "Session Cache Hit: #{payload[:session_id]} - Key: #{payload[:key]}" }
end

#session_cache_miss(event) ⇒ Object



38
39
40
41
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 38

def session_cache_miss(event)
  payload = event.payload
  FlowChat.logger.debug { "Session Cache Miss: #{payload[:session_id]} - Key: #{payload[:key]}" }
end

#session_created(event) ⇒ Object

Session events



23
24
25
26
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 23

def session_created(event)
  payload = event.payload
  FlowChat.logger.info { "Session Created: #{payload[:session_id]} [Store: #{payload[:store_type]}, Gateway: #{payload[:gateway]}]" }
end

#session_data_get(event) ⇒ Object



48
49
50
51
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 48

def session_data_get(event)
  payload = event.payload
  FlowChat.logger.debug { "Session Data Get: #{payload[:session_id]} - Key: #{payload[:key]} = #{payload[:value].inspect}" }
end

#session_data_set(event) ⇒ Object



43
44
45
46
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 43

def session_data_set(event)
  payload = event.payload
  FlowChat.logger.debug { "Session Data Set: #{payload[:session_id]} - Key: #{payload[:key]}" }
end

#session_destroyed(event) ⇒ Object



28
29
30
31
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 28

def session_destroyed(event)
  payload = event.payload
  FlowChat.logger.info { "Session Destroyed: #{payload[:session_id]} [Gateway: #{payload[:gateway]}]" }
end

#webhook_failed(event) ⇒ Object



105
106
107
108
109
110
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 105

def webhook_failed(event)
  payload = event.payload
  platform = payload[:platform] || "unknown"
  platform_name = format_platform_name(platform)
  FlowChat.logger.warn { "#{platform_name} Webhook Verification Failed: #{payload[:reason]}" }
end

#webhook_verified(event) ⇒ Object



98
99
100
101
102
103
# File 'lib/flow_chat/instrumentation/log_subscriber.rb', line 98

def webhook_verified(event)
  payload = event.payload
  platform = payload[:platform] || "unknown"
  platform_name = format_platform_name(platform)
  FlowChat.logger.info { "#{platform_name} Webhook Verified Successfully [Challenge: #{payload[:challenge]}]" }
end