Class: AWS::S3::Logging::Log::Line
- Defined in:
- lib/aws/s3/logging.rb
Overview
Each line of a log exposes the raw line, but it also has method accessors for all the fields of the logged request.
The list of supported log line fields are listed in the S3 documentation: docs.amazonwebservices.com/AmazonS3/2006-03-01/LogFormat.html
line = log.lines.first
line.remote_ip
# => '72.21.206.5'
If a certain field does not apply to a given request (for example, the key
field does not apply to a bucket request), or if it was unknown or unavailable, it will return nil
.
line.operation
# => 'REST.GET.BUCKET'
line.key
# => nil
Constant Summary collapse
- DATE =
/\[([^\]]+)\]/
- QUOTED_STRING =
/"([^"]+)"/
- REST =
/(\S+)/
- LINE_SCANNER =
/#{DATE}|#{QUOTED_STRING}|#{REST}/
- @@decorators =
Hash.new {|hash, key| hash[key] = lambda {|entry| CoercibleString.coerce(entry)}}
- @@fields =
[]
Class Method Summary collapse
-
.field(name, offset, type = nil, &block) ⇒ Object
:nodoc:.
-
.typecast_time(datetime) ⇒ Object
Time.parse doesn’t like %d/%B/%Y:%H:%M:%S %z so we have to transform it unfortunately.
Instance Method Summary collapse
-
#attributes ⇒ Object
Returns all fields of the line in a hash of the form
:field_name => :field_value
. -
#initialize(line) ⇒ Line
constructor
:nodoc:.
Methods inherited from String
#previous, #previous!, #remove_extended, #remove_extended!, #tap, #to_header, #underscore, #valid_utf8?
Constructor Details
#initialize(line) ⇒ Line
:nodoc:
173 174 175 176 |
# File 'lib/aws/s3/logging.rb', line 173 def initialize(line) #:nodoc: super(line) @parts = parse end |
Class Method Details
.field(name, offset, type = nil, &block) ⇒ Object
:nodoc:
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/aws/s3/logging.rb', line 149 def field(name, offset, type = nil, &block) #:nodoc: decorators[name] = block if block_given? fields << name class_eval(<<-EVAL, __FILE__, __LINE__) def #{name} value = parts[#{offset} - 1] if value == '-' nil else self.class.decorators[:#{name}].call(value) end end memoized :#{name} EVAL end |
.typecast_time(datetime) ⇒ Object
Time.parse doesn’t like %d/%B/%Y:%H:%M:%S %z so we have to transform it unfortunately
166 167 168 169 170 |
# File 'lib/aws/s3/logging.rb', line 166 def typecast_time(datetime) #:nodoc: datetime.sub!(%r|^(\w{2})/(\w{3})/(\w{4})|, '\2 \1 \3') datetime.sub!(':', ' ') Time.parse(datetime) end |
Instance Method Details
#attributes ⇒ Object
Returns all fields of the line in a hash of the form :field_name => :field_value
.
line.attributes.values_at(:bucket, :key)
# => ['marcel', 'kiss.jpg']
200 201 202 203 204 205 |
# File 'lib/aws/s3/logging.rb', line 200 def attributes self.class.fields.inject({}) do |attribute_hash, field| attribute_hash[field] = send(field) attribute_hash end end |