1# frozen_string_literal: true
2
3module SentryOugai
4 def super_add(severity, data)
5 super
6 return unless Sentry.get_current_hub
7
8 level = Sentry::Breadcrumb::SentryLogger::LEVELS.fetch(severity, nil)
9 Sentry.add_breadcrumb(Sentry::Breadcrumb.new(
10 level: level,
11 category: data[:category] || "logger",
12 message: data[:msg],
13 data: data.reject { |k, _| [:msg, :category].include?(k) },
14 type: severity >= 3 ? "error" : level
15 ))
16 end
17end
18
19LOG.extend SentryOugai
20
21module SentryEMHiredis
22 def respond_to_missing?(*)
23 super
24 end
25
26 def record_span(description)
27 transaction = Sentry.get_current_scope.get_transaction
28 return yield unless transaction&.sampled
29
30 span = transaction.start_child(
31 op: "db.redis.command",
32 description: description
33 )
34
35 df = yield
36 df.callback { span.finish }
37 df
38 end
39
40 def method_missing(sym, *args)
41 EM::Hiredis.logger.debug(
42 "Sending Redis command",
43 category: "db.redis.command",
44 commands: [{
45 command: sym.to_s.upcase,
46 key: args.first,
47 arguments: args[1..-1].join(" ")
48 }]
49 )
50 record_span("#{sym} #{args.join(' ')}") { super }
51 end
52end
53
54EM::Hiredis::Client.include SentryEMHiredis