lib/request_log_analyzer/tracker.rb in request-log-analyzer-1.5.2 vs lib/request_log_analyzer/tracker.rb in request-log-analyzer-1.5.3
- old
+ new
@@ -96,111 +96,6 @@
# object with all the results of this tracker, that can be dumped to YAML format.
def to_yaml_object
nil
end
end
-
- module StatisticsTracking
-
- # Update sthe running calculation of statistics with the newly found numeric value.
- # <tt>category</tt>:: The category for which to update the running statistics calculations
- # <tt>number</tt>:: The numeric value to update the calculations with.
- def update_statistics(category, number)
- @categories[category] ||= {:hits => 0, :sum => 0, :mean => 0.0, :sum_of_squares => 0.0, :min => number, :max => number }
- delta = number - @categories[category][:mean]
-
- @categories[category][:hits] += 1
- @categories[category][:mean] += (delta / @categories[category][:hits])
- @categories[category][:sum_of_squares] += delta * (number - @categories[category][:mean])
- @categories[category][:sum] += number
- @categories[category][:min] = number if number < @categories[category][:min]
- @categories[category][:max] = number if number > @categories[category][:max]
- end
-
- # Get the number of hits of a specific category.
- # <tt>cat</tt> The category
- def hits(cat)
- @categories[cat][:hits]
- end
-
- # Get the total duration of a specific category.
- # <tt>cat</tt> The category
- def sum(cat)
- @categories[cat][:sum]
- end
-
- # Get the minimal duration of a specific category.
- # <tt>cat</tt> The category
- def min(cat)
- @categories[cat][:min]
- end
-
- # Get the maximum duration of a specific category.
- # <tt>cat</tt> The category
- def max(cat)
- @categories[cat][:max]
- end
-
- # Get the average duration of a specific category.
- # <tt>cat</tt> The category
- def mean(cat)
- @categories[cat][:mean]
- end
-
- # Get the standard deviation of the duration of a specific category.
- # <tt>cat</tt> The category
- def stddev(cat)
- Math.sqrt(variance(cat))
- end
-
- # Get the variance of the duration of a specific category.
- # <tt>cat</tt> The category
- def variance(cat)
- return 0.0 if @categories[cat][:hits] <= 1
- (@categories[cat][:sum_of_squares] / (@categories[cat][:hits] - 1))
- end
-
- # Get the average duration of a all categories.
- def mean_overall
- sum_overall / hits_overall
- end
-
- # Get the cumlative duration of a all categories.
- def sum_overall
- @categories.inject(0.0) { |sum, (name, cat)| sum + cat[:sum] }
- end
-
- # Get the total hits of a all categories.
- def hits_overall
- @categories.inject(0) { |sum, (name, cat)| sum + cat[:hits] }
- end
-
- # Return categories sorted by a given key.
- # <tt>by</tt> The key to sort on. This parameter can be omitted if a sorting block is provided instead
- def sorted_by(by = nil)
- if block_given?
- categories.sort { |a, b| yield(b[1]) <=> yield(a[1]) }
- else
- categories.sort { |a, b| send(by, b[0]) <=> send(by, a[0]) }
- end
- end
-
- # Returns the column header for a statistics table to report on the statistics result
- def statistics_header(options)
- [
- {:title => options[:title], :width => :rest},
- {:title => 'Hits', :align => :right, :highlight => (options[:highlight] == :hits), :min_width => 4},
- {:title => 'Sum', :align => :right, :highlight => (options[:highlight] == :sum), :min_width => 6},
- {:title => 'Mean', :align => :right, :highlight => (options[:highlight] == :mean), :min_width => 6},
- {:title => 'StdDev', :align => :right, :highlight => (options[:highlight] == :stddev), :min_width => 6},
- {:title => 'Min', :align => :right, :highlight => (options[:highlight] == :min), :min_width => 6},
- {:title => 'Max', :align => :right, :highlight => (options[:highlight] == :max), :min_width => 6}
- ]
- end
-
- # Returns a row of statistics information for a report table, given a category
- def statistics_row(cat)
- [cat, hits(cat), display_value(sum(cat)), display_value(mean(cat)), display_value(stddev(cat)),
- display_value(min(cat)), display_value(max(cat))]
- end
- end
end
\ No newline at end of file