Class: RequestLogAnalyzer::Tracker::HourlySpread
- Defined in:
- lib/request_log_analyzer/tracker/hourly_spread.rb
Overview
Determines the average hourly spread of the parsed requests. This spread is shown in a graph form.
Accepts the following options:
-
:if
Proc that has to return !nil for a request to be passed to the tracker. -
:line_type
The line type that contains the duration field (determined by the category proc). -
:output
Direct output here (defaults to STDOUT) -
:unless
Proc that has to return nil for a request to be passed to the tracker.
Expects the following items in the update request hash
-
:timestamp
in YYYYMMDDHHMMSS format.
Example output:
Requests graph - average per day per hour
--------------------------------------------------
7:00 - 330 hits : =======
8:00 - 704 hits : =================
9:00 - 830 hits : ====================
10:00 - 822 hits : ===================
11:00 - 823 hits : ===================
12:00 - 729 hits : =================
13:00 - 614 hits : ==============
14:00 - 690 hits : ================
15:00 - 492 hits : ===========
16:00 - 355 hits : ========
17:00 - 213 hits : =====
18:00 - 107 hits : ==
................
Instance Attribute Summary collapse
-
#first ⇒ Object
readonly
Returns the value of attribute first.
-
#last ⇒ Object
readonly
Returns the value of attribute last.
-
#request_time_graph ⇒ Object
readonly
Returns the value of attribute request_time_graph.
Attributes inherited from Base
Instance Method Summary collapse
-
#first_timestamp ⇒ Object
First timestamp encountered.
-
#last_timestamp ⇒ Object
Last timestamp encountered.
-
#prepare ⇒ Object
Check if timestamp field is set in the options and prepare the result time graph.
-
#report(output) ⇒ Object
Generate an hourly spread report to the given output object.
-
#timespan ⇒ Object
Difference between last and first timestamp.
-
#title ⇒ Object
Returns the title of this tracker for reports.
-
#to_yaml_object ⇒ Object
Returns the found frequencies per hour as a hash for YAML exporting.
-
#total_requests ⇒ Object
Total amount of requests tracked.
-
#update(request) ⇒ Object
Check if the timestamp in the request and store it.
Methods inherited from Base
#finalize, #initialize, #setup_should_update_checks!, #should_update?
Constructor Details
This class inherits a constructor from RequestLogAnalyzer::Tracker::Base
Instance Attribute Details
#first ⇒ Object (readonly)
Returns the value of attribute first.
33 34 35 |
# File 'lib/request_log_analyzer/tracker/hourly_spread.rb', line 33 def first @first end |
#last ⇒ Object (readonly)
Returns the value of attribute last.
33 34 35 |
# File 'lib/request_log_analyzer/tracker/hourly_spread.rb', line 33 def last @last end |
#request_time_graph ⇒ Object (readonly)
Returns the value of attribute request_time_graph.
33 34 35 |
# File 'lib/request_log_analyzer/tracker/hourly_spread.rb', line 33 def request_time_graph @request_time_graph end |
Instance Method Details
#first_timestamp ⇒ Object
First timestamp encountered
57 58 59 |
# File 'lib/request_log_analyzer/tracker/hourly_spread.rb', line 57 def DateTime.parse(@first.to_s, '%Y%m%d%H%M%S') rescue nil end |
#last_timestamp ⇒ Object
Last timestamp encountered
62 63 64 |
# File 'lib/request_log_analyzer/tracker/hourly_spread.rb', line 62 def DateTime.parse(@last.to_s, '%Y%m%d%H%M%S') rescue nil end |
#prepare ⇒ Object
Check if timestamp field is set in the options and prepare the result time graph.
36 37 38 39 |
# File 'lib/request_log_analyzer/tracker/hourly_spread.rb', line 36 def prepare [:field] ||= :timestamp @request_time_graph = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] end |
#report(output) ⇒ Object
Generate an hourly spread report to the given output object. Any options for the report should have been set during initialize. output
The output object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/request_log_analyzer/tracker/hourly_spread.rb', line 74 def report(output) output.title(title) if total_requests == 0 output << "None found.\n" return end days = [1, timespan].max output.table({}, {:align => :right}, {:type => :ratio, :width => :rest, :treshold => 0.15}) do |rows| @request_time_graph.each_with_index do |requests, index| ratio = requests.to_f / total_requests.to_f requests_per_day = (requests / days).ceil rows << ["#{index.to_s.rjust(3)}:00", "%d hits" % requests_per_day, ratio] end end end |
#timespan ⇒ Object
Difference between last and first timestamp.
67 68 69 |
# File 'lib/request_log_analyzer/tracker/hourly_spread.rb', line 67 def timespan - end |
#title ⇒ Object
Returns the title of this tracker for reports
93 94 95 |
# File 'lib/request_log_analyzer/tracker/hourly_spread.rb', line 93 def title [:title] || "Request distribution per hour" end |
#to_yaml_object ⇒ Object
Returns the found frequencies per hour as a hash for YAML exporting
98 99 100 101 102 103 104 |
# File 'lib/request_log_analyzer/tracker/hourly_spread.rb', line 98 def to_yaml_object yaml_object = {} @request_time_graph.each_with_index do |freq, hour| yaml_object["#{hour}:00 - #{hour+1}:00"] = freq end yaml_object end |
#total_requests ⇒ Object
Total amount of requests tracked
52 53 54 |
# File 'lib/request_log_analyzer/tracker/hourly_spread.rb', line 52 def total_requests @request_time_graph.inject(0) { |sum, value| sum + value } end |
#update(request) ⇒ Object
Check if the timestamp in the request and store it. request
The request.
43 44 45 46 47 48 49 |
# File 'lib/request_log_analyzer/tracker/hourly_spread.rb', line 43 def update(request) = request.first([:field]) @request_time_graph[.to_s[8..9].to_i] +=1 @first = if @first.nil? || < @first @last = if @last.nil? || > @last end |