Module: Vx::Instrumentation

Extended by:
Instrumentation, Airbrake
Included in:
Instrumentation
Defined in:
lib/vx/instrumentation.rb,
lib/vx/instrumentation/logger.rb,
lib/vx/instrumentation/version.rb,
lib/vx/instrumentation/airbrake.rb

Defined Under Namespace

Modules: Airbrake Classes: Logger

Constant Summary collapse

DATE_FORMAT =
'%Y-%m-%dT%H:%M:%S.%N%z'
THREAD_KEY =
'vx_instrumentation_keys'
VERSION =
"0.1.0"

Instance Method Summary collapse

Methods included from Airbrake

notify_airbrake

Instance Method Details

#defaultObject



33
34
35
# File 'lib/vx/instrumentation.rb', line 33

def default
  Thread.current[THREAD_KEY] || {}
end

#delivery(name, payload, tags, started, finished) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/vx/instrumentation.rb', line 57

def delivery(name, payload, tags, started, finished)
  Vx::Instrumentation::Logger.logger.log(
    ::Logger::INFO,
    "@event"      => name,
    process_id:  Process.pid,
    thread_id:   Thread.current.object_id,
    "@timestamp"  => started.strftime(DATE_FORMAT),
    "@duration"   => (finished - started).to_f,
    "@fields"     => payload,
    "@tags"       => tags
  )
end

#handle_exception(event, ex, env = {}) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/vx/instrumentation.rb', line 37

def handle_exception(event, ex, env = {})
  tags = event.split(".")
  tags << "exception"
  tags.uniq!

  payload = {
    "@event"     => event,
    "@timestamp" => Time.now.strftime(DATE_FORMAT),
    "@tags"      => tags,
    "@fields"    => env,
    process_id:  Process.pid,
    thread_id:   Thread.current.object_id,
    exception:   ex.class.to_s,
    message:     ex.message.to_s,
    backtrace:   (ex.backtrace || []).map(&:to_s).join("\n"),
  }
  Vx::Instrumentation::Logger.logger.error(payload)
  notify_airbrake(ex, env)
end

#install(target, log_level = 0) ⇒ Object



17
18
19
20
21
# File 'lib/vx/instrumentation.rb', line 17

def install(target, log_level = 0)
  $stdout.puts " --> initializing Vx::Instrumentation, log stored in #{target}"
  Instrumentation::Logger.setup target
  Instrumentation::Logger.logger.level = log_level
end

#with(new_keys) ⇒ Object



23
24
25
26
27
28
29
30
31
# File 'lib/vx/instrumentation.rb', line 23

def with(new_keys)
  old_keys = Thread.current[THREAD_KEY]
  begin
    Thread.current[THREAD_KEY] = (old_keys || {}).merge(new_keys)
    yield if block_given?
  ensure
    Thread.current[THREAD_KEY] = old_keys
  end
end