Class: RailsErrorDashboard::Services::SimilarityCalculator

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_error_dashboard/services/similarity_calculator.rb

Overview

Calculates similarity scores between errors using multiple algorithms

Combines:

  • Backtrace similarity (Jaccard index on stack frames) - 70% weight

  • Message similarity (Levenshtein distance) - 30% weight

Returns a similarity score from 0.0 (completely different) to 1.0 (identical)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(error1, error2) ⇒ SimilarityCalculator

Returns a new instance of SimilarityCalculator.



22
23
24
25
# File 'lib/rails_error_dashboard/services/similarity_calculator.rb', line 22

def initialize(error1, error2)
  @error1 = error1
  @error2 = error2
end

Class Method Details

.call(error1, error2) ⇒ Float

Calculate similarity between two errors

Parameters:

  • error1 (ErrorLog)

    First error to compare

  • error2 (ErrorLog)

    Second error to compare

Returns:

  • (Float)

    Similarity score from 0.0 to 1.0



18
19
20
# File 'lib/rails_error_dashboard/services/similarity_calculator.rb', line 18

def self.call(error1, error2)
  new(error1, error2).calculate
end

Instance Method Details

#calculateObject



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/rails_error_dashboard/services/similarity_calculator.rb', line 27

def calculate
  # Quick return for same error
  return 1.0 if @error1.id == @error2.id

  # Quick return for different platforms (per user config - same platform only)
  return 0.0 if different_platforms?

  backtrace_score = calculate_backtrace_similarity
  message_score = calculate_message_similarity

  # Weighted combination: backtrace 70%, message 30%
  (backtrace_score * 0.7) + (message_score * 0.3)
end