mongodb_logger 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.travis.yml CHANGED
@@ -1,6 +1,6 @@
1
- #before_script:
2
- # - "rake vendor_test_gems"
3
- script: "sh -c 'test/test.sh'"
1
+ before_script:
2
+ - "sh -e /etc/init.d/xvfb start"
3
+ script: "sh -c 'export DISPLAY=:99.0 && test/test.sh'"
4
4
  rvm:
5
5
  - 1.8.7
6
6
  - ree
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## v0.2.4
2
+
3
+ * Move on logs list by using arrows on keybords
4
+
1
5
  ## v0.2.3
2
6
 
3
7
  * Fix storage log with attachments (save it for search by "original\_filename" and "content\_type")
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
- js = Uglifier.compile(CoffeeScript.compile File.read("#{source}#{cf}"))
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 the airbrake gem.'
53
+ desc 'Test unit.'
53
54
  Rake::TestTask.new(:test) do |test|
54
55
  test.libs << 'lib' << 'test'
55
- test.pattern = 'test/unit/mongodb_logger_test.rb'
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
- MongodbLoggerJS.init()
2
+ MongodbLoggerMain.init()
3
3
 
4
- MongodbLoggerJS =
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
- MongodbLoggerJS.tail_logs_url = $(event.target).attr('data-url')
17
+ MongodbLoggerMain.tail_logs_url = $(event.target).attr('data-url')
18
18
  $('#tail_logs_block').addClass('started')
19
- MongodbLoggerJS.tail_logs(null)
19
+ MongodbLoggerMain.tail_logs(null)
20
20
  return false
21
21
  $(document).on 'click', '#tail_logs_stop_link', (event) =>
22
- MongodbLoggerJS.tail_log_started = false
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.attr('data-url')
29
- url = elm_obj.parents('tr').attr('data-url') if !url?
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.parents('tr').addClass('current')
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
- MongodbLoggerJS.tail_log_started = false
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
- MongodbLoggerJS.init_on_pages()
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
- MongodbLoggerJS.log_info_offset = $("#log_info").offset()
144
+ MongodbLoggerMain.log_info_offset = $("#log_info").offset()
131
145
  $(window).scroll =>
132
- if $(window).scrollTop() > MongodbLoggerJS.log_info_offset.top
146
+ if $(window).scrollTop() > MongodbLoggerMain.log_info_offset.top
133
147
  $("#log_info").stop().animate
134
- marginTop: $(window).scrollTop() - MongodbLoggerJS.log_info_offset.top + MongodbLoggerJS.log_info_padding
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 = MongodbLoggerJS.tail_logs_url
154
+ url = MongodbLoggerMain.tail_logs_url
141
155
  if log_last_id? && log_last_id.length > 0
142
- url = MongodbLoggerJS.tail_logs_url + "/" + log_last_id
156
+ url = MongodbLoggerMain.tail_logs_url + "/" + log_last_id
143
157
  else
144
- MongodbLoggerJS.tail_log_started = true
158
+ MongodbLoggerMain.tail_log_started = true
145
159
  log_last_id = ""
146
- if MongodbLoggerJS.tail_log_started
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 MongodbLoggerJS.tail_log_started
162
- fcallback = -> MongodbLoggerJS.tail_logs(log_last_id)
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
- ((function(){var a;$(function(){return a.init()}),a={tail_logs_url:null,tail_log_started:!1,log_info_offset:null,log_info_padding:15,init:function(){var b=this;return $(document).ajaxStart(function(){return $("#ajax_loader").show()}),$(document).ajaxStop(function(){return $("#ajax_loader").hide()}),$(document).on("click","#tail_logs_link",function(b){return a.tail_logs_url=$(b.target).attr("data-url"),$("#tail_logs_block").addClass("started"),a.tail_logs(null),!1}),$(document).on("click","#tail_logs_stop_link",function(b){return a.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.attr("data-url"),c==null&&(c=b.parents("tr").attr("data-url")),c!=null&&(b.parents("table").find("tr").removeClass("current"),b.parents("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}),this.init_pjax(),this.init_on_pages()},init_pjax:function(){var b=this;return $("a[data-pjax]").pjax(),$("body").bind("pjax:start",function(){return $("#ajax_loader").show()}),$("body").bind("pjax:end",function(){return $("#ajax_loader").hide(),a.tail_log_started=!1,$(window).scrollTop()>100&&$("html, body").stop().animate({scrollTop:0},"slow"),a.init_on_pages()})},init_on_pages:function(){var b=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 a.log_info_offset=$("#log_info").offset(),$(window).scroll(function(){return $(window).scrollTop()>a.log_info_offset.top?$("#log_info").stop().animate({marginTop:$(window).scrollTop()-a.log_info_offset.top+a.log_info_padding}):$("#log_info").stop().animate({marginTop:0})})},tail_logs:function(b){var c;c=a.tail_logs_url,b!=null&&b.length>0?c=a.tail_logs_url+"/"+b:(a.tail_log_started=!0,b="");if(a.tail_log_started)return $.ajax({url:c,dataType:"json",success:function(c){var d,e;c.time&&($("#tail_logs_time").text(c.time),c.log_last_id!=null&&(b=c.log_last_id),c.content!=null&&c.content.length>0&&(d=$(c.content),d.addClass("newlog"),$("#logs_list tr:first").after(d).effect("highlight",{},1e3)),c.collection_stats&&$("#collection_stats").length>0&&$("#collection_stats").html(c.collection_stats));if(a.tail_log_started)return e=function(){return a.tail_logs(b)},setTimeout(e,2e3)}})}}})).call(this)
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
- @collection = @db[@db_configuration["collection"]]
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
@@ -1,3 +1,3 @@
1
1
  module MongodbLogger
2
- VERSION = "0.2.3"
2
+ VERSION = "0.2.4"
3
3
  end
@@ -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 "rspec", "~> 2.7.0"
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", "~> 0.10.0"
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", "~> 1.1.0"
20
- gem.add_development_dependency "therubyracer", "~> 0.9.9"
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.4.0"
24
- gem.add_runtime_dependency "bson_ext", "~> 1.4.0"
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,3 @@
1
+ beforeEach(function() {
2
+ /**/
3
+ });
@@ -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
@@ -0,0 +1,3 @@
1
+ database: test_database
2
+ host: localhost
3
+ port: 27017
data/test/test.sh CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/bin/bash
2
- rake vendor_test_gems
3
- rake test
4
- rake cucumber:rails:all
2
+ rake vendor_test_gems && \
3
+ rake test && \
4
+ rake cucumber:web && \
5
+ rake jasmine:ci && \
6
+ rake cucumber:rails:all
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.3
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-14 00:00:00.000000000 Z
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: &7406740 !ruby/object:Gem::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: *7406740
35
+ version_requirements: *70120329104620
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: shoulda
27
- requirement: &6984860 !ruby/object:Gem::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: *6984860
46
+ version_requirements: *70120329104160
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: mocha
38
- requirement: &6983620 !ruby/object:Gem::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: *6983620
57
+ version_requirements: *70120329103700
47
58
  - !ruby/object:Gem::Dependency
48
59
  name: cucumber
49
- requirement: &6981880 !ruby/object:Gem::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: *6981880
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: &6980620 !ruby/object:Gem::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: *6980620
90
+ version_requirements: *70120329142340
69
91
  - !ruby/object:Gem::Dependency
70
92
  name: uglifier
71
- requirement: &6978960 !ruby/object:Gem::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.1.0
98
+ version: 1.2.0
77
99
  type: :development
78
100
  prerelease: false
79
- version_requirements: *6978960
101
+ version_requirements: *70120329141880
80
102
  - !ruby/object:Gem::Dependency
81
103
  name: therubyracer
82
- requirement: &6672600 !ruby/object:Gem::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: *6672600
112
+ version_requirements: *70120329141420
91
113
  - !ruby/object:Gem::Dependency
92
114
  name: rake
93
- requirement: &6671100 !ruby/object:Gem::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: *6671100
123
+ version_requirements: *70120329140960
102
124
  - !ruby/object:Gem::Dependency
103
125
  name: mongo
104
- requirement: &6668340 !ruby/object:Gem::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.4.0
131
+ version: 1.5.2
110
132
  type: :runtime
111
133
  prerelease: false
112
- version_requirements: *6668340
134
+ version_requirements: *70120329140500
113
135
  - !ruby/object:Gem::Dependency
114
136
  name: bson_ext
115
- requirement: &6663080 !ruby/object:Gem::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.4.0
142
+ version: 1.5.2
121
143
  type: :runtime
122
144
  prerelease: false
123
- version_requirements: *6663080
145
+ version_requirements: *70120329140040
124
146
  - !ruby/object:Gem::Dependency
125
147
  name: i18n
126
- requirement: &6661080 !ruby/object:Gem::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: *6661080
156
+ version_requirements: *70120329139580
135
157
  - !ruby/object:Gem::Dependency
136
158
  name: json
137
- requirement: &6658000 !ruby/object:Gem::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: *6658000
167
+ version_requirements: *70120329139120
146
168
  - !ruby/object:Gem::Dependency
147
169
  name: activesupport
148
- requirement: &6653380 !ruby/object:Gem::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: *6653380
178
+ version_requirements: *70120329138660
157
179
  - !ruby/object:Gem::Dependency
158
180
  name: actionpack
159
- requirement: &6651760 !ruby/object:Gem::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: *6651760
189
+ version_requirements: *70120329138200
168
190
  - !ruby/object:Gem::Dependency
169
191
  name: sinatra
170
- requirement: &6650220 !ruby/object:Gem::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: *6650220
200
+ version_requirements: *70120329137740
179
201
  - !ruby/object:Gem::Dependency
180
202
  name: erubis
181
- requirement: &6649140 !ruby/object:Gem::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: *6649140
211
+ version_requirements: *70120329137280
190
212
  - !ruby/object:Gem::Dependency
191
213
  name: vegas
192
- requirement: &6648360 !ruby/object:Gem::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: *6648360
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