Class: SimpleApm::SlowRequest

Inherits:
Object
  • Object
show all
Defined in:
app/models/simple_apm/slow_request.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request_id, during, action_name = nil) ⇒ SlowRequest

Returns a new instance of SlowRequest.



5
6
7
8
9
# File 'app/models/simple_apm/slow_request.rb', line 5

def initialize(request_id, during, action_name = nil)
  self.action_name = action_name
  self.request_id = request_id
  self.during = during
end

Instance Attribute Details

#action_nameObject

Returns the value of attribute action_name.



4
5
6
# File 'app/models/simple_apm/slow_request.rb', line 4

def action_name
  @action_name
end

#duringObject

Returns the value of attribute during.



4
5
6
# File 'app/models/simple_apm/slow_request.rb', line 4

def during
  @during
end

#request_idObject

Returns the value of attribute request_id.



4
5
6
# File 'app/models/simple_apm/slow_request.rb', line 4

def request_id
  @request_id
end

Class Method Details

.action_key(action_name = nil) ⇒ Object



69
70
71
# File 'app/models/simple_apm/slow_request.rb', line 69

def action_key(action_name = nil)
  SimpleApm::RedisKey["action-slow:#{action_name}"]
end

.keyObject



65
66
67
# File 'app/models/simple_apm/slow_request.rb', line 65

def key
  SimpleApm::RedisKey['slow-requests']
end

.list(limit = 100, offset = 0) ⇒ Array<SimpleApm::SlowRequest>

从慢到快的排序

Returns:



59
60
61
62
63
# File 'app/models/simple_apm/slow_request.rb', line 59

def list(limit = 100, offset = 0)
  SimpleApm::Redis.zrevrange(
    key, offset.to_i, limit.to_i - 1, with_scores: true
  ).map{ |x| SimpleApm::SlowRequest.new(x[0], x[1])}
end

.list_by_action(action_name, limit = 100, offset = 0) ⇒ Array<SimpleApm::SlowRequest>

从慢到快的排序

Returns:



51
52
53
54
55
# File 'app/models/simple_apm/slow_request.rb', line 51

def list_by_action(action_name, limit = 100, offset = 0)
  SimpleApm::Redis.zrevrange(
    action_key(action_name), offset, limit.to_i - 1, with_scores: true
  ).map{ |x| SimpleApm::SlowRequest.new(x[0], x[1], action_name)}
end

.update_action(action_name, during, request_id) ⇒ Boolean

Returns 是否插入成功.

Parameters:

  • action_name (String)

    请求名ControllerName#ActionName

  • during (Float)

    耗时

  • request_id (Hash)

    请求id

Returns:

  • (Boolean)

    是否插入成功



33
34
35
36
37
# File 'app/models/simple_apm/slow_request.rb', line 33

def update_action(action_name, during, request_id)
  SimpleApm::Redis.zadd(action_key(action_name), during, request_id)
  SimpleApm::Redis.zremrangebyrank(action_key(action_name), 0, -SimpleApm::Setting::ACTION_SLOW_REQUEST_LIMIT - 1)
  SimpleApm::Redis.zrank(action_key(action_name), request_id).present?
end

.update_by_request(info) ⇒ Object

存储最慢的1000个请求和每个action的最慢100次请求



23
24
25
26
27
# File 'app/models/simple_apm/slow_request.rb', line 23

def update_by_request(info)
  in_action = update_action(info[:action_name], info[:during], info[:request_id])
  in_slow_request = update_request(info[:during], info[:request_id])
  in_action || in_slow_request
end

.update_request(during, request_id) ⇒ Boolean

Returns 是否插入成功.

Parameters:

  • request_id (Hash)

    请求id

  • during (Float)

    耗时

Returns:

  • (Boolean)

    是否插入成功



42
43
44
45
46
47
# File 'app/models/simple_apm/slow_request.rb', line 42

def update_request(during, request_id)
  # 记录最慢请求列表5000个
  SimpleApm::Redis.zadd(key, during, request_id)
  SimpleApm::Redis.zremrangebyrank(key, 0, -SimpleApm::Setting::SLOW_ACTIONS_LIMIT - 1)
  SimpleApm::Redis.zrank(key, request_id).present?
end

Instance Method Details

#requestObject Also known as: info



12
13
14
# File 'app/models/simple_apm/slow_request.rb', line 12

def request
  @request_info ||= SimpleApm::Request.find(request_id)
end

#sqlsObject



17
18
19
# File 'app/models/simple_apm/slow_request.rb', line 17

def sqls
  @request_sqls ||= SimpleApm::Sql.find_by_request_id(request_id)
end