| 
									
										
										
										
											2015-02-12 13:01:05 +03:00
										 |  |  | module Connectors | 
					
						
							|  |  |  |   class Statistic < Base | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def initialize(db) | 
					
						
							| 
									
										
										
										
											2015-09-21 15:54:33 +03:00
										 |  |  |       super(db) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def collection_name | 
					
						
							|  |  |  |       'statistic' | 
					
						
							| 
									
										
										
										
											2015-02-12 13:01:05 +03:00
										 |  |  |     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) | 
					
						
							| 
									
										
										
										
											2015-09-21 15:54:33 +03:00
										 |  |  |         # asc by default and if order id invalid value, it is not a reason for response with code 500 | 
					
						
							|  |  |  |         #raise "Wrong sort order" unless %w(asc desc).include?(order) | 
					
						
							| 
									
										
										
										
											2015-09-17 13:15:19 +03:00
										 |  |  |         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 |