backtrace.rb
835 Bytes
class Backtrace
include Mongoid::Document
include Mongoid::Timestamps
field :fingerprint
index :fingerprint => 1
has_many :notices
has_one :notice
embeds_many :lines, :class_name => "BacktraceLine"
after_initialize :generate_fingerprint
delegate :app, :to => :notice
def self.find_or_create(lines)
fingerprint = generate_fingerprint(lines)
where(fingerprint: generate_fingerprint(lines)).
find_one_and_update(
{ '$setOnInsert' => { fingerprint: fingerprint, lines: lines } },
{ return_document: :after, upsert: true })
end
def raw=(raw)
raw.compact.each do |raw_line|
lines << BacktraceLine.new(BacktraceLineNormalizer.new(raw_line).call)
end
end
private
def generate_fingerprint
self.fingerprint = self.class.generate_fingerprint(lines)
end
end