Class: Desiru::Persistence::Repositories::ApiRequestRepository
- Inherits:
-
BaseRepository
- Object
- BaseRepository
- Desiru::Persistence::Repositories::ApiRequestRepository
show all
- Defined in:
- lib/desiru/persistence/repositories/api_request_repository.rb
Overview
Repository for API request records
Instance Attribute Summary
#model_class
Instance Method Summary
collapse
#all, #count, #create, #delete?, #exists?, #find, #find_by, #paginate, #update, #where
Constructor Details
Returns a new instance of ApiRequestRepository.
10
11
12
|
# File 'lib/desiru/persistence/repositories/api_request_repository.rb', line 10
def initialize
super(Models::ApiRequest)
end
|
Instance Method Details
#average_response_time(path = nil) ⇒ Object
37
38
39
40
41
42
43
44
|
# File 'lib/desiru/persistence/repositories/api_request_repository.rb', line 37
def average_response_time(path = nil)
scope = dataset
scope = scope.where(path: path) if path
scope = scope.exclude(response_time: nil)
avg = scope.avg(:response_time)
avg&.round(3)
end
|
#by_status_code_range(min, max) ⇒ Object
25
26
27
|
# File 'lib/desiru/persistence/repositories/api_request_repository.rb', line 25
def by_status_code_range(min, max)
dataset.where(status_code: min..max).all
end
|
#create_from_rack_request(request, response) ⇒ Object
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/desiru/persistence/repositories/api_request_repository.rb', line 61
def create_from_rack_request(request, response)
create(
method: request.request_method,
path: request.path_info,
remote_ip: request.ip,
headers: (request),
params: request.params,
status_code: response.status,
response_body: extract_response_body(response),
response_time: response.['X-Runtime']&.to_f
)
end
|
#failed ⇒ Object
33
34
35
|
# File 'lib/desiru/persistence/repositories/api_request_repository.rb', line 33
def failed
dataset.where { status_code >= 400 }.all
end
|
#find_by_path(path) ⇒ Object
14
15
16
|
# File 'lib/desiru/persistence/repositories/api_request_repository.rb', line 14
def find_by_path(path)
dataset.where(path: path).all
end
|
#recent(limit = 10) ⇒ Object
18
19
20
21
22
23
|
# File 'lib/desiru/persistence/repositories/api_request_repository.rb', line 18
def recent(limit = 10)
dataset
.order(Sequel.desc(:created_at))
.limit(limit)
.all
end
|
#requests_per_minute(minutes_ago = 60) ⇒ Object
46
47
48
49
50
51
|
# File 'lib/desiru/persistence/repositories/api_request_repository.rb', line 46
def requests_per_minute(minutes_ago = 60)
since = Time.now - (minutes_ago * 60)
count = dataset.where { created_at >= since }.count
(count.to_f / minutes_ago).round(2)
end
|
#successful ⇒ Object
29
30
31
|
# File 'lib/desiru/persistence/repositories/api_request_repository.rb', line 29
def successful
by_status_code_range(200, 299)
end
|
#top_paths(limit = 10) ⇒ Object
53
54
55
56
57
58
59
|
# File 'lib/desiru/persistence/repositories/api_request_repository.rb', line 53
def top_paths(limit = 10)
dataset
.group_and_count(:path)
.order(Sequel.desc(:count))
.limit(limit)
.map { |row| { path: row[:path], count: row[:count] } }
end
|