Class: MongoRequestLogger::LogMessage

Inherits:
Object
  • Object
show all
Defined in:
lib/mongo_request_logger/log_message.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data = {}) ⇒ LogMessage

Returns a new instance of LogMessage.



8
9
10
# File 'lib/mongo_request_logger/log_message.rb', line 8

def initialize data={}
  @data = data
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



6
7
8
# File 'lib/mongo_request_logger/log_message.rb', line 6

def data
  @data
end

Instance Method Details

#[](param) ⇒ Object



12
13
14
# File 'lib/mongo_request_logger/log_message.rb', line 12

def [](param)
  @data[param.to_s]
end

#argsObject



117
118
119
120
121
# File 'lib/mongo_request_logger/log_message.rb', line 117

def args
  if self[:args]
    self[:args].map { |arg| arg.to_s.truncate(50) }
  end
end

#as_json(options = {}) ⇒ Object



147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/mongo_request_logger/log_message.rb', line 147

def as_json(options={})
  base = {
      id: id,
      time: time,
      path: path,
      referer: referer,
      tags: tags,
      user: user,
      ip: ip,
      response: response,
      user_agent: user_agent,
      runtime: runtime,
      timestamp: timestamp,
  }
  if options[:all]
    base.merge({
        extra: extra(%w(_id path timestamp response exception messages tags args)),
        messages: messages,
        exception: exception,
        data: @data,
    })
  else
    base
  end

end

#exceptionObject



106
107
108
109
110
111
112
113
114
115
# File 'lib/mongo_request_logger/log_message.rb', line 106

def exception
  if self[:exception]
    if self[:exception]['code']
      "#{self[:exception]['class']} - [#{self[:exception]['code']}] #{self[:exception]['message']}" if self[:exception]
    else
      "#{self[:exception]['class']} - #{self[:exception]['message']}" if self[:exception]
    end
  end

end

#extra(exclude = []) ⇒ Object



175
176
177
178
179
180
181
182
183
# File 'lib/mongo_request_logger/log_message.rb', line 175

def extra exclude=[]
  result = {}
  @data.each do |key, value|
    next if exclude.include? key.to_s
    next if value.blank?
    result[key.to_s.titlecase] = value
  end
  result
end

#idObject



16
17
18
# File 'lib/mongo_request_logger/log_message.rb', line 16

def id
  self[:_id].to_s
end

#ipObject



139
140
141
# File 'lib/mongo_request_logger/log_message.rb', line 139

def ip
  self[:ip] || ''
end

#messagesObject



86
87
88
# File 'lib/mongo_request_logger/log_message.rb', line 86

def messages
  self[:messages]
end

#paramsObject



123
124
125
126
127
128
129
130
131
132
133
# File 'lib/mongo_request_logger/log_message.rb', line 123

def params
  if self[:params].is_a? Array
    result = []
    self[:params].each do |key, value|
      result << "#{key}: #{value.inspect.truncate(100)}"
    end
    result.join(", ")
  elsif self[:params].is_a? String
    self[:params]
  end
end

#pathObject



49
50
51
# File 'lib/mongo_request_logger/log_message.rb', line 49

def path
  self[:path]
end

#refererObject



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/mongo_request_logger/log_message.rb', line 20

def referer
  referer = self[:referer]
  referer_data = {
    'annotation' => ''
  }

  # parse google adwords HTTP_REFERERs for actual referer page on display network
  if referer.nil? or referer.empty?
    referer_data['url'] = ''

  elsif referer.include? 'http://googleads.g.doubleclick.net'
    uri = URI(referer)
    params = ::Rack::Utils.parse_nested_query(uri.query)
    referer_data['url'] = params['url']
    referer_data['annotation'] = 'AdWords Display Network'

  # parse google adwords SERP clicks for actual SERP page
  elsif referer.include?('google') and referer.include?('aclk') and referer.include?('adurl')
    uri = URI(referer)
    params = ::Rack::Utils.parse_nested_query(uri.query)
    referer_data['url'] = "http://#{uri.host}/?q=#{CGI::escape(params['q'])}"
    referer_data['annotation'] = 'Adwords Google Search'

  else
    referer_data['url'] = referer
  end
  referer_data
end

#responseObject



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/mongo_request_logger/log_message.rb', line 90

def response
  response_code = self[:response]
  if self[:exception]
    response_description = self[:exception]['class']
  else
    response_class = Net::HTTPResponse::CODE_TO_OBJ[self[:response].to_s]
    if response_class
      response_description = response_class.name.split("::HTTP").last
    else
      response_description = 'OK'
    end
  end

  [response_code, response_description].select {|v| v != nil}.join(" - ")
end

#runtimeObject



53
54
55
# File 'lib/mongo_request_logger/log_message.rb', line 53

def runtime
  "%.3f" % (self[:runtime] / 1000.0) if self[:runtime]
end

#tagsObject



143
144
145
# File 'lib/mongo_request_logger/log_message.rb', line 143

def tags
  (self[:tags] || []) - %w(rack)
end

#timeObject



82
83
84
# File 'lib/mongo_request_logger/log_message.rb', line 82

def time
  self[:timestamp].getlocal.strftime("%y-%m-%d %H:%M:%S") if self[:timestamp]
end

#timestampObject



135
136
137
# File 'lib/mongo_request_logger/log_message.rb', line 135

def timestamp
  (self[:timestamp].to_f * 1000).to_i
end

#userObject

One of: ” ‘user_id’ ‘user_name’ ‘user_id - user_name’



62
63
64
65
66
67
68
69
70
71
72
# File 'lib/mongo_request_logger/log_message.rb', line 62

def user
  if self[:user_name] || self[:user_email]
    {
      name: (self[:user_name] or ''),
      email: (self[:user_email] or ''),
      email_md5: Digest::MD5.hexdigest((self[:user_email] or ''))
    }
  else
    nil
  end
end

#user_agentObject



78
79
80
# File 'lib/mongo_request_logger/log_message.rb', line 78

def user_agent
  self[:user_agent]
end

#user_idObject



74
75
76
# File 'lib/mongo_request_logger/log_message.rb', line 74

def user_id
  self[:user_id]
end