Class: RequestLogAnalyzer::Request
- Inherits:
-
Object
- Object
- RequestLogAnalyzer::Request
- Includes:
- Converters
- Defined in:
- lib/request_log_analyzer/request.rb
Overview
The Request class represents a parsed request from the log file. Instances are created by the LogParser and are passed to the different aggregators, so they can do their aggregating work.
This class provides several methods to access the data that was parsed from the log files. Request#first(field_name) returns the first (only) value corresponding to the given field Request#every(field_name) returns all values corresponding to the given field name as array.
Direct Known Subclasses
FileFormat::AmazonS3::Request, FileFormat::Apache::Request, FileFormat::Merb::Request, FileFormat::Rails::Request
Defined Under Namespace
Modules: Converters
Instance Attribute Summary collapse
-
#attributes ⇒ Object
readonly
Returns the value of attribute attributes.
-
#file_format ⇒ Object
readonly
Returns the value of attribute file_format.
-
#lines ⇒ Object
readonly
Returns the value of attribute lines.
Class Method Summary collapse
-
.create(file_format, *hashes) ⇒ Object
Creates a new request that was parsed from the log with the given FileFormat.
Instance Method Summary collapse
-
#<<(hash) ⇒ Object
Adds another line to the request.
-
#add_line_hash(value_hash) ⇒ Object
Adds another line to the request using a plain hash.
-
#add_parsed_line(parsed_line) ⇒ Object
Adds another line to the request when it is parsed in the LogParser.
-
#completed? ⇒ Boolean
Checks whether this request is completed.
-
#empty? ⇒ Boolean
Returns true if this request does not yet contain any parsed lines.
-
#every(field) ⇒ Object
Returns an array of all the “field” values that were captured for this request.
-
#first(field) ⇒ Object
(also: #[])
Returns the value that was captured for the “field” of this request.
- #first_lineno ⇒ Object
-
#has_line_type?(line_type) ⇒ Boolean
(also: #=~)
Checks whether the given line type was parsed from the log file for this request.
-
#initialize(file_format, attributes = {}) ⇒ Request
constructor
Initializes a new Request object.
- #last_lineno ⇒ Object
-
#timestamp ⇒ Object
Returns the first timestamp encountered in a request.
-
#validate ⇒ Object
This function is called before a Requests is yielded.
Methods included from Converters
#convert_decimal, #convert_duration, #convert_eval, #convert_float, #convert_int, #convert_integer, #convert_string, #convert_sym, #convert_symbol, #convert_timestamp, #convert_traffic, #convert_value
Constructor Details
#initialize(file_format, attributes = {}) ⇒ Request
Initializes a new Request object. It will apply the the provided FileFormat module to this instance.
77 78 79 80 81 |
# File 'lib/request_log_analyzer/request.rb', line 77 def initialize(file_format, attributes = {}) @lines = [] @attributes = attributes @file_format = file_format end |
Instance Attribute Details
#attributes ⇒ Object (readonly)
Returns the value of attribute attributes.
73 74 75 |
# File 'lib/request_log_analyzer/request.rb', line 73 def attributes @attributes end |
#file_format ⇒ Object (readonly)
Returns the value of attribute file_format.
73 74 75 |
# File 'lib/request_log_analyzer/request.rb', line 73 def file_format @file_format end |
#lines ⇒ Object (readonly)
Returns the value of attribute lines.
73 74 75 |
# File 'lib/request_log_analyzer/request.rb', line 73 def lines @lines end |
Class Method Details
.create(file_format, *hashes) ⇒ Object
Creates a new request that was parsed from the log with the given FileFormat. The hashes that are passed to this function are added as lines to this request.
85 86 87 88 89 |
# File 'lib/request_log_analyzer/request.rb', line 85 def self.create(file_format, *hashes) request = self.new(file_format) hashes.flatten.each { |hash| request << hash } return request end |
Instance Method Details
#<<(hash) ⇒ Object
Adds another line to the request. This method switches automatically between the add_line_hash and add_parsed_line based on the keys of the provided hash.
113 114 115 |
# File 'lib/request_log_analyzer/request.rb', line 113 def <<(hash) hash[:line_definition] ? add_parsed_line(hash) : add_line_hash(hash) end |
#add_line_hash(value_hash) ⇒ Object
Adds another line to the request using a plain hash.
The line should be provides as a hash of the fields parsed from the line.
106 107 108 109 |
# File 'lib/request_log_analyzer/request.rb', line 106 def add_line_hash(value_hash) @lines << value_hash @attributes = value_hash.merge(@attributes) end |
#add_parsed_line(parsed_line) ⇒ Object
Adds another line to the request when it is parsed in the LogParser.
The line should be provided as a hash with the attributes line_definition, :captures, :lineno and :source set. This function is called from LogParser.
95 96 97 98 99 100 101 |
# File 'lib/request_log_analyzer/request.rb', line 95 def add_parsed_line (parsed_line) value_hash = parsed_line[:line_definition].convert_captured_values(parsed_line[:captures], self) value_hash[:line_type] = parsed_line[:line_definition].name value_hash[:lineno] = parsed_line[:lineno] value_hash[:source] = parsed_line[:source] add_line_hash(value_hash) end |
#completed? ⇒ Boolean
Checks whether this request is completed. A completed request contains both a parsed header line and a parsed footer line. Not that calling this function in single line mode will always return false.
148 149 150 151 152 153 154 155 156 |
# File 'lib/request_log_analyzer/request.rb', line 148 def completed? header_found, = false, false @lines.each do |line| line_def = file_format.line_definitions[line[:line_type]] header_found = true if line_def.header = true if line_def. end header_found && end |
#empty? ⇒ Boolean
Returns true if this request does not yet contain any parsed lines. This should only occur during parsing. An empty request should never be sent to the aggregators
141 142 143 |
# File 'lib/request_log_analyzer/request.rb', line 141 def empty? @lines.length == 0 end |
#every(field) ⇒ Object
Returns an array of all the “field” values that were captured for this request
135 136 137 |
# File 'lib/request_log_analyzer/request.rb', line 135 def every(field) @lines.inject([]) { |result, fields| result << fields[field] if fields.has_key?(field); result } end |
#first(field) ⇒ Object Also known as: []
Returns the value that was captured for the “field” of this request. This function will return the first value that was captured if the field was captured in multiple lines
128 129 130 |
# File 'lib/request_log_analyzer/request.rb', line 128 def first(field) @attributes[field] end |
#first_lineno ⇒ Object
167 168 169 |
# File 'lib/request_log_analyzer/request.rb', line 167 def first_lineno @lines.map { |line| line[:lineno] }.reject { |v| v.nil? }.min end |
#has_line_type?(line_type) ⇒ Boolean Also known as: =~
Checks whether the given line type was parsed from the log file for this request
118 119 120 121 |
# File 'lib/request_log_analyzer/request.rb', line 118 def has_line_type?(line_type) return true if @lines.length == 1 && @lines[0][:line_type] == line_type.to_sym @lines.detect { |l| l[:line_type] == line_type.to_sym } end |
#last_lineno ⇒ Object
171 172 173 |
# File 'lib/request_log_analyzer/request.rb', line 171 def last_lineno @lines.map { |line| line[:lineno] }.reject { |v| v.nil? }.max end |
#timestamp ⇒ Object
Returns the first timestamp encountered in a request.
163 164 165 |
# File 'lib/request_log_analyzer/request.rb', line 163 def first(:timestamp) end |
#validate ⇒ Object
This function is called before a Requests is yielded.
159 160 |
# File 'lib/request_log_analyzer/request.rb', line 159 def validate end |