mongodb_logger 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +3 -3
- data/CHANGELOG.md +4 -0
- data/README.md +13 -1
- data/Rakefile +22 -3
- data/features/mongodb_logger_web.feature +14 -0
- data/features/step_definitions/mongodb_logger_web_steps.rb +45 -0
- data/lib/mongodb_logger/server/coffee/logs.coffee +75 -19
- data/lib/mongodb_logger/server/public/javascripts/logs.js +1 -1
- data/lib/mongodb_logger/server_config.rb +33 -1
- data/lib/mongodb_logger/version.rb +1 -1
- data/mongodb_logger.gemspec +8 -6
- data/spec/javascripts/MongodbLoggerMainSpec.js +13 -0
- data/spec/javascripts/helpers/SpecHelper.js +3 -0
- data/spec/javascripts/support/jasmine.yml +77 -0
- data/spec/javascripts/support/jasmine_config.rb +23 -0
- data/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/test/config/samples/server_config.yml +3 -0
- data/test/test.sh +5 -3
- metadata +104 -44
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# MongodbLogger [![Build Status](https://secure.travis-ci.org/le0pard/mongodb_logger.png)](http://travis-ci.org/le0pard/mongodb_logger)
|
1
|
+
# MongodbLogger [![Build Status](https://secure.travis-ci.org/le0pard/mongodb_logger.png)](http://travis-ci.org/le0pard/mongodb_logger) [![Dependency Status](https://gemnasium.com/le0pard/mongodb_logger.png)](https://gemnasium.com/le0pard/mongodb_logger)
|
2
2
|
|
3
3
|
MongodbLogger is a alternative logger for Rails 3, which log all requests of you application into MongoDB database.
|
4
4
|
It:
|
@@ -17,6 +17,11 @@ It:
|
|
17
17
|
1. Add the following line to your ApplicationController:
|
18
18
|
|
19
19
|
include MongodbLogger::Base
|
20
|
+
|
21
|
+
1. For use with Heroku you need to prevent the rails\_log\_stdout plugin from being added by Heroku:
|
22
|
+
|
23
|
+
mkdir vendor/plugins/rails_log_stdout
|
24
|
+
touch vendor/plugins/rails_log_stdout/.gitkeep
|
20
25
|
|
21
26
|
1. Add MongodbLogger settings to database.yml for each environment in which you want to use the MongodbLogger. The MongodbLogger will also
|
22
27
|
look for a separate mongodb\_logger.yml or mongoid.yml (if you are using mongoid) before looking in database.yml.
|
@@ -136,6 +141,13 @@ It:
|
|
136
141
|
|
137
142
|
MONGODBLOGGERCONFIG=examples/server_config.yml unicorn
|
138
143
|
|
144
|
+
## Demo Application with MongodbLogger
|
145
|
+
|
146
|
+
Demo: [http://demo-mongodb-logger.catware.org/](http://demo-mongodb-logger.catware.org/)
|
147
|
+
|
148
|
+
Demo Sources: [https://github.com/le0pard/mongodb_logger_example_heroku](https://github.com/le0pard/mongodb_logger_example_heroku)
|
149
|
+
|
150
|
+
|
139
151
|
## Querying via the Rails console
|
140
152
|
|
141
153
|
And now, for a couple quick examples on getting ahold of this log data...
|
data/Rakefile
CHANGED
@@ -25,7 +25,8 @@ namespace :js do
|
|
25
25
|
|
26
26
|
Dir.foreach(source) do |cf|
|
27
27
|
unless cf == '.' || cf == '..'
|
28
|
-
|
28
|
+
js_compiled = CoffeeScript.compile File.read("#{source}#{cf}")
|
29
|
+
js = Uglifier.compile js_compiled
|
29
30
|
open "#{javascripts}#{cf.gsub('.coffee', '.js')}", 'w' do |f|
|
30
31
|
f.puts js
|
31
32
|
end
|
@@ -49,10 +50,10 @@ task :clean do
|
|
49
50
|
exec "rm -rf tmp"
|
50
51
|
end
|
51
52
|
|
52
|
-
desc 'Test
|
53
|
+
desc 'Test unit.'
|
53
54
|
Rake::TestTask.new(:test) do |test|
|
54
55
|
test.libs << 'lib' << 'test'
|
55
|
-
test.
|
56
|
+
test.test_files = ['test/unit/mongodb_logger_test.rb']
|
56
57
|
test.verbose = true
|
57
58
|
end
|
58
59
|
|
@@ -142,6 +143,24 @@ def define_rails_cucumber_tasks(additional_cucumber_args = '')
|
|
142
143
|
end
|
143
144
|
end
|
144
145
|
|
146
|
+
def define_web_cucumber_tasks(additional_cucumber_args = '')
|
147
|
+
desc "Test web of the gem"
|
148
|
+
task :web do
|
149
|
+
puts "Testing Web"
|
150
|
+
system("cucumber --format #{ENV['CUCUMBER_FORMAT'] || 'progress'} #{additional_cucumber_args} features/mongodb_logger_web.feature")
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
145
154
|
namespace :cucumber do
|
146
155
|
define_rails_cucumber_tasks
|
156
|
+
define_web_cucumber_tasks
|
157
|
+
end
|
158
|
+
|
159
|
+
begin
|
160
|
+
require 'jasmine'
|
161
|
+
load 'jasmine/tasks/jasmine.rake'
|
162
|
+
rescue LoadError
|
163
|
+
task :jasmine do
|
164
|
+
abort "Jasmine is not available. In order to run jasmine, you must: (sudo) gem install jasmine"
|
165
|
+
end
|
147
166
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Feature: Install MongodbLogger Web and test it
|
2
|
+
|
3
|
+
Scenario: Main page
|
4
|
+
Given homepage
|
5
|
+
Then I should see text that no logs in system
|
6
|
+
|
7
|
+
Scenario: Tail logs buttons
|
8
|
+
Given homepage
|
9
|
+
And I should see start tail button
|
10
|
+
When I click on start tail button
|
11
|
+
Then I should see stop tails button
|
12
|
+
And box with time of last log tail
|
13
|
+
When I click on stop tail button
|
14
|
+
Then I should see start tail button
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'active_support/core_ext/string/inflections'
|
2
|
+
require 'mongodb_logger/server'
|
3
|
+
require 'capybara/cucumber'
|
4
|
+
|
5
|
+
include Capybara::DSL
|
6
|
+
|
7
|
+
Before do
|
8
|
+
MongodbLogger::ServerConfig.set_config_for_testing(File.join(PROJECT_ROOT, 'test/config/samples/server_config.yml'))
|
9
|
+
Capybara.app = MongodbLogger::Server
|
10
|
+
end
|
11
|
+
|
12
|
+
After do
|
13
|
+
MongodbLogger::ServerConfig.collection.drop
|
14
|
+
end
|
15
|
+
|
16
|
+
Given /^homepage$/ do
|
17
|
+
visit "/"
|
18
|
+
end
|
19
|
+
|
20
|
+
Then /^I should see text that no logs in system$/ do
|
21
|
+
page.has_selector?('div', :text => 'No logs found, try to filter out the other parameters', :visible => true)
|
22
|
+
end
|
23
|
+
|
24
|
+
Given /^I should see start tail button$/ do
|
25
|
+
page.has_link?('tail_logs_link', :visible => true)
|
26
|
+
page.has_link?('tail_logs_stop_link', :visible => false)
|
27
|
+
end
|
28
|
+
|
29
|
+
When /^I click on start tail button$/ do
|
30
|
+
click_link('tail_logs_link')
|
31
|
+
end
|
32
|
+
|
33
|
+
Then /^I should see stop tails button$/ do
|
34
|
+
page.has_link?('tail_logs_link', :visible => false)
|
35
|
+
page.has_link?('tail_logs_stop_link', :visible => true)
|
36
|
+
end
|
37
|
+
|
38
|
+
Then /^box with time of last log tail$/ do
|
39
|
+
page.has_selector?('span', :id => 'tail_logs_time', :visible => true)
|
40
|
+
end
|
41
|
+
|
42
|
+
When /^I click on stop tail button$/ do
|
43
|
+
click_link('tail_logs_stop_link')
|
44
|
+
end
|
45
|
+
|
@@ -1,7 +1,7 @@
|
|
1
1
|
$ ->
|
2
|
-
|
2
|
+
MongodbLoggerMain.init()
|
3
3
|
|
4
|
-
|
4
|
+
window.MongodbLoggerMain =
|
5
5
|
tail_logs_url: null
|
6
6
|
tail_log_started: false
|
7
7
|
log_info_offset: null
|
@@ -14,22 +14,22 @@ MongodbLoggerJS =
|
|
14
14
|
$('#ajax_loader').hide()
|
15
15
|
|
16
16
|
$(document).on 'click', '#tail_logs_link', (event) =>
|
17
|
-
|
17
|
+
MongodbLoggerMain.tail_logs_url = $(event.target).attr('data-url')
|
18
18
|
$('#tail_logs_block').addClass('started')
|
19
|
-
|
19
|
+
MongodbLoggerMain.tail_logs(null)
|
20
20
|
return false
|
21
21
|
$(document).on 'click', '#tail_logs_stop_link', (event) =>
|
22
|
-
|
22
|
+
MongodbLoggerMain.tail_log_started = false
|
23
23
|
$('#tail_logs_block').removeClass('started')
|
24
24
|
return false
|
25
25
|
|
26
26
|
$(document).on 'click', '.log_info', (event) =>
|
27
27
|
elm_obj = $(event.target)
|
28
|
-
url = elm_obj.
|
29
|
-
url = elm_obj.
|
28
|
+
url = elm_obj.data('url')
|
29
|
+
url = elm_obj.parent('tr').data('url') if !url?
|
30
30
|
if url?
|
31
31
|
elm_obj.parents('table').find('tr').removeClass('current')
|
32
|
-
elm_obj.
|
32
|
+
elm_obj.parent('tr').addClass('current')
|
33
33
|
$('#log_info').load(url)
|
34
34
|
return false
|
35
35
|
# filter tougle
|
@@ -89,12 +89,26 @@ MongodbLoggerJS =
|
|
89
89
|
elm_obj.addClass('active')
|
90
90
|
$('.' + tab).removeClass('hidden')
|
91
91
|
|
92
|
+
# analytic form
|
92
93
|
$(document).on 'submit', '#analyticForm', (event) =>
|
93
94
|
element = $('#analyticForm')
|
94
95
|
url = element.attr('action')
|
95
96
|
data = element.serializeArray()
|
96
97
|
$('#analyticData').load url, data
|
97
98
|
return false
|
99
|
+
|
100
|
+
# keydown log
|
101
|
+
$(document).on 'keydown', '*', (event) =>
|
102
|
+
console.log event.keyCode
|
103
|
+
switch event.keyCode
|
104
|
+
when 37 # left
|
105
|
+
MongodbLoggerMain.move_by_logs('begin')
|
106
|
+
when 38 # up
|
107
|
+
MongodbLoggerMain.move_by_logs('up')
|
108
|
+
when 39 # right
|
109
|
+
MongodbLoggerMain.move_by_logs('end')
|
110
|
+
when 40 # down
|
111
|
+
MongodbLoggerMain.move_by_logs('down')
|
98
112
|
|
99
113
|
# init pjax
|
100
114
|
this.init_pjax()
|
@@ -107,12 +121,12 @@ MongodbLoggerJS =
|
|
107
121
|
$('body').bind 'pjax:end', () =>
|
108
122
|
$('#ajax_loader').hide()
|
109
123
|
# stop tailing
|
110
|
-
|
124
|
+
MongodbLoggerMain.tail_log_started = false
|
111
125
|
# scroll on top
|
112
126
|
if ($(window).scrollTop() > 100)
|
113
127
|
$('html, body').stop().animate({ scrollTop: 0 }, 'slow')
|
114
128
|
# init pages
|
115
|
-
|
129
|
+
MongodbLoggerMain.init_on_pages()
|
116
130
|
|
117
131
|
init_on_pages: ->
|
118
132
|
# code highlight
|
@@ -127,23 +141,23 @@ MongodbLoggerJS =
|
|
127
141
|
|
128
142
|
# log info window
|
129
143
|
if $("#log_info").length > 0
|
130
|
-
|
144
|
+
MongodbLoggerMain.log_info_offset = $("#log_info").offset()
|
131
145
|
$(window).scroll =>
|
132
|
-
if $(window).scrollTop() >
|
146
|
+
if $(window).scrollTop() > MongodbLoggerMain.log_info_offset.top
|
133
147
|
$("#log_info").stop().animate
|
134
|
-
marginTop: $(window).scrollTop() -
|
148
|
+
marginTop: $(window).scrollTop() - MongodbLoggerMain.log_info_offset.top + MongodbLoggerMain.log_info_padding
|
135
149
|
else
|
136
150
|
$("#log_info").stop().animate
|
137
151
|
marginTop: 0
|
138
152
|
|
139
153
|
tail_logs: (log_last_id) ->
|
140
|
-
url =
|
154
|
+
url = MongodbLoggerMain.tail_logs_url
|
141
155
|
if log_last_id? && log_last_id.length > 0
|
142
|
-
url =
|
156
|
+
url = MongodbLoggerMain.tail_logs_url + "/" + log_last_id
|
143
157
|
else
|
144
|
-
|
158
|
+
MongodbLoggerMain.tail_log_started = true
|
145
159
|
log_last_id = ""
|
146
|
-
if
|
160
|
+
if MongodbLoggerMain.tail_log_started
|
147
161
|
$.ajax
|
148
162
|
url: url
|
149
163
|
dataType: "json"
|
@@ -158,6 +172,48 @@ MongodbLoggerJS =
|
|
158
172
|
$('#logs_list tr:first').after(elements).effect("highlight", {}, 1000)
|
159
173
|
if data.collection_stats && $("#collection_stats").length > 0
|
160
174
|
$("#collection_stats").html(data.collection_stats)
|
161
|
-
if
|
162
|
-
fcallback = ->
|
175
|
+
if MongodbLoggerMain.tail_log_started
|
176
|
+
fcallback = -> MongodbLoggerMain.tail_logs(log_last_id)
|
163
177
|
setTimeout fcallback, 2000
|
178
|
+
|
179
|
+
move_by_logs: (direction) ->
|
180
|
+
if $('#logs_list').length > 0 && $('#logs_list').find('tr.current').length > 0
|
181
|
+
current_element = $('#logs_list').find('tr.current')
|
182
|
+
switch direction
|
183
|
+
when 'begin'
|
184
|
+
element = $('#logs_list tr:first').next("tr")
|
185
|
+
if element.length > 0
|
186
|
+
element.find('td:first').trigger('click')
|
187
|
+
$(window).scrollTop(element.height() + element.offset().top - 100)
|
188
|
+
return false
|
189
|
+
when 'end'
|
190
|
+
element = $('#logs_list tr:last')
|
191
|
+
if element.length > 0
|
192
|
+
element.find('td:first').trigger('click')
|
193
|
+
$(window).scrollTop(element.height() + element.offset().top - 100)
|
194
|
+
return false
|
195
|
+
when 'down'
|
196
|
+
element = current_element.next("tr")
|
197
|
+
if element.length > 0
|
198
|
+
element.find('td:first').trigger('click')
|
199
|
+
if MongodbLoggerMain.is_scrolled_into_view(element)
|
200
|
+
$(window).scrollTop($(window).scrollTop() + element.height())
|
201
|
+
else
|
202
|
+
$(window).scrollTop(element.height() + element.offset().top - 100)
|
203
|
+
return false
|
204
|
+
when 'up'
|
205
|
+
element = current_element.prev("tr")
|
206
|
+
if element.length > 0
|
207
|
+
element.find('td:first').trigger('click')
|
208
|
+
if MongodbLoggerMain.is_scrolled_into_view(element)
|
209
|
+
$(window).scrollTop($(window).scrollTop() - element.height())
|
210
|
+
else
|
211
|
+
$(window).scrollTop(element.height() + element.offset().top - 100)
|
212
|
+
return false
|
213
|
+
|
214
|
+
is_scrolled_into_view: (elem) ->
|
215
|
+
docViewTop = $(window).scrollTop()
|
216
|
+
docViewBottom = docViewTop + $(window).height()
|
217
|
+
elemTop = $(elem).offset().top
|
218
|
+
elemBottom = elemTop + $(elem).height()
|
219
|
+
return ((docViewTop < elemTop) && (docViewBottom > elemBottom))
|
@@ -1 +1 @@
|
|
1
|
-
(
|
1
|
+
$(function(){return MongodbLoggerMain.init()}),window.MongodbLoggerMain={tail_logs_url:null,tail_log_started:!1,log_info_offset:null,log_info_padding:15,init:function(){var a=this;return $(document).ajaxStart(function(){return $("#ajax_loader").show()}),$(document).ajaxStop(function(){return $("#ajax_loader").hide()}),$(document).on("click","#tail_logs_link",function(a){return MongodbLoggerMain.tail_logs_url=$(a.target).attr("data-url"),$("#tail_logs_block").addClass("started"),MongodbLoggerMain.tail_logs(null),!1}),$(document).on("click","#tail_logs_stop_link",function(a){return MongodbLoggerMain.tail_log_started=!1,$("#tail_logs_block").removeClass("started"),!1}),$(document).on("click",".log_info",function(a){var b,c;return b=$(a.target),c=b.data("url"),c==null&&(c=b.parent("tr").data("url")),c!=null&&(b.parents("table").find("tr").removeClass("current"),b.parent("tr").addClass("current"),$("#log_info").load(c)),!1}),$(document).on("click","div.filter-toggle",function(a){return $("div.filter").slideToggle(),$("div.filter-toggle span.arrow-down").toggleClass("rotate")}),$(document).on("click","#add_more_filter",function(a){var b;return b=$(a.target).attr("href"),$.ajax({url:b,success:function(a){var b;return b=$("<li></li>").html(a),$("#more_filter_list").append(b)}}),!1}),$(document).on("change","select.filter_type",function(a){var b,c;return b=$(a.target),c=b.attr("rel")+"/"+b.val(),$.ajax({url:c,dataType:"json",success:function(a){var c,d,e=this;c="",d="",$.each(a.conditions,function(a,b){return c+='<option value="'+b+'">'+b+"</option>"}),b.parents("div.filter_block").find("select.filter_conditions").empty().append(c),a.values.length>0?(d='<select id="filter[more][]_value" name="filter[more][][value]">',$.each(a.values,function(a,b){return d+='<option value="'+b+'">'+b+"</option>"}),d+="</select>"):d='<input type="text" name="filter[more][][value]" value="" placeholder="value">',b.parents("div.filter_block").find("div.filter_values").html(d);if("date"===b.val())return b.parents("div.filter_block").find("div.filter_values input").datepicker({dateFormat:"yy-mm-dd",changeMonth:!0,changeYear:!0,yearRange:"c-50:c+10"})}}),!1}),$(document).on("click",".close_more_filter",function(a){return $(a.target).parents("li").remove(),!1}),$(document).on("click","li.message_tab",function(a){var b,c;b=$(a.target),c=b.attr("data-tab");if(c!=null)return $("li.message_tab").removeClass("active"),$("pre.tab_content").addClass("hidden"),b.addClass("active"),$("."+c).removeClass("hidden")}),$(document).on("submit","#analyticForm",function(a){var b,c,d;return c=$("#analyticForm"),d=c.attr("action"),b=c.serializeArray(),$("#analyticData").load(d,b),!1}),$(document).on("keydown","*",function(a){console.log(a.keyCode);switch(a.keyCode){case 37:return MongodbLoggerMain.move_by_logs("begin");case 38:return MongodbLoggerMain.move_by_logs("up");case 39:return MongodbLoggerMain.move_by_logs("end");case 40:return MongodbLoggerMain.move_by_logs("down")}}),this.init_pjax(),this.init_on_pages()},init_pjax:function(){var a=this;return $("a[data-pjax]").pjax(),$("body").bind("pjax:start",function(){return $("#ajax_loader").show()}),$("body").bind("pjax:end",function(){return $("#ajax_loader").hide(),MongodbLoggerMain.tail_log_started=!1,$(window).scrollTop()>100&&$("html, body").stop().animate({scrollTop:0},"slow"),MongodbLoggerMain.init_on_pages()})},init_on_pages:function(){var a=this;$("pre code").each(function(a,b){return hljs.highlightBlock(b," ")}),$(".datepicker, .filter_values input.date").datepicker({dateFormat:"yy-mm-dd",changeMonth:!0,changeYear:!0,yearRange:"c-50:c+10"});if($("#log_info").length>0)return MongodbLoggerMain.log_info_offset=$("#log_info").offset(),$(window).scroll(function(){return $(window).scrollTop()>MongodbLoggerMain.log_info_offset.top?$("#log_info").stop().animate({marginTop:$(window).scrollTop()-MongodbLoggerMain.log_info_offset.top+MongodbLoggerMain.log_info_padding}):$("#log_info").stop().animate({marginTop:0})})},tail_logs:function(a){var b;b=MongodbLoggerMain.tail_logs_url,a!=null&&a.length>0?b=MongodbLoggerMain.tail_logs_url+"/"+a:(MongodbLoggerMain.tail_log_started=!0,a="");if(MongodbLoggerMain.tail_log_started)return $.ajax({url:b,dataType:"json",success:function(b){var c,d;b.time&&($("#tail_logs_time").text(b.time),b.log_last_id!=null&&(a=b.log_last_id),b.content!=null&&b.content.length>0&&(c=$(b.content),c.addClass("newlog"),$("#logs_list tr:first").after(c).effect("highlight",{},1e3)),b.collection_stats&&$("#collection_stats").length>0&&$("#collection_stats").html(b.collection_stats));if(MongodbLoggerMain.tail_log_started)return d=function(){return MongodbLoggerMain.tail_logs(a)},setTimeout(d,2e3)}})},move_by_logs:function(a){var b,c;if($("#logs_list").length>0&&$("#logs_list").find("tr.current").length>0){b=$("#logs_list").find("tr.current");switch(a){case"begin":c=$("#logs_list tr:first").next("tr");if(c.length>0)return c.find("td:first").trigger("click"),$(window).scrollTop(c.height()+c.offset().top-100),!1;break;case"end":c=$("#logs_list tr:last");if(c.length>0)return c.find("td:first").trigger("click"),$(window).scrollTop(c.height()+c.offset().top-100),!1;break;case"down":c=b.next("tr");if(c.length>0)return c.find("td:first").trigger("click"),MongodbLoggerMain.is_scrolled_into_view(c)?$(window).scrollTop($(window).scrollTop()+c.height()):$(window).scrollTop(c.height()+c.offset().top-100),!1;break;case"up":c=b.prev("tr");if(c.length>0)return c.find("td:first").trigger("click"),MongodbLoggerMain.is_scrolled_into_view(c)?$(window).scrollTop($(window).scrollTop()-c.height()):$(window).scrollTop(c.height()+c.offset().top-100),!1}}},is_scrolled_into_view:function(a){var b,c,d,e;return c=$(window).scrollTop(),b=c+$(window).height(),e=$(a).offset().top,d=e+$(a).height(),c<e&&b>d}}
|
@@ -3,9 +3,14 @@ require 'erb'
|
|
3
3
|
require 'active_support'
|
4
4
|
require 'active_support/core_ext'
|
5
5
|
|
6
|
+
# TODO: Dry this class with logger class
|
6
7
|
module MongodbLogger
|
7
8
|
class ServerConfig
|
9
|
+
|
10
|
+
DEFAULT_COLLECTION_SIZE = 250.megabytes
|
11
|
+
|
8
12
|
class << self
|
13
|
+
|
9
14
|
def set_config(config_path)
|
10
15
|
if File.file?(config_path)
|
11
16
|
config_file = File.new(config_path)
|
@@ -26,13 +31,40 @@ module MongodbLogger
|
|
26
31
|
@authenticated = @db.authenticate(@db_configuration['username'],
|
27
32
|
@db_configuration['password'])
|
28
33
|
end
|
29
|
-
|
34
|
+
|
35
|
+
set_collection
|
36
|
+
end
|
37
|
+
|
38
|
+
def set_config_for_testing(config_path)
|
39
|
+
set_config(config_path)
|
40
|
+
create_collection unless @db.collection_names.include?(@db_configuration["collection"])
|
41
|
+
set_collection
|
42
|
+
end
|
43
|
+
|
44
|
+
def create_collection
|
45
|
+
capsize = DEFAULT_COLLECTION_SIZE
|
46
|
+
capsize = @db_configuration['capsize'].to_i if @db_configuration['capsize']
|
47
|
+
@db.create_collection(@db_configuration["collection"],
|
48
|
+
{:capped => true, :size => capsize})
|
30
49
|
end
|
31
50
|
|
51
|
+
|
52
|
+
def set_collection
|
53
|
+
@collection = @db[@db_configuration["collection"]]
|
54
|
+
end
|
55
|
+
|
32
56
|
def get_config
|
33
57
|
@db_configuration
|
34
58
|
end
|
35
59
|
|
60
|
+
def authenticated?
|
61
|
+
@authenticated
|
62
|
+
end
|
63
|
+
|
64
|
+
def collection_name
|
65
|
+
@db_configuration["collection"]
|
66
|
+
end
|
67
|
+
|
36
68
|
def db
|
37
69
|
@db
|
38
70
|
end
|
data/mongodb_logger.gemspec
CHANGED
@@ -11,17 +11,19 @@ Gem::Specification.new do |gem|
|
|
11
11
|
gem.extra_rdoc_files = [ "LICENSE", "README.md" ]
|
12
12
|
gem.rdoc_options = ["--charset=UTF-8"]
|
13
13
|
|
14
|
-
gem.add_development_dependency "
|
14
|
+
gem.add_development_dependency "jasmine", ">= 1.0.0"
|
15
|
+
gem.add_development_dependency "rspec", ">= 2.7.0"
|
15
16
|
gem.add_development_dependency "shoulda", ">= 2.0.0"
|
16
|
-
gem.add_development_dependency "mocha", "
|
17
|
+
gem.add_development_dependency "mocha", ">= 0.10.0"
|
17
18
|
gem.add_development_dependency "cucumber", "~> 1.1.2"
|
19
|
+
gem.add_development_dependency "capybara", "~> 1.1.2"
|
18
20
|
gem.add_development_dependency "coffee-script", "~> 2.2.0"
|
19
|
-
gem.add_development_dependency "uglifier", "
|
20
|
-
gem.add_development_dependency "therubyracer", "
|
21
|
+
gem.add_development_dependency "uglifier", ">= 1.2.0"
|
22
|
+
gem.add_development_dependency "therubyracer", ">= 0.9.9"
|
21
23
|
|
22
24
|
gem.add_runtime_dependency "rake", "~> 0.9.0"
|
23
|
-
gem.add_runtime_dependency "mongo", "~> 1.
|
24
|
-
gem.add_runtime_dependency "bson_ext", "~> 1.
|
25
|
+
gem.add_runtime_dependency "mongo", "~> 1.5.2"
|
26
|
+
gem.add_runtime_dependency "bson_ext", "~> 1.5.2"
|
25
27
|
gem.add_runtime_dependency "i18n", ">= 0.4.1"
|
26
28
|
gem.add_runtime_dependency "json", "~> 1.6.1"
|
27
29
|
gem.add_runtime_dependency "activesupport", ">= 3.0.0"
|
@@ -0,0 +1,13 @@
|
|
1
|
+
describe("MongodbLoggerMain", function() {
|
2
|
+
|
3
|
+
beforeEach(function() {
|
4
|
+
MongodbLoggerMain.init();
|
5
|
+
});
|
6
|
+
|
7
|
+
describe("log_info_padding", function() {
|
8
|
+
it("should be 15", function() {
|
9
|
+
expect(MongodbLoggerMain.log_info_padding).toEqual(15);
|
10
|
+
});
|
11
|
+
});
|
12
|
+
|
13
|
+
});
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# src_files
|
2
|
+
#
|
3
|
+
# Return an array of filepaths relative to src_dir to include before jasmine specs.
|
4
|
+
# Default: []
|
5
|
+
#
|
6
|
+
# EXAMPLE:
|
7
|
+
#
|
8
|
+
# src_files:
|
9
|
+
# - lib/source1.js
|
10
|
+
# - lib/source2.js
|
11
|
+
# - dist/**/*.js
|
12
|
+
#
|
13
|
+
src_files:
|
14
|
+
- lib/mongodb_logger/server/public/javascripts/vendors/jquery-1.7.1.min.js
|
15
|
+
- lib/mongodb_logger/server/public/javascripts/vendors/jquery-ui-1.8.16.min.js
|
16
|
+
- lib/mongodb_logger/server/public/javascripts/vendors/jquery.pjax.min.js
|
17
|
+
- lib/mongodb_logger/server/public/javascripts/vendors/highlight.pack.js
|
18
|
+
- lib/mongodb_logger/server/public/javascripts/logs.js
|
19
|
+
|
20
|
+
# stylesheets
|
21
|
+
#
|
22
|
+
# Return an array of stylesheet filepaths relative to src_dir to include before jasmine specs.
|
23
|
+
# Default: []
|
24
|
+
#
|
25
|
+
# EXAMPLE:
|
26
|
+
#
|
27
|
+
# stylesheets:
|
28
|
+
# - css/style.css
|
29
|
+
# - stylesheets/*.css
|
30
|
+
#
|
31
|
+
stylesheets:
|
32
|
+
|
33
|
+
# helpers
|
34
|
+
#
|
35
|
+
# Return an array of filepaths relative to spec_dir to include before jasmine specs.
|
36
|
+
# Default: ["helpers/**/*.js"]
|
37
|
+
#
|
38
|
+
# EXAMPLE:
|
39
|
+
#
|
40
|
+
# helpers:
|
41
|
+
# - helpers/**/*.js
|
42
|
+
#
|
43
|
+
helpers:
|
44
|
+
|
45
|
+
# spec_files
|
46
|
+
#
|
47
|
+
# Return an array of filepaths relative to spec_dir to include.
|
48
|
+
# Default: ["**/*[sS]pec.js"]
|
49
|
+
#
|
50
|
+
# EXAMPLE:
|
51
|
+
#
|
52
|
+
# spec_files:
|
53
|
+
# - **/*[sS]pec.js
|
54
|
+
#
|
55
|
+
spec_files:
|
56
|
+
|
57
|
+
# src_dir
|
58
|
+
#
|
59
|
+
# Source directory path. Your src_files must be returned relative to this path. Will use root if left blank.
|
60
|
+
# Default: project root
|
61
|
+
#
|
62
|
+
# EXAMPLE:
|
63
|
+
#
|
64
|
+
# src_dir: public
|
65
|
+
#
|
66
|
+
src_dir:
|
67
|
+
|
68
|
+
# spec_dir
|
69
|
+
#
|
70
|
+
# Spec directory path. Your spec_files must be returned relative to this path.
|
71
|
+
# Default: spec/javascripts
|
72
|
+
#
|
73
|
+
# EXAMPLE:
|
74
|
+
#
|
75
|
+
# spec_dir: spec/javascripts
|
76
|
+
#
|
77
|
+
spec_dir:
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Jasmine
|
2
|
+
class Config
|
3
|
+
|
4
|
+
# Add your overrides or custom config code here
|
5
|
+
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
|
10
|
+
# Note - this is necessary for rspec2, which has removed the backtrace
|
11
|
+
module Jasmine
|
12
|
+
class SpecBuilder
|
13
|
+
def declare_spec(parent, spec)
|
14
|
+
me = self
|
15
|
+
example_name = spec["name"]
|
16
|
+
@spec_ids << spec["id"]
|
17
|
+
backtrace = @example_locations[parent.description + " " + example_name]
|
18
|
+
parent.it example_name, {} do
|
19
|
+
me.report_spec(spec["id"])
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
$:.unshift(ENV['JASMINE_GEM_PATH']) if ENV['JASMINE_GEM_PATH'] # for gem testing purposes
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'jasmine'
|
5
|
+
jasmine_config_overrides = File.expand_path(File.join(File.dirname(__FILE__), 'jasmine_config.rb'))
|
6
|
+
require jasmine_config_overrides if File.exist?(jasmine_config_overrides)
|
7
|
+
if Jasmine::Dependencies.rspec2?
|
8
|
+
require 'rspec'
|
9
|
+
else
|
10
|
+
require 'spec'
|
11
|
+
end
|
12
|
+
|
13
|
+
jasmine_config = Jasmine::Config.new
|
14
|
+
spec_builder = Jasmine::SpecBuilder.new(jasmine_config)
|
15
|
+
|
16
|
+
should_stop = false
|
17
|
+
|
18
|
+
if Jasmine::Dependencies.rspec2?
|
19
|
+
RSpec.configuration.after(:suite) do
|
20
|
+
spec_builder.stop if should_stop
|
21
|
+
end
|
22
|
+
else
|
23
|
+
Spec::Runner.configure do |config|
|
24
|
+
config.after(:suite) do
|
25
|
+
spec_builder.stop if should_stop
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
spec_builder.start
|
31
|
+
should_stop = true
|
32
|
+
spec_builder.declare_suites
|
data/test/test.sh
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongodb_logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,22 +9,33 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-12-
|
12
|
+
date: 2011-12-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: jasmine
|
16
|
+
requirement: &70120329105120 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.0.0
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70120329105120
|
14
25
|
- !ruby/object:Gem::Dependency
|
15
26
|
name: rspec
|
16
|
-
requirement: &
|
27
|
+
requirement: &70120329104620 !ruby/object:Gem::Requirement
|
17
28
|
none: false
|
18
29
|
requirements:
|
19
|
-
- -
|
30
|
+
- - ! '>='
|
20
31
|
- !ruby/object:Gem::Version
|
21
32
|
version: 2.7.0
|
22
33
|
type: :development
|
23
34
|
prerelease: false
|
24
|
-
version_requirements: *
|
35
|
+
version_requirements: *70120329104620
|
25
36
|
- !ruby/object:Gem::Dependency
|
26
37
|
name: shoulda
|
27
|
-
requirement: &
|
38
|
+
requirement: &70120329104160 !ruby/object:Gem::Requirement
|
28
39
|
none: false
|
29
40
|
requirements:
|
30
41
|
- - ! '>='
|
@@ -32,21 +43,21 @@ dependencies:
|
|
32
43
|
version: 2.0.0
|
33
44
|
type: :development
|
34
45
|
prerelease: false
|
35
|
-
version_requirements: *
|
46
|
+
version_requirements: *70120329104160
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
48
|
name: mocha
|
38
|
-
requirement: &
|
49
|
+
requirement: &70120329103700 !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
51
|
requirements:
|
41
|
-
- -
|
52
|
+
- - ! '>='
|
42
53
|
- !ruby/object:Gem::Version
|
43
54
|
version: 0.10.0
|
44
55
|
type: :development
|
45
56
|
prerelease: false
|
46
|
-
version_requirements: *
|
57
|
+
version_requirements: *70120329103700
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
59
|
name: cucumber
|
49
|
-
requirement: &
|
60
|
+
requirement: &70120328557240 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ~>
|
@@ -54,10 +65,21 @@ dependencies:
|
|
54
65
|
version: 1.1.2
|
55
66
|
type: :development
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *70120328557240
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: capybara
|
71
|
+
requirement: &70120328549720 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 1.1.2
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70120328549720
|
58
80
|
- !ruby/object:Gem::Dependency
|
59
81
|
name: coffee-script
|
60
|
-
requirement: &
|
82
|
+
requirement: &70120329142340 !ruby/object:Gem::Requirement
|
61
83
|
none: false
|
62
84
|
requirements:
|
63
85
|
- - ~>
|
@@ -65,32 +87,32 @@ dependencies:
|
|
65
87
|
version: 2.2.0
|
66
88
|
type: :development
|
67
89
|
prerelease: false
|
68
|
-
version_requirements: *
|
90
|
+
version_requirements: *70120329142340
|
69
91
|
- !ruby/object:Gem::Dependency
|
70
92
|
name: uglifier
|
71
|
-
requirement: &
|
93
|
+
requirement: &70120329141880 !ruby/object:Gem::Requirement
|
72
94
|
none: false
|
73
95
|
requirements:
|
74
|
-
- -
|
96
|
+
- - ! '>='
|
75
97
|
- !ruby/object:Gem::Version
|
76
|
-
version: 1.
|
98
|
+
version: 1.2.0
|
77
99
|
type: :development
|
78
100
|
prerelease: false
|
79
|
-
version_requirements: *
|
101
|
+
version_requirements: *70120329141880
|
80
102
|
- !ruby/object:Gem::Dependency
|
81
103
|
name: therubyracer
|
82
|
-
requirement: &
|
104
|
+
requirement: &70120329141420 !ruby/object:Gem::Requirement
|
83
105
|
none: false
|
84
106
|
requirements:
|
85
|
-
- -
|
107
|
+
- - ! '>='
|
86
108
|
- !ruby/object:Gem::Version
|
87
109
|
version: 0.9.9
|
88
110
|
type: :development
|
89
111
|
prerelease: false
|
90
|
-
version_requirements: *
|
112
|
+
version_requirements: *70120329141420
|
91
113
|
- !ruby/object:Gem::Dependency
|
92
114
|
name: rake
|
93
|
-
requirement: &
|
115
|
+
requirement: &70120329140960 !ruby/object:Gem::Requirement
|
94
116
|
none: false
|
95
117
|
requirements:
|
96
118
|
- - ~>
|
@@ -98,32 +120,32 @@ dependencies:
|
|
98
120
|
version: 0.9.0
|
99
121
|
type: :runtime
|
100
122
|
prerelease: false
|
101
|
-
version_requirements: *
|
123
|
+
version_requirements: *70120329140960
|
102
124
|
- !ruby/object:Gem::Dependency
|
103
125
|
name: mongo
|
104
|
-
requirement: &
|
126
|
+
requirement: &70120329140500 !ruby/object:Gem::Requirement
|
105
127
|
none: false
|
106
128
|
requirements:
|
107
129
|
- - ~>
|
108
130
|
- !ruby/object:Gem::Version
|
109
|
-
version: 1.
|
131
|
+
version: 1.5.2
|
110
132
|
type: :runtime
|
111
133
|
prerelease: false
|
112
|
-
version_requirements: *
|
134
|
+
version_requirements: *70120329140500
|
113
135
|
- !ruby/object:Gem::Dependency
|
114
136
|
name: bson_ext
|
115
|
-
requirement: &
|
137
|
+
requirement: &70120329140040 !ruby/object:Gem::Requirement
|
116
138
|
none: false
|
117
139
|
requirements:
|
118
140
|
- - ~>
|
119
141
|
- !ruby/object:Gem::Version
|
120
|
-
version: 1.
|
142
|
+
version: 1.5.2
|
121
143
|
type: :runtime
|
122
144
|
prerelease: false
|
123
|
-
version_requirements: *
|
145
|
+
version_requirements: *70120329140040
|
124
146
|
- !ruby/object:Gem::Dependency
|
125
147
|
name: i18n
|
126
|
-
requirement: &
|
148
|
+
requirement: &70120329139580 !ruby/object:Gem::Requirement
|
127
149
|
none: false
|
128
150
|
requirements:
|
129
151
|
- - ! '>='
|
@@ -131,10 +153,10 @@ dependencies:
|
|
131
153
|
version: 0.4.1
|
132
154
|
type: :runtime
|
133
155
|
prerelease: false
|
134
|
-
version_requirements: *
|
156
|
+
version_requirements: *70120329139580
|
135
157
|
- !ruby/object:Gem::Dependency
|
136
158
|
name: json
|
137
|
-
requirement: &
|
159
|
+
requirement: &70120329139120 !ruby/object:Gem::Requirement
|
138
160
|
none: false
|
139
161
|
requirements:
|
140
162
|
- - ~>
|
@@ -142,10 +164,10 @@ dependencies:
|
|
142
164
|
version: 1.6.1
|
143
165
|
type: :runtime
|
144
166
|
prerelease: false
|
145
|
-
version_requirements: *
|
167
|
+
version_requirements: *70120329139120
|
146
168
|
- !ruby/object:Gem::Dependency
|
147
169
|
name: activesupport
|
148
|
-
requirement: &
|
170
|
+
requirement: &70120329138660 !ruby/object:Gem::Requirement
|
149
171
|
none: false
|
150
172
|
requirements:
|
151
173
|
- - ! '>='
|
@@ -153,10 +175,10 @@ dependencies:
|
|
153
175
|
version: 3.0.0
|
154
176
|
type: :runtime
|
155
177
|
prerelease: false
|
156
|
-
version_requirements: *
|
178
|
+
version_requirements: *70120329138660
|
157
179
|
- !ruby/object:Gem::Dependency
|
158
180
|
name: actionpack
|
159
|
-
requirement: &
|
181
|
+
requirement: &70120329138200 !ruby/object:Gem::Requirement
|
160
182
|
none: false
|
161
183
|
requirements:
|
162
184
|
- - ! '>='
|
@@ -164,10 +186,10 @@ dependencies:
|
|
164
186
|
version: 3.0.0
|
165
187
|
type: :runtime
|
166
188
|
prerelease: false
|
167
|
-
version_requirements: *
|
189
|
+
version_requirements: *70120329138200
|
168
190
|
- !ruby/object:Gem::Dependency
|
169
191
|
name: sinatra
|
170
|
-
requirement: &
|
192
|
+
requirement: &70120329137740 !ruby/object:Gem::Requirement
|
171
193
|
none: false
|
172
194
|
requirements:
|
173
195
|
- - ! '>='
|
@@ -175,10 +197,10 @@ dependencies:
|
|
175
197
|
version: 1.2.0
|
176
198
|
type: :runtime
|
177
199
|
prerelease: false
|
178
|
-
version_requirements: *
|
200
|
+
version_requirements: *70120329137740
|
179
201
|
- !ruby/object:Gem::Dependency
|
180
202
|
name: erubis
|
181
|
-
requirement: &
|
203
|
+
requirement: &70120329137280 !ruby/object:Gem::Requirement
|
182
204
|
none: false
|
183
205
|
requirements:
|
184
206
|
- - ! '>='
|
@@ -186,10 +208,10 @@ dependencies:
|
|
186
208
|
version: 2.6.6
|
187
209
|
type: :runtime
|
188
210
|
prerelease: false
|
189
|
-
version_requirements: *
|
211
|
+
version_requirements: *70120329137280
|
190
212
|
- !ruby/object:Gem::Dependency
|
191
213
|
name: vegas
|
192
|
-
requirement: &
|
214
|
+
requirement: &70120329136820 !ruby/object:Gem::Requirement
|
193
215
|
none: false
|
194
216
|
requirements:
|
195
217
|
- - ~>
|
@@ -197,7 +219,7 @@ dependencies:
|
|
197
219
|
version: 0.1.2
|
198
220
|
type: :runtime
|
199
221
|
prerelease: false
|
200
|
-
version_requirements: *
|
222
|
+
version_requirements: *70120329136820
|
201
223
|
description: MongoDB logger for Rails 3
|
202
224
|
email:
|
203
225
|
- leopard.not.a@gmail.com
|
@@ -221,7 +243,9 @@ files:
|
|
221
243
|
- bin/mongodb_logger_web
|
222
244
|
- config.ru
|
223
245
|
- examples/server_config.yml
|
246
|
+
- features/mongodb_logger_web.feature
|
224
247
|
- features/rails.feature
|
248
|
+
- features/step_definitions/mongodb_logger_web_steps.rb
|
225
249
|
- features/step_definitions/rails_application_steps.rb
|
226
250
|
- features/support/env.rb
|
227
251
|
- features/support/rails.rb
|
@@ -300,6 +324,11 @@ files:
|
|
300
324
|
- lib/mongodb_logger/server_config.rb
|
301
325
|
- lib/mongodb_logger/version.rb
|
302
326
|
- mongodb_logger.gemspec
|
327
|
+
- spec/javascripts/MongodbLoggerMainSpec.js
|
328
|
+
- spec/javascripts/helpers/SpecHelper.js
|
329
|
+
- spec/javascripts/support/jasmine.yml
|
330
|
+
- spec/javascripts/support/jasmine_config.rb
|
331
|
+
- spec/javascripts/support/jasmine_runner.rb
|
303
332
|
- test/active_record.rb
|
304
333
|
- test/config/samples/database.yml
|
305
334
|
- test/config/samples/database_no_file_logging.yml
|
@@ -308,6 +337,7 @@ files:
|
|
308
337
|
- test/config/samples/database_with_collection.yml
|
309
338
|
- test/config/samples/mongodb_logger.yml
|
310
339
|
- test/config/samples/mongoid.yml
|
340
|
+
- test/config/samples/server_config.yml
|
311
341
|
- test/rails.rb
|
312
342
|
- test/rails/app/controllers/order_controller.rb
|
313
343
|
- test/rails/test/functional/order_controller_test.rb
|
@@ -342,4 +372,34 @@ rubygems_version: 1.8.10
|
|
342
372
|
signing_key:
|
343
373
|
specification_version: 3
|
344
374
|
summary: MongoDB logger for Rails 3
|
345
|
-
test_files:
|
375
|
+
test_files:
|
376
|
+
- features/mongodb_logger_web.feature
|
377
|
+
- features/rails.feature
|
378
|
+
- features/step_definitions/mongodb_logger_web_steps.rb
|
379
|
+
- features/step_definitions/rails_application_steps.rb
|
380
|
+
- features/support/env.rb
|
381
|
+
- features/support/rails.rb
|
382
|
+
- features/support/terminal.rb
|
383
|
+
- spec/javascripts/MongodbLoggerMainSpec.js
|
384
|
+
- spec/javascripts/helpers/SpecHelper.js
|
385
|
+
- spec/javascripts/support/jasmine.yml
|
386
|
+
- spec/javascripts/support/jasmine_config.rb
|
387
|
+
- spec/javascripts/support/jasmine_runner.rb
|
388
|
+
- test/active_record.rb
|
389
|
+
- test/config/samples/database.yml
|
390
|
+
- test/config/samples/database_no_file_logging.yml
|
391
|
+
- test/config/samples/database_replica_set.yml
|
392
|
+
- test/config/samples/database_with_auth.yml
|
393
|
+
- test/config/samples/database_with_collection.yml
|
394
|
+
- test/config/samples/mongodb_logger.yml
|
395
|
+
- test/config/samples/mongoid.yml
|
396
|
+
- test/config/samples/server_config.yml
|
397
|
+
- test/rails.rb
|
398
|
+
- test/rails/app/controllers/order_controller.rb
|
399
|
+
- test/rails/test/functional/order_controller_test.rb
|
400
|
+
- test/rails/test/test_helper.rb
|
401
|
+
- test/shoulda_macros/log_macros.rb
|
402
|
+
- test/test.sh
|
403
|
+
- test/test_helper.rb
|
404
|
+
- test/unit/mongodb_logger_replica_test.rb
|
405
|
+
- test/unit/mongodb_logger_test.rb
|