mongodb_logger 0.4.2 → 0.5.0
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/.gitignore +2 -1
- data/.rvmrc +1 -1
- data/.travis.yml +5 -4
- data/Appraisals +9 -0
- data/CHANGELOG.md +20 -3
- data/README.md +58 -35
- data/Rakefile +33 -96
- data/app/assets/javascripts/analytics.js.coffee +5 -4
- data/app/assets/javascripts/logs.js.coffee +11 -11
- data/app/assets/javascripts/mongodb_logger.js +2 -1
- data/app/assets/javascripts/vendors/jquery-1.9.1.min.js +5 -0
- data/app/assets/javascripts/vendors/jquery.pjax.min.js +15 -13
- data/app/assets/javascripts/vendors/mustache.min.js +10 -0
- data/app/assets/stylesheets/layout.css +20 -15
- data/app/assets/stylesheets/mongodb_logger.css +0 -3
- data/bin/mongodb_logger_web +1 -2
- data/features/rails.feature +20 -8
- data/features/step_definitions/mongodb_logger_web_steps.rb +2 -3
- data/features/step_definitions/rails_application_steps.rb +84 -58
- data/features/step_definitions/rake_steps.rb +10 -0
- data/features/support/aruba.rb +5 -0
- data/features/support/env.rb +11 -5
- data/features/support/rails.rb +55 -67
- data/gemfiles/rails31.gemfile +8 -0
- data/gemfiles/rails32.gemfile +8 -0
- data/lib/mongodb_logger.rb +10 -3
- data/lib/mongodb_logger/adapters/base.rb +5 -1
- data/lib/mongodb_logger/adapters/mongo.rb +17 -13
- data/lib/mongodb_logger/adapters/moped.rb +17 -11
- data/lib/mongodb_logger/capistrano.rb +8 -0
- data/lib/mongodb_logger/logger.rb +13 -26
- data/lib/mongodb_logger/rack_middleware.rb +24 -0
- data/lib/mongodb_logger/railtie.rb +4 -4
- data/lib/mongodb_logger/server.rb +43 -68
- data/lib/mongodb_logger/server/helpers.rb +5 -0
- data/lib/mongodb_logger/server/{content_for.rb → helpers/content_for.rb} +0 -0
- data/lib/mongodb_logger/server/helpers/mustache_helpers.rb +66 -0
- data/lib/mongodb_logger/server/{partials.rb → helpers/partials.rb} +0 -0
- data/lib/mongodb_logger/server/{sprokets.rb → helpers/sprokets.rb} +4 -4
- data/lib/mongodb_logger/server/{view_helpers.rb → helpers/view_helpers.rb} +22 -38
- data/lib/mongodb_logger/server/model.rb +4 -0
- data/lib/mongodb_logger/server/model/additional_filter.rb +15 -23
- data/lib/mongodb_logger/server/model/analytic.rb +24 -32
- data/lib/mongodb_logger/server/model/base.rb +21 -0
- data/lib/mongodb_logger/server/model/filter.rb +12 -20
- data/lib/mongodb_logger/server/mustache/logs/info.rb +15 -0
- data/lib/mongodb_logger/server/templates/logs/info.mustache +25 -0
- data/lib/mongodb_logger/server/views/layout.erb +28 -26
- data/lib/mongodb_logger/server/views/shared/_log.erb +1 -1
- data/lib/mongodb_logger/server/views/shared/_tabs.erb +2 -2
- data/lib/mongodb_logger/server/views/shared/layout/_mustache.erb +6 -0
- data/lib/mongodb_logger/server/views/show_log.erb +2 -2
- data/lib/mongodb_logger/server_config.rb +4 -4
- data/lib/mongodb_logger/utils/migrate.rb +50 -0
- data/lib/mongodb_logger/utils/progressbar.rb +79 -0
- data/lib/mongodb_logger/version.rb +1 -1
- data/mongodb_logger.gemspec +15 -8
- data/{test/config/samples → spec/factories/config}/database.yml +0 -0
- data/{test/config/samples → spec/factories/config}/database_no_file_logging.yml +0 -0
- data/{test/config/samples → spec/factories/config}/database_replica_set.yml +0 -0
- data/{test/config/samples → spec/factories/config}/database_with_auth.yml +0 -0
- data/spec/factories/config/database_with_capsize.yml +9 -0
- data/{test/config/samples → spec/factories/config}/database_with_collection.yml +0 -0
- data/{test/config/samples → spec/factories/config}/database_with_url.yml +0 -0
- data/{test/config/samples → spec/factories/config}/mongodb_logger.yml +0 -0
- data/{test/config/samples → spec/factories/config}/mongoid.yml +0 -0
- data/{test/config/samples → spec/factories/config}/server_config.yml +0 -0
- data/spec/javascripts/support/jasmine.yml +1 -5
- data/spec/mongodb_logger_spec.rb +257 -0
- data/spec/rails_spec/controllers/tests_controller_spec_rails.rb +128 -0
- data/spec/rails_spec/spec_helper_rails.rb +13 -0
- data/spec/spec_helper.rb +17 -0
- data/{test/test_helper.rb → spec/support/mongodb_logger_helper.rb} +44 -63
- data/spec/support/mongodb_logger_macros.rb +22 -0
- data/spec/support/rails.rb +40 -0
- data/spec/utils/migrate_spec.rb +32 -0
- data/{lib/tasks → tasks}/mongodb_logger.rake +14 -6
- metadata +198 -78
- data/SUPPORTED_RAILS_VERSIONS +0 -16
- data/TESTING.md +0 -24
- data/app/assets/javascripts/vendors/jquery-1.8.3.min.js +0 -2
- data/features/support/terminal.rb +0 -95
- data/lib/mongodb_logger/server/views/shared/_log_info.erb +0 -27
- data/test/Gemfile_tests +0 -9
- data/test/active_record.rb +0 -13
- data/test/log/.gitkeep +0 -0
- data/test/rails.rb +0 -22
- data/test/rails/app/controllers/order_controller.rb +0 -23
- data/test/rails/test/functional/order_controller_test.rb +0 -116
- data/test/rails/test/test_helper.rb +0 -10
- data/test/shoulda_macros/log_macros.rb +0 -13
- data/test/test.sh +0 -7
- data/test/unit/mongodb_logger_replica_test.rb +0 -56
- data/test/unit/mongodb_logger_test.rb +0 -307
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<script type="text/javascript">
|
|
2
|
+
window.MustacheTemplates = {};
|
|
3
|
+
<% Dir["#{File.expand_path(File.join(@main_dir, "server", "templates"))}/**/*.mustache"].each do |template| %>
|
|
4
|
+
window.MustacheTemplates[<%= template.split(File::SEPARATOR).last(2).join("/").gsub(".mustache", "").inspect %>] = Mustache.compile(<%= File.open(template, 'rb').read.inspect %>)
|
|
5
|
+
<% end %>
|
|
6
|
+
</script>
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
<div class="unit-right">
|
|
4
4
|
<div class="pam">
|
|
5
|
-
<a href="<%=h url_path("overview") %>" data-pjax='
|
|
6
|
-
</div> <!-- pam -->
|
|
5
|
+
<a href="<%=h url_path("overview") %>" data-pjax='true' class="button small grey">Back</a>
|
|
6
|
+
</div> <!-- pam -->
|
|
7
7
|
</div> <!-- unit-right -->
|
|
8
8
|
<h1 class="pam">Log #<%=h @log['_id'] %></h1>
|
|
9
9
|
<ul class="list">
|
|
@@ -2,7 +2,7 @@ require 'mongodb_logger/logger'
|
|
|
2
2
|
|
|
3
3
|
module MongodbLogger
|
|
4
4
|
class ServerConfig
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
class ServerLogger < MongodbLogger::Logger
|
|
7
7
|
private
|
|
8
8
|
def resolve_config
|
|
@@ -12,14 +12,14 @@ module MongodbLogger
|
|
|
12
12
|
config
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
class << self
|
|
17
17
|
def set_config(config_path)
|
|
18
18
|
ENV['MONGODBLOGGERCONFIG'] = config_path
|
|
19
|
-
@logger = ServerLogger.new(:
|
|
19
|
+
@logger = ServerLogger.new(path: "server.log")
|
|
20
20
|
@logger.mongo_adapter
|
|
21
21
|
end
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
def mongo_adapter
|
|
24
24
|
@logger.mongo_adapter if @logger
|
|
25
25
|
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'mongodb_logger/logger'
|
|
2
|
+
require 'mongodb_logger/utils/progressbar'
|
|
3
|
+
|
|
4
|
+
module MongodbLogger
|
|
5
|
+
module Utils
|
|
6
|
+
class Migrate
|
|
7
|
+
|
|
8
|
+
def initialize
|
|
9
|
+
raise "this task work only in Rails app" unless defined?(Rails)
|
|
10
|
+
Progressbar.new.show("Importing data to new capped collection") do
|
|
11
|
+
mongodb_logger = Rails.logger
|
|
12
|
+
collection_name = mongodb_logger.db_configuration['collection'].dup
|
|
13
|
+
@mongo_adapter = mongodb_logger.mongo_adapter
|
|
14
|
+
@migrate_logger = create_migration_collection(mongodb_logger.db_configuration)
|
|
15
|
+
|
|
16
|
+
iterator = 0
|
|
17
|
+
all_count = @mongo_adapter.collection.find.count
|
|
18
|
+
@mongo_adapter.collection.find.each do |row|
|
|
19
|
+
@migrate_logger.mongo_adapter.collection.insert(row)
|
|
20
|
+
iterator += 1
|
|
21
|
+
progress ((iterator.to_f / all_count.to_f) * 100).round
|
|
22
|
+
end if all_count > 0
|
|
23
|
+
progress 100
|
|
24
|
+
@migrate_logger.mongo_adapter.rename_collection(collection_name, true)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def create_migration_collection(configuration)
|
|
29
|
+
configuration.merge!({ 'collection' => "#{configuration['collection']}_copy_#{rand(100)}" })
|
|
30
|
+
migrate_logger = MongoMigrateLogger.new(configuration)
|
|
31
|
+
migrate_logger.mongo_adapter.reset_collection
|
|
32
|
+
migrate_logger
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class MongoMigrateLogger < MongodbLogger::Logger
|
|
36
|
+
def initialize(config = {})
|
|
37
|
+
@static_config = config
|
|
38
|
+
super(path: "/dev/null")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
def resolve_config
|
|
43
|
+
@static_config
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# https://github.com/bitboxer/simple_progressbar
|
|
2
|
+
module MongodbLogger
|
|
3
|
+
module Utils
|
|
4
|
+
class Progressbar
|
|
5
|
+
def initialize
|
|
6
|
+
@last_length = 0
|
|
7
|
+
@title = ""
|
|
8
|
+
@progress = 0
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def show(title, &block)
|
|
12
|
+
@title = title
|
|
13
|
+
print @title + " "
|
|
14
|
+
start_progress
|
|
15
|
+
# thanks to http://www.dcmanges.com/blog/ruby-dsls-instance-eval-with-delegation
|
|
16
|
+
@self_before_instance_eval = eval "self", block.binding
|
|
17
|
+
instance_eval(&block)
|
|
18
|
+
finish_progress
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def interrupt
|
|
22
|
+
# TODO: Make some of the strings constants so we don't have to use a magic number here.
|
|
23
|
+
progressbar_length = 16 + @last_length + @title.length
|
|
24
|
+
move_cursor = "\e[#{progressbar_length}D"
|
|
25
|
+
print move_cursor + (" " * progressbar_length) + move_cursor
|
|
26
|
+
STDOUT.flush
|
|
27
|
+
yield
|
|
28
|
+
puts
|
|
29
|
+
print @title + " "
|
|
30
|
+
render_progress(@progress)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def progress(percent)
|
|
34
|
+
print "\e[#{15 + @last_length}D"
|
|
35
|
+
render_progress(percent)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def method_missing(method, *args, &block)
|
|
39
|
+
@self_before_instance_eval.send method, *args, &block
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
def render_progress(percent)
|
|
45
|
+
@progress = percent
|
|
46
|
+
print "["
|
|
47
|
+
|
|
48
|
+
print "*" * [(percent/10).to_i, 10].min
|
|
49
|
+
print " " * [10 - (percent/10).to_i, 0].max
|
|
50
|
+
|
|
51
|
+
if percent.class != Float
|
|
52
|
+
printable_percent = "%3s" % percent
|
|
53
|
+
else
|
|
54
|
+
non_decimal_digits = (Math.log(percent) / Math.log(10)).truncate + 1
|
|
55
|
+
printable_percent = (non_decimal_digits < 3 ? " " * (3 - non_decimal_digits) : "") + percent.to_s
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
print "]\e[32m #{printable_percent}\e[0m %"
|
|
59
|
+
|
|
60
|
+
new_length = printable_percent.length
|
|
61
|
+
if @last_length > new_length
|
|
62
|
+
print " " * (@last_length - new_length)
|
|
63
|
+
print "\e[#{@last_length - new_length}D"
|
|
64
|
+
end
|
|
65
|
+
@last_length = new_length
|
|
66
|
+
|
|
67
|
+
STDOUT.flush
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def start_progress
|
|
71
|
+
render_progress(0)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def finish_progress
|
|
75
|
+
puts
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
data/mongodb_logger.gemspec
CHANGED
|
@@ -1,35 +1,42 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'mongodb_logger/version'
|
|
3
5
|
|
|
4
6
|
Gem::Specification.new do |gem|
|
|
5
7
|
gem.authors = ["Alexey Vasiliev"]
|
|
6
8
|
gem.email = ["leopard.not.a@gmail.com"]
|
|
7
|
-
gem.description = %q{MongoDB logger for Rails
|
|
8
|
-
gem.summary = %q{MongoDB logger for Rails
|
|
9
|
+
gem.description = %q{MongoDB logger for Rails}
|
|
10
|
+
gem.summary = %q{MongoDB logger for Rails}
|
|
9
11
|
gem.homepage = "http://mongodb-logger.catware.org"
|
|
10
12
|
|
|
11
13
|
gem.extra_rdoc_files = [ "LICENSE", "README.md" ]
|
|
12
14
|
gem.rdoc_options = ["--charset=UTF-8"]
|
|
13
15
|
|
|
14
16
|
gem.add_development_dependency "rspec"
|
|
17
|
+
gem.add_development_dependency "rspec-rails"
|
|
15
18
|
gem.add_development_dependency "shoulda"
|
|
16
19
|
gem.add_development_dependency "mocha"
|
|
17
20
|
gem.add_development_dependency "cucumber"
|
|
21
|
+
gem.add_development_dependency "cucumber-rails"
|
|
18
22
|
gem.add_development_dependency "capybara"
|
|
19
23
|
gem.add_development_dependency "coffee-script"
|
|
20
24
|
gem.add_development_dependency "uglifier"
|
|
21
25
|
gem.add_development_dependency "jasmine"
|
|
26
|
+
gem.add_development_dependency "appraisal"
|
|
27
|
+
gem.add_development_dependency "aruba"
|
|
22
28
|
# adapters
|
|
23
29
|
gem.add_development_dependency "mongo"
|
|
24
30
|
gem.add_development_dependency "moped"
|
|
25
|
-
|
|
31
|
+
|
|
26
32
|
gem.add_dependency "rake", ">= 0.9.0"
|
|
27
|
-
gem.add_dependency "
|
|
33
|
+
gem.add_dependency "multi_json", ">= 1.6.0"
|
|
28
34
|
gem.add_dependency "activesupport", ">= 3.1.0"
|
|
29
35
|
gem.add_dependency "actionpack", ">= 3.1.0"
|
|
30
36
|
gem.add_dependency "sprockets", ">= 2.0.0"
|
|
31
|
-
gem.add_dependency "sinatra", "
|
|
32
|
-
gem.add_dependency "erubis", "
|
|
37
|
+
gem.add_dependency "sinatra", ">= 1.3.0"
|
|
38
|
+
gem.add_dependency "erubis", ">= 2.7.0"
|
|
39
|
+
gem.add_dependency "mustache", ">= 0.99.0"
|
|
33
40
|
gem.add_dependency "vegas", "~> 0.1.0"
|
|
34
41
|
|
|
35
42
|
gem.rubyforge_project = "mongodb_logger"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -11,11 +11,7 @@
|
|
|
11
11
|
# - dist/**/*.js
|
|
12
12
|
#
|
|
13
13
|
src_files:
|
|
14
|
-
- app/assets/javascripts/
|
|
15
|
-
- app/assets/javascripts/vendors/jquery-ui-1.9.2.min.js
|
|
16
|
-
- app/assets/javascripts/vendors/jquery.pjax.min.js
|
|
17
|
-
- app/assets/javascripts/vendors/highlight.pack.js
|
|
18
|
-
- app/assets/javascripts/logs.js
|
|
14
|
+
- app/assets/javascripts/mongodb_logger.js
|
|
19
15
|
|
|
20
16
|
# stylesheets
|
|
21
17
|
#
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe MongodbLogger::Logger do
|
|
4
|
+
extend MongodbLogger::SpecMacros
|
|
5
|
+
|
|
6
|
+
EXCEPTION_MSG = "Foo"
|
|
7
|
+
|
|
8
|
+
before :all do
|
|
9
|
+
create_logs_dir
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
context "in instantiation" do
|
|
13
|
+
before do
|
|
14
|
+
described_class.any_instance.stub(:internal_initialize).and_return(nil)
|
|
15
|
+
described_class.any_instance.stub(:disable_file_logging?).and_return(false)
|
|
16
|
+
@mongodb_logger = described_class.new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
[MongodbLogger::SpecHelper::LOGGER_CONFIG,
|
|
20
|
+
MongodbLogger::SpecHelper::DEFAULT_CONFIG,
|
|
21
|
+
MongodbLogger::SpecHelper::MONGOID_CONFIG].each do |config|
|
|
22
|
+
context "during configuration when using #{config}" do
|
|
23
|
+
before do
|
|
24
|
+
setup_for_config(config)
|
|
25
|
+
end
|
|
26
|
+
after do
|
|
27
|
+
cleanup_for_config(config)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
should_use_database_name_in_config
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context "during configuration when using #{MongodbLogger::SpecHelper::DEFAULT_CONFIG_WITH_URL}" do
|
|
35
|
+
before do
|
|
36
|
+
setup_for_config(MongodbLogger::SpecHelper::DEFAULT_CONFIG_WITH_URL, MongodbLogger::SpecHelper::DEFAULT_CONFIG)
|
|
37
|
+
end
|
|
38
|
+
after do
|
|
39
|
+
cleanup_for_config(MongodbLogger::SpecHelper::DEFAULT_CONFIG)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "authenticated by url" do
|
|
43
|
+
@mongodb_logger.send(:connect)
|
|
44
|
+
@mongodb_logger.mongo_adapter.authenticated?.should be_true
|
|
45
|
+
@mongodb_logger.db_configuration['database'].should == "system_log"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
context "upon connecting with authentication settings" do
|
|
50
|
+
before do
|
|
51
|
+
setup_for_config(MongodbLogger::SpecHelper::DEFAULT_CONFIG_WITH_AUTH, MongodbLogger::SpecHelper::DEFAULT_CONFIG)
|
|
52
|
+
create_mongo_user
|
|
53
|
+
end
|
|
54
|
+
after do
|
|
55
|
+
remove_mongo_user
|
|
56
|
+
cleanup_for_config(MongodbLogger::SpecHelper::DEFAULT_CONFIG)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
should_use_database_name_in_config
|
|
60
|
+
|
|
61
|
+
it "authenticate with the credentials in the configuration" do
|
|
62
|
+
@mongodb_logger.send(:connect)
|
|
63
|
+
@mongodb_logger.mongo_adapter.authenticated?.should be_true
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
context "after configuration" do
|
|
68
|
+
before do
|
|
69
|
+
setup_for_config(MongodbLogger::SpecHelper::DEFAULT_CONFIG)
|
|
70
|
+
@mongodb_logger.send(:connect)
|
|
71
|
+
@mongo_adapter = @mongodb_logger.mongo_adapter
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "set the default host, port, and capsize if not configured" do
|
|
75
|
+
@mongo_adapter.configuration['host'].should == 'localhost'
|
|
76
|
+
@mongo_adapter.configuration['port'].should == 27017
|
|
77
|
+
@mongo_adapter.configuration['capsize'].should == MongodbLogger::Logger::DEFAULT_COLLECTION_SIZE
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "set the mongo collection name depending on the Rails environment" do
|
|
81
|
+
@mongo_adapter.collection_name.should == "#{Rails.env}_log"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "set the application name when specified in the config file" do
|
|
85
|
+
@mongo_adapter.configuration['application_name'].should == "mongo_foo"
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "set safe insert when specified in the config file" do
|
|
89
|
+
@mongo_adapter.configuration['write_options'].should be_present
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "use the database name in the config file" do
|
|
93
|
+
@mongo_adapter.configuration['database'].should == "system_log"
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it "not authenticate" do
|
|
97
|
+
@mongo_adapter.authenticated?.should be_false
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "create a capped collection in the database with the configured size" do
|
|
101
|
+
@mongodb_logger.send(:check_for_collection)
|
|
102
|
+
@mongo_adapter.connection.collection_names.include?(@mongo_adapter.configuration['collection']).should be_true
|
|
103
|
+
# new capped collections are X MB + 5888 bytes, but don't be too strict in case that changes
|
|
104
|
+
@mongo_adapter.collection_stats[:storageSize].should < MongodbLogger::Logger::DEFAULT_COLLECTION_SIZE + 1.megabyte
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
context "after instantiation" do
|
|
112
|
+
before do
|
|
113
|
+
common_mongodb_logger_setup
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
context "upon insertion of a log record when active record is not used" do
|
|
117
|
+
before do
|
|
118
|
+
log_to_mongo("Test")
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
should_contain_one_log_record
|
|
122
|
+
|
|
123
|
+
it "allow recreation of the capped collection to remove all records" do
|
|
124
|
+
@mongo_adapter.reset_collection
|
|
125
|
+
@mongo_adapter.collection.find.count.should == 0
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
context "upon insertion of a colorized log record when ActiveRecord is used" do
|
|
130
|
+
before do
|
|
131
|
+
@log_message = "TESTING"
|
|
132
|
+
log_to_mongo("\e[31m #{@log_message} \e[0m")
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it "detect logging is colorized" do
|
|
136
|
+
@mongodb_logger.send(:logging_colorized?).should be_true
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
should_contain_one_log_record
|
|
140
|
+
|
|
141
|
+
it "strip out colorization from log messages" do
|
|
142
|
+
@mongo_adapter.collection.find({"messages.debug" => @log_message}).count.should == 1
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
it "add application metadata to the log record" do
|
|
147
|
+
options = { "application" => self.class.name }
|
|
148
|
+
log_metadata_to_mongo(options)
|
|
149
|
+
@mongo_adapter.collection.find({"application" => self.class.name}).count.should == 1
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
it "not raise an exception when bson-unserializable data is logged in the :messages key" do
|
|
153
|
+
log_to_mongo(Tempfile.new("foo"))
|
|
154
|
+
@mongo_adapter.collection.find.count.should == 1
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "not raise an exception when bson-unserializable data is logged in the :params key" do
|
|
158
|
+
log_params_to_mongo({:foo => Tempfile.new("bar")})
|
|
159
|
+
@mongo_adapter.collection.find.count.should == 1
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
context "when an exception is raised" do
|
|
163
|
+
it "log the exception" do
|
|
164
|
+
expect { log_exception_to_mongo(EXCEPTION_MSG) }.to raise_error RuntimeError, EXCEPTION_MSG
|
|
165
|
+
@mongo_adapter.collection.find({"messages.error" => /^#{EXCEPTION_MSG}/}).count.should == 1
|
|
166
|
+
@mongo_adapter.collection.find({"is_exception" => true}).count.should == 1
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
context "after configure" do
|
|
172
|
+
before do
|
|
173
|
+
MongodbLogger::Base.configure do |config|
|
|
174
|
+
config.on_log_exception do |mongo_record|
|
|
175
|
+
# do something with error
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
common_mongodb_logger_setup
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
it "not call callback function on log" do
|
|
182
|
+
MongodbLogger::Base.should_receive(:on_log_exception).exactly(0)
|
|
183
|
+
log_to_mongo("Test")
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
context "when an exception is raised" do
|
|
187
|
+
it "should call callback function" do
|
|
188
|
+
MongodbLogger::Base.should_receive(:on_log_exception).exactly(1)
|
|
189
|
+
expect { log_exception_to_mongo(EXCEPTION_MSG) }.to raise_error RuntimeError, EXCEPTION_MSG
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
context "logging at INFO level" do
|
|
195
|
+
before do
|
|
196
|
+
common_mongodb_logger_setup(level: MongodbLogger::Logger::INFO)
|
|
197
|
+
log_to_mongo("INFO")
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
should_contain_one_log_record
|
|
201
|
+
|
|
202
|
+
it "not log DEBUG messages" do
|
|
203
|
+
@mongo_adapter.collection.find({"messages.debug" => { "$exists" => true }}).count.should == 0
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
context "without file logging" do
|
|
208
|
+
before do
|
|
209
|
+
setup_for_config(MongodbLogger::SpecHelper::DEFAULT_CONFIG_WITH_NO_FILE_LOGGING, MongodbLogger::SpecHelper::DEFAULT_CONFIG)
|
|
210
|
+
@log_file = Pathname.new('log.out')
|
|
211
|
+
FileUtils.touch(@log_file)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
after do
|
|
215
|
+
File.delete(@log_file)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
context "in instantiation" do
|
|
219
|
+
it "not call super in the initialize method" do
|
|
220
|
+
described_class.should_receive(:open).exactly(0)
|
|
221
|
+
MongodbLogger::Logger.new
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
it "set log" do
|
|
225
|
+
MongodbLogger::Logger.new.instance_variable_get(:@log).should be_a_kind_of(Logger)
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
context "after instantiation" do
|
|
230
|
+
context "upon insertion of a log record" do
|
|
231
|
+
before do
|
|
232
|
+
@mongodb_logger = MongodbLogger::Logger.new(path: @log_file)
|
|
233
|
+
log_to_mongo("Test")
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
it "not log the record to a file" do
|
|
237
|
+
File.open(@log_file.to_s, "rb").read.should be_blank
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
context "with custom collection" do
|
|
244
|
+
before do
|
|
245
|
+
config = MongodbLogger::SpecHelper::DEFAULT_CONFIG_WITH_COLLECTION
|
|
246
|
+
common_mongodb_logger_setup({}, config)
|
|
247
|
+
file_path = File.join(MongodbLogger::SpecHelper::SAMPLE_CONFIG_DIR, config)
|
|
248
|
+
@file_config = YAML.load(ERB.new(File.new(file_path).read).result)[Rails.env]['mongodb_logger']
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
it "changed collection name" do
|
|
252
|
+
@mongo_adapter.collection.name.should == @file_config['collection']
|
|
253
|
+
@mongo_adapter.collection_stats[:collection].should == @file_config['collection']
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
end
|