Module: Xhummingbird

Defined in:
lib/xhummingbird.rb,
lib/xhummingbird/client.rb,
lib/xhummingbird/version.rb,
lib/xhummingbird/protos/event_pb.rb,
lib/xhummingbird/rack/capture_exception.rb

Defined Under Namespace

Modules: Rack Classes: Client, Error

Constant Summary collapse

XH_SERVICE =
'XH_SERVICE'
LOGGER =
Logger.new(STDERR)
VERSION =
"0.1.6"
Event =
::Google::Protobuf::DescriptorPool.generated_pool.lookup("xhummingbird.Event").msgclass

Class Method Summary collapse

Class Method Details

.debug(*args) ⇒ Object



20
21
22
# File 'lib/xhummingbird.rb', line 20

def self.debug(*args)
  LOGGER.debug(*args) if ENV['XH_DEBUG']
end

.default_serviceObject



116
117
118
119
120
# File 'lib/xhummingbird.rb', line 116

def self.default_service
  debug(__method__)

  ENV.fetch(XH_SERVICE, "")
end

.default_tagsObject



84
85
86
87
88
89
90
91
92
93
94
# File 'lib/xhummingbird.rb', line 84

def self.default_tags
  debug(__method__)

  {
    "default/sdk" => "Ruby #{Xhummingbird::VERSION}",
    "default/hostname" =>  Socket.gethostname,
    "default/ruby_version" =>  RUBY_VERSION,
    "default/pid" =>  Process.pid.to_s,
    "default/thread_object_id" => Thread.current.object_id.to_s
  }
end

.enabled?Boolean

Returns:

  • (Boolean)


78
79
80
81
82
# File 'lib/xhummingbird.rb', line 78

def self.enabled?
  debug(__method__)

  Client.instance.enabled?
end

.format_hash(hash) ⇒ Object



104
105
106
107
108
109
110
111
112
113
114
# File 'lib/xhummingbird.rb', line 104

def self.format_hash(hash)
  debug(__method__)

  formatted = {}

  hash.each do |k, v|
    formatted[k.to_s] = v.to_s
  end

  formatted
end

.send(**args) ⇒ Object



96
97
98
99
100
101
102
# File 'lib/xhummingbird.rb', line 96

def self.send(**args)
  debug(__method__)

  event = Event.new(**args)
  message = Event.encode(event)
  Client.instance.send(message)
end

.send_event(**args) ⇒ Object



68
69
70
71
72
73
74
75
76
# File 'lib/xhummingbird.rb', line 68

def self.send_event(**args)
  debug(__method__)

  return unless enabled?

  send(**args)
rescue => e
  debug(e)
end

.send_exception(exception, level: 2, tags: {}, service: nil) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/xhummingbird.rb', line 50

def self.send_exception(exception, level: 2, tags: {}, service: nil)
  debug(__method__)

  return unless enabled?

  send(
    level: level,
    title: exception.class.name,
    message: exception.message,
    trace: exception.backtrace,
    tags: default_tags.merge(format_hash(tags)),
    timestamp: Time.now,
    service: service || default_service
  )
rescue => e
  debug(e)
end

.send_trace(title:, message: "", level: 1, tags: {}, service: nil) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/xhummingbird.rb', line 32

def self.send_trace(title:, message: "", level: 1, tags: {}, service: nil)
  debug(__method__)

  return unless enabled?

  send(
    level: level,
    title: title.to_s,
    message: message.to_s,
    trace: caller,
    tags: default_tags.merge(format_hash(tags)),
    timestamp: Time.now,
    service: service || default_service
  )
rescue => e
  debug(e)
end

.startObject



24
25
26
27
28
29
30
# File 'lib/xhummingbird.rb', line 24

def self.start
  debug(__method__)

  Client.instance.start

  send_trace(title: "Started", message: "Xhummingbird Ruby SDK started.", level: 0)
end