module Mtracker
module for tracking time
Constants
- VERSION
Attributes
mtracker_log_pid_and_tid[RW]
mtracker_slack_url[RW]
Public Instance Methods
track(label, options = {}) { || ... }
click to toggle source
# File lib/mtracker.rb, line 7 def track(label, options = {}) slack = options[:slack] # Bool newrelic = options[:newrelic] || false # Bool nr_tracer = NewRelic::Agent::Tracer if defined?(NewRelic::Agent::Tracer) && newrelic start_time = Time.now increment_nest_level start_msg = "#{indent}[start#{pid_and_tid}] #{label}" put_track_info start_msg, slack if nr_tracer nr_segment = nr_tracer.start_segment(name: "Custom/#{label}", parent: nr_tracer.current_segment) Thread.current[:nr_transaction]&.add_segment(nr_segment) end result = yield finish_msg = "#{indent}[end #{pid_and_tid}] #{label} (#{sprintf('%.3f', Time.now - start_time)} sec)" put_track_info finish_msg, slack nr_segment&.finish decrement_nest_level result end
Private Instance Methods
decrement_nest_level()
click to toggle source
# File lib/mtracker.rb, line 58 def decrement_nest_level @mtracker_nest_levels ||= {} @mtracker_nest_levels[nest_level_key] = @mtracker_nest_levels[nest_level_key] ? @mtracker_nest_levels[nest_level_key] - 1 : 0 end
increment_nest_level()
click to toggle source
# File lib/mtracker.rb, line 53 def increment_nest_level @mtracker_nest_levels ||= {} @mtracker_nest_levels[nest_level_key] = @mtracker_nest_levels[nest_level_key] ? @mtracker_nest_levels[nest_level_key] + 1 : 0 end
indent()
click to toggle source
# File lib/mtracker.rb, line 34 def indent '| ' * nest_level end
nest_level()
click to toggle source
# File lib/mtracker.rb, line 42 def nest_level @mtracker_nest_levels ||= {} @mtracker_nest_levels[nest_level_key] ||= 0 end
nest_level_key()
click to toggle source
# File lib/mtracker.rb, line 47 def nest_level_key process_id = Process.pid thread_id = syscall(186) "#{process_id}_#{thread_id}" end
pid_and_tid()
click to toggle source
# File lib/mtracker.rb, line 38 def pid_and_tid mtracker_log_pid_and_tid ? " #{nest_level_key}" : '' end
put_track_info(msg, slack = false)
click to toggle source
# File lib/mtracker.rb, line 63 def put_track_info(msg, slack = false) if respond_to?(:logger) logger.info(msg) elsif Rails Rails.logger.info(msg) else puts msg end send_to_slack(msg) if slack end
send_to_slack(msg)
click to toggle source
# File lib/mtracker.rb, line 75 def send_to_slack(msg) return unless mtracker_slack_url uri = URI.parse(mtracker_slack_url) data = { text: msg } Net::HTTP.post_form(uri, payload: data.to_json) end