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