2015-02-12 13:01:05 +03:00
|
|
|
module Connectors
|
|
|
|
|
class Statistic < Base
|
|
|
|
|
|
|
|
|
|
def initialize(db)
|
|
|
|
|
self.collection = db.collection('statistic')
|
|
|
|
|
end
|
|
|
|
|
|
2015-09-17 13:15:19 +03:00
|
|
|
def insert_statistic(user, path, method, body, response_code)
|
2015-02-12 13:01:05 +03:00
|
|
|
collection.insert(user: user, path: path, method: method, body: body, response_code: response_code, date: Time.now)
|
|
|
|
|
end
|
|
|
|
|
|
2015-09-17 13:15:19 +03:00
|
|
|
# supported options:
|
|
|
|
|
# user
|
|
|
|
|
# response_code (format: 200)
|
|
|
|
|
# method
|
|
|
|
|
# path_equal
|
|
|
|
|
# path_contains
|
|
|
|
|
# date_from (format: 2014-12-01 09:18:40 UTC)
|
|
|
|
|
# date_till (format: 2014-12-01 09:18:40 UTC)
|
|
|
|
|
# limit: default 20. Zero value is equal to no limit.
|
|
|
|
|
# sort_field: default 'date'. Could also be in [user, path, method, body, response_code, date].
|
|
|
|
|
# sort_order: default 'asc'. Could also be 'desc'
|
|
|
|
|
def search_statistic(filters={})
|
|
|
|
|
limit = filters[:limit] || 20
|
|
|
|
|
sort_field = filters[:sort_field] || 'date'
|
|
|
|
|
sort_order = mongo_sort_order(filters[:sort_order] || 'asc')
|
|
|
|
|
query = {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
query.deep_merge!( user_equal(filters[:user])) if filters[:user]
|
|
|
|
|
query.deep_merge!( method_equal(filters[:method])) if filters[:method]
|
|
|
|
|
query.deep_merge!( response_code_equal(filters[:response_code])) if filters[:response_code]
|
|
|
|
|
query.deep_merge!( path_equal(filters[:path_equal])) if filters[:path_equal]
|
|
|
|
|
query.deep_merge!( path_contains(filters[:path_contains])) if filters[:path_contains]
|
|
|
|
|
query.deep_merge!( date_from(filters[:date_from])) if filters[:date_from]
|
|
|
|
|
query.deep_merge!( date_till(filters[:date_till])) if filters[:date_till]
|
|
|
|
|
|
|
|
|
|
collection.
|
|
|
|
|
find(query, fields: {"_id" => false}).
|
|
|
|
|
limit(limit.to_i).
|
|
|
|
|
sort(sort_field => sort_order).
|
|
|
|
|
to_a
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
|
|
def mongo_sort_order(order)
|
|
|
|
|
raise "Wrong sort order" unless %w(asc desc).include?(order)
|
|
|
|
|
order == 'asc' ? 1 : -1
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def user_equal(user)
|
|
|
|
|
{user: user}
|
|
|
|
|
end
|
2015-02-12 13:01:05 +03:00
|
|
|
|
2015-09-17 13:15:19 +03:00
|
|
|
def method_equal(method)
|
|
|
|
|
{method: method}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def path_contains(path)
|
|
|
|
|
{path: Regexp.new(path, 'i')}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def path_equal(path)
|
|
|
|
|
{path: path}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def response_code_equal(response_code)
|
|
|
|
|
{response_code: response_code.to_i}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def date_from(date)
|
|
|
|
|
{date: {'$gte' => Time.parse(date)}}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def date_till(date)
|
|
|
|
|
{date: {'$lte' => Time.parse(date)}}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
2015-02-12 13:01:05 +03:00
|
|
|
end
|