class Airbrake::Filters::GitLastCheckoutFilter
Attaches git checkout info to `context`. The info includes:
* username * email * revision * time
This information is used to track deploys automatically.
@api private @since v2.12.0
Constants
- MIN_HEAD_COLS
@return [Integer] least possible amount of columns in git's `logs/HEAD`
file (checkout information is omitted)
Attributes
weight[R]
@return [Integer]
Public Class Methods
new(root_directory)
click to toggle source
@param [String] root_directory
# File lib/airbrake-ruby/filters/git_last_checkout_filter.rb, line 26 def initialize(root_directory) @git_path = File.join(root_directory, '.git') @weight = 116 @last_checkout = nil end
Public Instance Methods
call(notice)
click to toggle source
@macro call_filter
# File lib/airbrake-ruby/filters/git_last_checkout_filter.rb, line 33 def call(notice) return if notice[:context].key?(:lastCheckout) if @last_checkout notice[:context][:lastCheckout] = @last_checkout return end return unless File.exist?(@git_path) return unless (checkout = last_checkout) notice[:context][:lastCheckout] = checkout end
Private Instance Methods
checkout_line?(line)
click to toggle source
# File lib/airbrake-ruby/filters/git_last_checkout_filter.rb, line 81 def checkout_line?(line) line.include?("\tclone:") || line.include?("\tpull:") || line.include?("\tcheckout:") end
last_checkout()
click to toggle source
rubocop:disable Metrics/AbcSize
# File lib/airbrake-ruby/filters/git_last_checkout_filter.rb, line 49 def last_checkout return unless (line = last_checkout_line) parts = line.chomp.split("\t").first.split(' ') if parts.size < MIN_HEAD_COLS logger.error( "#{LOG_LABEL} Airbrake::#{self.class.name}: can't parse line: #{line}", ) return end author = parts[2..-4] @last_checkout = { username: author[0..1].join(' '), email: parts[-3][1..-2], revision: parts[1], time: timestamp(parts[-2].to_i), } end
last_checkout_line()
click to toggle source
rubocop:enable Metrics/AbcSize
# File lib/airbrake-ruby/filters/git_last_checkout_filter.rb, line 70 def last_checkout_line head_path = File.join(@git_path, 'logs', 'HEAD') return unless File.exist?(head_path) last_line = nil IO.foreach(head_path) do |line| last_line = line if checkout_line?(line) end last_line end
timestamp(utime)
click to toggle source
# File lib/airbrake-ruby/filters/git_last_checkout_filter.rb, line 87 def timestamp(utime) Time.at(utime).to_datetime.rfc3339 end