central_logger 0.1.1 → 0.2.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/Gemfile +0 -6
- data/Gemfile.lock +4 -65
- data/README.md +18 -2
- data/Rakefile +32 -6
- data/VERSION +1 -1
- data/central_logger.gemspec +8 -4
- data/lib/central_logger.rb +1 -1
- data/lib/central_logger/filter.rb +6 -2
- data/lib/central_logger/mongo_logger.rb +30 -8
- data/lib/{railtie.rb → central_logger/railtie.rb} +0 -0
- data/test/config/samples/central_logger.yml +2 -0
- data/test/config/{database.yml → samples/database.yml} +0 -0
- data/test/config/samples/database_with_auth.yml +8 -0
- data/test/config/samples/mongoid.yml +31 -0
- data/test/shoulda_macros/log_macros.rb +6 -0
- data/test/test.sh +91 -0
- data/test/test_helper.rb +31 -0
- data/test/unit/central_logger_test.rb +82 -19
- metadata +10 -6
data/Gemfile
CHANGED
@@ -5,12 +5,6 @@ gem "bundler", "~> 1.0.0"
|
|
5
5
|
gem "mongo"
|
6
6
|
gem "bson_ext"
|
7
7
|
|
8
|
-
group :production do
|
9
|
-
# don't want to force development to have this requirement, because every
|
10
|
-
# Rails dependency is mocked
|
11
|
-
gem "rails",">= 2.3.8"
|
12
|
-
end
|
13
|
-
|
14
8
|
group :development do
|
15
9
|
# adds Bundler support for gemspec generation
|
16
10
|
gem "jeweler", "~> 1.5.0.pre5"
|
data/Gemfile.lock
CHANGED
@@ -1,42 +1,11 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
abstract (1.0.0)
|
5
|
-
actionmailer (3.0.1)
|
6
|
-
actionpack (= 3.0.1)
|
7
|
-
mail (~> 2.2.5)
|
8
|
-
actionpack (3.0.1)
|
9
|
-
activemodel (= 3.0.1)
|
10
|
-
activesupport (= 3.0.1)
|
11
|
-
builder (~> 2.1.2)
|
12
|
-
erubis (~> 2.6.6)
|
13
|
-
i18n (~> 0.4.1)
|
14
|
-
rack (~> 1.2.1)
|
15
|
-
rack-mount (~> 0.6.12)
|
16
|
-
rack-test (~> 0.5.4)
|
17
|
-
tzinfo (~> 0.3.23)
|
18
|
-
activemodel (3.0.1)
|
19
|
-
activesupport (= 3.0.1)
|
20
|
-
builder (~> 2.1.2)
|
21
|
-
i18n (~> 0.4.1)
|
22
|
-
activerecord (3.0.1)
|
23
|
-
activemodel (= 3.0.1)
|
24
|
-
activesupport (= 3.0.1)
|
25
|
-
arel (~> 1.0.0)
|
26
|
-
tzinfo (~> 0.3.23)
|
27
|
-
activeresource (3.0.1)
|
28
|
-
activemodel (= 3.0.1)
|
29
|
-
activesupport (= 3.0.1)
|
30
4
|
activesupport (3.0.1)
|
31
5
|
archive-tar-minitar (0.5.2)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
bson_ext (1.1.1)
|
36
|
-
builder (2.1.2)
|
37
|
-
columnize (0.3.1)
|
38
|
-
erubis (2.6.6)
|
39
|
-
abstract (>= 1.0.0)
|
6
|
+
bson (1.1.2)
|
7
|
+
bson_ext (1.1.2)
|
8
|
+
columnize (0.3.2)
|
40
9
|
git (1.2.5)
|
41
10
|
i18n (0.4.2)
|
42
11
|
jeweler (1.5.0.pre5)
|
@@ -45,35 +14,10 @@ GEM
|
|
45
14
|
rake
|
46
15
|
linecache19 (0.5.11)
|
47
16
|
ruby_core_source (>= 0.1.4)
|
48
|
-
mail (2.2.9)
|
49
|
-
activesupport (>= 2.3.6)
|
50
|
-
i18n (~> 0.4.1)
|
51
|
-
mime-types (~> 1.16)
|
52
|
-
treetop (~> 1.4.8)
|
53
|
-
mime-types (1.16)
|
54
17
|
mocha (0.9.9)
|
55
18
|
rake
|
56
|
-
mongo (1.1.
|
19
|
+
mongo (1.1.2)
|
57
20
|
bson (>= 1.1.1)
|
58
|
-
polyglot (0.3.1)
|
59
|
-
rack (1.2.1)
|
60
|
-
rack-mount (0.6.13)
|
61
|
-
rack (>= 1.0.0)
|
62
|
-
rack-test (0.5.6)
|
63
|
-
rack (>= 1.0)
|
64
|
-
rails (3.0.1)
|
65
|
-
actionmailer (= 3.0.1)
|
66
|
-
actionpack (= 3.0.1)
|
67
|
-
activerecord (= 3.0.1)
|
68
|
-
activeresource (= 3.0.1)
|
69
|
-
activesupport (= 3.0.1)
|
70
|
-
bundler (~> 1.0.0)
|
71
|
-
railties (= 3.0.1)
|
72
|
-
railties (3.0.1)
|
73
|
-
actionpack (= 3.0.1)
|
74
|
-
activesupport (= 3.0.1)
|
75
|
-
rake (>= 0.8.4)
|
76
|
-
thor (~> 0.14.0)
|
77
21
|
rake (0.8.7)
|
78
22
|
ruby-debug-base19 (0.11.24)
|
79
23
|
columnize (>= 0.3.1)
|
@@ -86,10 +30,6 @@ GEM
|
|
86
30
|
ruby_core_source (0.1.4)
|
87
31
|
archive-tar-minitar (>= 0.5.2)
|
88
32
|
shoulda (2.11.3)
|
89
|
-
thor (0.14.3)
|
90
|
-
treetop (1.4.8)
|
91
|
-
polyglot (>= 0.3.1)
|
92
|
-
tzinfo (0.3.23)
|
93
33
|
|
94
34
|
PLATFORMS
|
95
35
|
ruby
|
@@ -102,7 +42,6 @@ DEPENDENCIES
|
|
102
42
|
jeweler (~> 1.5.0.pre5)
|
103
43
|
mocha
|
104
44
|
mongo
|
105
|
-
rails (>= 2.3.8)
|
106
45
|
rake
|
107
46
|
ruby-debug19
|
108
47
|
shoulda
|
data/README.md
CHANGED
@@ -21,7 +21,11 @@ Log to a central MongoDB from Rails apps.
|
|
21
21
|
require 'central_logger'
|
22
22
|
CentralLogger::Initializer.initialize_deprecated_logger(config)
|
23
23
|
|
24
|
-
1. Add mongo settings to database.yml for each environment in which you want to use the Central Logger
|
24
|
+
1. Add mongo settings to database.yml for each environment in which you want to use the Central Logger. The central logger will also
|
25
|
+
look for a separate central_logger.yml or mongoid.yml (if you are using mongoid) before looking in database.yml.
|
26
|
+
In the central_logger.yml and mongoid.yml case, the settings should be defined without the 'mongo' subkey.
|
27
|
+
|
28
|
+
database.yml:
|
25
29
|
|
26
30
|
development:
|
27
31
|
adapter: mysql
|
@@ -33,13 +37,21 @@ Log to a central MongoDB from Rails apps.
|
|
33
37
|
host: localhost # default: localhost
|
34
38
|
port: 27017 # default: 27017
|
35
39
|
|
40
|
+
central_logger.yml:
|
41
|
+
|
42
|
+
development:
|
43
|
+
database: my_app
|
44
|
+
capsize: <%= 10.megabytes %>
|
45
|
+
host: localhost
|
46
|
+
port: 27017
|
47
|
+
|
36
48
|
With that in place, a new MongoDB document (record) will be created for each request and,
|
37
49
|
by default will record the following information: Runtime, IP Address, Request Time, Controller,
|
38
50
|
Action, Params, Application Name and All messages sent to the logger. The structure of the Mongo document looks like this:
|
39
51
|
|
40
52
|
{
|
41
53
|
'action' : action_name,
|
42
|
-
'application_name' :
|
54
|
+
'application_name' : application_name (rails root),
|
43
55
|
'controller' : controller_name,
|
44
56
|
'ip' : ip_address,
|
45
57
|
'messages' : {
|
@@ -97,4 +109,8 @@ Find all requests with an exception that contains "RoutingError" in the message
|
|
97
109
|
|
98
110
|
>> collection.find({"messages.error" => /RoutingError/})
|
99
111
|
|
112
|
+
Find all requests with a request_date greater than '11/18/2010 22:59:52 GMT'
|
113
|
+
|
114
|
+
>> collection.find({:request_time => {'$gt' => Time.utc(2010, 11, 18, 22, 59, 52)}})
|
115
|
+
|
100
116
|
Copyright (c) 2009 Phil Burrows, released under the MIT license
|
data/Rakefile
CHANGED
@@ -6,8 +6,8 @@ require 'bundler'
|
|
6
6
|
require 'jeweler'
|
7
7
|
|
8
8
|
desc 'Default: run unit tests.'
|
9
|
-
task :default => :
|
10
|
-
task :test => :
|
9
|
+
task :default => "test:units"
|
10
|
+
task :test => "test:functionals"
|
11
11
|
|
12
12
|
begin
|
13
13
|
Bundler.setup(:default, :development)
|
@@ -24,13 +24,39 @@ Jeweler::Tasks.new do |gem|
|
|
24
24
|
gem.email = "astupka@customink.com"
|
25
25
|
gem.homepage = "http://github.com/customink/central_logger"
|
26
26
|
gem.authors = ["Phil Burrows", "Alex Stupka"]
|
27
|
+
gem.files.exclude 'test/rails/**/*'
|
28
|
+
gem.test_files.exclude 'test/rails/**/*'
|
27
29
|
end
|
28
30
|
# dependencies defined in Gemfile
|
29
31
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
32
|
+
def rake_functionals(opts=nil)
|
33
|
+
if ENV['RUBYOPT']
|
34
|
+
# remove bundler/setup require that prematurely checks for gems and crashes
|
35
|
+
ENV['RUBYOPT'] = ENV['RUBYOPT'].gsub(%r{-r\s*bundler/setup}, '')
|
36
|
+
end
|
37
|
+
# runs all the tests for each ruby version in each rails dir
|
38
|
+
system("bash test/test.sh #{opts}")
|
39
|
+
end
|
40
|
+
|
41
|
+
namespace :test do
|
42
|
+
desc "Run all tests against all permutations of ruby and rails"
|
43
|
+
task :functionals do
|
44
|
+
rake_functionals
|
45
|
+
end
|
46
|
+
|
47
|
+
namespace :functionals do
|
48
|
+
desc "Clean out gemsets before running functional tests."
|
49
|
+
task :clean do
|
50
|
+
rake_functionals('--clean')
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
desc "Run unit tests"
|
55
|
+
Rake::TestTask.new(:units) do |test|
|
56
|
+
test.libs << 'lib' << 'test'
|
57
|
+
test.pattern = 'test/unit/*_test.rb'
|
58
|
+
test.verbose = true
|
59
|
+
end
|
34
60
|
end
|
35
61
|
|
36
62
|
Rake::RDocTask.new do |rdoc|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/central_logger.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{central_logger}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Phil Burrows", "Alex Stupka"]
|
12
|
-
s.date = %q{2010-11-
|
12
|
+
s.date = %q{2010-11-30}
|
13
13
|
s.description = %q{Centralized logging for rails apps using MongoDB. The idea and the core code is from http://github.com/peburrows/central_logger}
|
14
14
|
s.email = %q{astupka@customink.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -29,11 +29,15 @@ Gem::Specification.new do |s|
|
|
29
29
|
"lib/central_logger/initializer.rb",
|
30
30
|
"lib/central_logger/initializer_mixin.rb",
|
31
31
|
"lib/central_logger/mongo_logger.rb",
|
32
|
-
"lib/railtie.rb",
|
32
|
+
"lib/central_logger/railtie.rb",
|
33
33
|
"test/active_record.rb",
|
34
|
-
"test/config/
|
34
|
+
"test/config/samples/central_logger.yml",
|
35
|
+
"test/config/samples/database.yml",
|
36
|
+
"test/config/samples/database_with_auth.yml",
|
37
|
+
"test/config/samples/mongoid.yml",
|
35
38
|
"test/rails.rb",
|
36
39
|
"test/shoulda_macros/log_macros.rb",
|
40
|
+
"test/test.sh",
|
37
41
|
"test/test_helper.rb",
|
38
42
|
"test/unit/central_logger_test.rb"
|
39
43
|
]
|
data/lib/central_logger.rb
CHANGED
@@ -7,8 +7,12 @@ module CentralLogger
|
|
7
7
|
def enable_central_logger
|
8
8
|
return yield unless Rails.logger.respond_to?(:mongoize)
|
9
9
|
|
10
|
-
# make sure the controller knows how to filter its parameters
|
11
|
-
f_params =
|
10
|
+
# make sure the controller knows how to filter its parameters (Rails 3, 2, respectively)
|
11
|
+
f_params = case
|
12
|
+
when request.respond_to?(:filtered_parameters) then request.filtered_parameters
|
13
|
+
when respond_to?(:filter_parameters) then filter_parameters(params)
|
14
|
+
else params
|
15
|
+
end
|
12
16
|
Rails.logger.mongoize({
|
13
17
|
:action => action_name,
|
14
18
|
:controller => controller_name,
|
@@ -7,6 +7,8 @@ module CentralLogger
|
|
7
7
|
class MongoLogger < ActiveSupport::BufferedLogger
|
8
8
|
PRODUCTION_COLLECTION_SIZE = 250.megabytes
|
9
9
|
DEFAULT_COLLECTION_SIZE = 100.megabytes
|
10
|
+
# Looks for configuration files in this order
|
11
|
+
CONFIGURATION_FILES = ["central_logger.yml", "mongoid.yml", "database.yml"]
|
10
12
|
|
11
13
|
attr_reader :db_configuration, :mongo_connection, :mongo_collection_name
|
12
14
|
|
@@ -16,9 +18,8 @@ module CentralLogger
|
|
16
18
|
super(path, level)
|
17
19
|
internal_initialize
|
18
20
|
rescue => e
|
19
|
-
#
|
20
|
-
|
21
|
-
puts e.message + "\n" + e.backtrace.join("\n")
|
21
|
+
# should use a config block for this
|
22
|
+
Rails.env.production? ? (raise e) : (puts "Using BufferedLogger due to exception: " + e.message)
|
22
23
|
end
|
23
24
|
|
24
25
|
def add_metadata(options={})
|
@@ -64,6 +65,10 @@ module CentralLogger
|
|
64
65
|
insert_log_record(runtime)
|
65
66
|
end
|
66
67
|
|
68
|
+
def authenticated?
|
69
|
+
@authenticated
|
70
|
+
end
|
71
|
+
|
67
72
|
private
|
68
73
|
# facilitate testing
|
69
74
|
def internal_initialize
|
@@ -74,21 +79,38 @@ module CentralLogger
|
|
74
79
|
|
75
80
|
def configure
|
76
81
|
default_capsize = Rails.env.production? ? PRODUCTION_COLLECTION_SIZE : DEFAULT_COLLECTION_SIZE
|
77
|
-
user_config = YAML::load(ERB.new(IO.read(File.join(Rails.root, 'config/database.yml'))).result)[Rails.env]['mongo'] || {}
|
78
82
|
@application_name = Rails.root.basename.to_s
|
79
|
-
|
80
83
|
@mongo_collection_name = "#{Rails.env}_log"
|
81
|
-
|
84
|
+
@authenticated = false
|
82
85
|
@db_configuration = {
|
83
86
|
'host' => 'localhost',
|
84
87
|
'port' => 27017,
|
85
|
-
'capsize' => default_capsize}.merge(
|
88
|
+
'capsize' => default_capsize}.merge(resolve_config)
|
89
|
+
end
|
90
|
+
|
91
|
+
def resolve_config
|
92
|
+
config = {}
|
93
|
+
CONFIGURATION_FILES.each do |filename|
|
94
|
+
config_file = Rails.root.join("config", filename)
|
95
|
+
if config_file.file?
|
96
|
+
config = YAML.load(ERB.new(config_file.read).result)[Rails.env]
|
97
|
+
config = config['mongo'] if config.has_key?('mongo')
|
98
|
+
break
|
99
|
+
end
|
100
|
+
end
|
101
|
+
config
|
86
102
|
end
|
87
103
|
|
88
104
|
def connect
|
89
105
|
@mongo_connection ||= Mongo::Connection.new(@db_configuration['host'],
|
90
106
|
@db_configuration['port'],
|
91
107
|
:auto_reconnect => true).db(@db_configuration['database'])
|
108
|
+
|
109
|
+
if @db_configuration['username'] && @db_configuration['password']
|
110
|
+
# the driver stores credentials in case reconnection is required
|
111
|
+
@authenticated = @mongo_connection.authenticate(@db_configuration['username'],
|
112
|
+
@db_configuration['password'])
|
113
|
+
end
|
92
114
|
end
|
93
115
|
|
94
116
|
def create_collection
|
@@ -120,7 +142,7 @@ module CentralLogger
|
|
120
142
|
end
|
121
143
|
|
122
144
|
def logging_colorized?
|
123
|
-
# Cache it since these ActiveRecord attributes are assigned after logger initialization occurs
|
145
|
+
# Cache it since these ActiveRecord attributes are assigned after logger initialization occurs in Rails boot
|
124
146
|
@colorized ||= Object.const_defined?(:ActiveRecord) &&
|
125
147
|
(Rails::VERSION::MAJOR >= 3 ?
|
126
148
|
ActiveRecord::LogSubscriber.colorize_logging :
|
File without changes
|
File without changes
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# taken from http://mongoid.org/docs/installation/
|
2
|
+
defaults: &defaults
|
3
|
+
host: localhost
|
4
|
+
slaves:
|
5
|
+
- host: slave1.local
|
6
|
+
port: 27018
|
7
|
+
- host: slave2.local
|
8
|
+
port: 27019
|
9
|
+
autocreate_indexes: false
|
10
|
+
allow_dynamic_fields: true
|
11
|
+
include_root_in_json: false
|
12
|
+
parameterize_keys: true
|
13
|
+
persist_in_safe_mode: false
|
14
|
+
raise_not_found_error: true
|
15
|
+
reconnect_time: 3
|
16
|
+
|
17
|
+
development:
|
18
|
+
<<: *defaults
|
19
|
+
database: control_development
|
20
|
+
|
21
|
+
test:
|
22
|
+
<<: *defaults
|
23
|
+
database: system_log
|
24
|
+
|
25
|
+
# set these environment variables on your prod server
|
26
|
+
production:
|
27
|
+
<<: *defaults
|
28
|
+
host: <%= ENV['MONGOID_HOST'] %>
|
29
|
+
port: <%= ENV['MONGOID_PORT'] %>
|
30
|
+
database: <%= ENV['MONGOID_DATABASE'] %>
|
31
|
+
|
@@ -4,4 +4,10 @@ module LogMacros
|
|
4
4
|
assert_equal 1, @con[@central_logger.mongo_collection_name].count
|
5
5
|
end
|
6
6
|
end
|
7
|
+
|
8
|
+
def should_use_database_name_in_config
|
9
|
+
should "use the database name in the config file" do
|
10
|
+
assert_equal "system_log", @central_logger.db_configuration['database']
|
11
|
+
end
|
12
|
+
end
|
7
13
|
end
|
data/test/test.sh
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
# This script uses rvm and gemsets to test the gem against all versions of ruby
|
3
|
+
# (RUBY_VERSIONS) and all rails versions in the test/rails directories
|
4
|
+
# (RAILS_VERSIONS).
|
5
|
+
|
6
|
+
# If these aren't unset, bundler always uses them to find itself and the
|
7
|
+
# root project gemfile
|
8
|
+
unset BUNDLE_BIN_PATH
|
9
|
+
unset BUNDLE_GEMFILE
|
10
|
+
|
11
|
+
RAILS_VERSIONS='2 3'
|
12
|
+
RUBY_VERSIONS='1.8.7 1.9.2'
|
13
|
+
PROJECT_GEMSET='central_logger'
|
14
|
+
RAILS_DIR=rails
|
15
|
+
RAILS_RAKE_TASK_MODIFIER=':functionals'
|
16
|
+
RAKE_UNIT_TASK_MODIFIER=':units'
|
17
|
+
CLEAN=0
|
18
|
+
VALID_OPT='--clean'
|
19
|
+
|
20
|
+
function usage() {
|
21
|
+
echo 'Usage: ' $0 "[${VALID_OPT}]"
|
22
|
+
echo 'Options:' $VALID_OPT 'Delete and recreate all gemsets before running tests'
|
23
|
+
exit 1
|
24
|
+
}
|
25
|
+
|
26
|
+
ARG=$1
|
27
|
+
if [ $# -gt 1 ] || [ ${ARG:-$VALID_OPT} != $VALID_OPT ]; then
|
28
|
+
usage
|
29
|
+
elif [ -n "$1" ]; then
|
30
|
+
CLEAN=1
|
31
|
+
fi
|
32
|
+
|
33
|
+
# Load RVM into a shell session *as a function*
|
34
|
+
if [[ -s "$HOME/.rvm/scripts/rvm" ]]; then
|
35
|
+
# First try to load from a user install
|
36
|
+
source "$HOME/.rvm/scripts/rvm"
|
37
|
+
elif [[ -s "/usr/local/rvm/scripts/rvm" ]]; then
|
38
|
+
# Then try to load from a root install
|
39
|
+
source "/usr/local/rvm/scripts/rvm"
|
40
|
+
else
|
41
|
+
printf "ERROR: An RVM installation was not found.\n"
|
42
|
+
exit 1
|
43
|
+
fi
|
44
|
+
|
45
|
+
# deletes and recreates a gemset
|
46
|
+
function clean_gemset() {
|
47
|
+
RUBY=$1; GEMSET=$2
|
48
|
+
# easier than checking and emptying/creating
|
49
|
+
rvm --force gemset delete ${RUBY}@${GEMSET}
|
50
|
+
rvm gemset create $GEMSET
|
51
|
+
}
|
52
|
+
|
53
|
+
# runs rake test, optionally cleaning the gemset
|
54
|
+
function rake_test() {
|
55
|
+
RUBY=$1; GEMSET=$2; SUBTASK=$3
|
56
|
+
echo
|
57
|
+
echo "-----------Running tests for '${RUBY}@${GEMSET}'------------"
|
58
|
+
rvm $RUBY
|
59
|
+
|
60
|
+
if [ $CLEAN -eq 1 ]; then
|
61
|
+
clean_gemset $RUBY $GEMSET
|
62
|
+
rvm gemset use $GEMSET
|
63
|
+
bundle install
|
64
|
+
else
|
65
|
+
rvm gemset use $GEMSET
|
66
|
+
fi
|
67
|
+
|
68
|
+
# 'rvm $RUBY_VER rake' doesn't work with bundle install
|
69
|
+
rake test${SUBTASK}
|
70
|
+
if [ $? -ne 0 ]; then exit 1; fi
|
71
|
+
}
|
72
|
+
|
73
|
+
# Loop through all perms of rubies and rails
|
74
|
+
cd test
|
75
|
+
for RBV in $RUBY_VERSIONS; do
|
76
|
+
rake_test $RBV $PROJECT_GEMSET $RAKE_UNIT_TASK_MODIFIER
|
77
|
+
|
78
|
+
NEXT_DIR=$RAILS_DIR
|
79
|
+
for RV in $RAILS_VERSIONS; do
|
80
|
+
if [ "$NEXT_DIR" == "$RAILS_DIR" ]; then
|
81
|
+
NEXT_DIR=${NEXT_DIR}/${RV}
|
82
|
+
else
|
83
|
+
NEXT_DIR=../${RV}
|
84
|
+
fi
|
85
|
+
cd $NEXT_DIR
|
86
|
+
|
87
|
+
rake_test $RBV ${PROJECT_GEMSET}_${RV} $RAILS_RAKE_TASK_MODIFIER
|
88
|
+
done
|
89
|
+
|
90
|
+
cd ../..
|
91
|
+
done
|
data/test/test_helper.rb
CHANGED
@@ -4,6 +4,7 @@ require 'mocha'
|
|
4
4
|
# mock rails class
|
5
5
|
require 'pathname'
|
6
6
|
require 'rails'
|
7
|
+
require 'fileutils'
|
7
8
|
|
8
9
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
9
10
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
@@ -11,6 +12,13 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
11
12
|
Shoulda.autoload_macros("#{File.dirname(__FILE__)}/..")
|
12
13
|
|
13
14
|
class Test::Unit::TestCase
|
15
|
+
CONFIG_DIR = Rails.root.join("config")
|
16
|
+
SAMPLE_CONFIG_DIR = File.join(CONFIG_DIR, "samples")
|
17
|
+
DEFAULT_CONFIG = "database.yml"
|
18
|
+
DEFAULT_CONFIG_WITH_AUTH = "database_with_auth.yml"
|
19
|
+
MONGOID_CONFIG = "mongoid.yml"
|
20
|
+
LOGGER_CONFIG = "central_logger.yml"
|
21
|
+
|
14
22
|
def log(msg)
|
15
23
|
@central_logger.mongoize({"id" => 1}) do
|
16
24
|
@central_logger.debug(msg)
|
@@ -23,6 +31,16 @@ class Test::Unit::TestCase
|
|
23
31
|
end
|
24
32
|
end
|
25
33
|
|
34
|
+
def setup_for_config(source, dest=source)
|
35
|
+
File.delete(File.join(CONFIG_DIR, DEFAULT_CONFIG))
|
36
|
+
FileUtils.cp(File.join(SAMPLE_CONFIG_DIR, source), File.join(CONFIG_DIR, dest))
|
37
|
+
@central_logger.send(:configure)
|
38
|
+
end
|
39
|
+
|
40
|
+
def teardown_for_config(file)
|
41
|
+
File.delete(File.join(CONFIG_DIR, file))
|
42
|
+
end
|
43
|
+
|
26
44
|
def log_metadata(options)
|
27
45
|
@central_logger.mongoize({"id" => 1}) do
|
28
46
|
@central_logger.add_metadata(options)
|
@@ -37,4 +55,17 @@ class Test::Unit::TestCase
|
|
37
55
|
@con = @central_logger.mongo_connection
|
38
56
|
@collection = @con[@central_logger.mongo_collection_name]
|
39
57
|
end
|
58
|
+
|
59
|
+
def create_user
|
60
|
+
db_conf = @central_logger.db_configuration
|
61
|
+
@user = db_conf['username']
|
62
|
+
mongo_connection = Mongo::Connection.new(db_conf['host'],
|
63
|
+
db_conf['port']).db(db_conf['database'])
|
64
|
+
mongo_connection.add_user(@user, db_conf['password'])
|
65
|
+
end
|
66
|
+
|
67
|
+
def remove_user
|
68
|
+
@central_logger.mongo_connection.remove_user(@user)
|
69
|
+
end
|
70
|
+
|
40
71
|
end
|
@@ -8,39 +8,99 @@ class CentralLogger::MongoLoggerTest < Test::Unit::TestCase
|
|
8
8
|
EXCEPTION_MSG = "Foo"
|
9
9
|
|
10
10
|
context "A CentralLogger::MongoLogger" do
|
11
|
-
|
11
|
+
setup do
|
12
|
+
# Can use different configs, but most tests use database.yml
|
13
|
+
FileUtils.cp(File.join(SAMPLE_CONFIG_DIR, DEFAULT_CONFIG), CONFIG_DIR)
|
14
|
+
end
|
15
|
+
|
16
|
+
context "in instantiation" do
|
12
17
|
setup do
|
13
18
|
CentralLogger::MongoLogger.any_instance.stubs(:internal_initialize).returns(nil)
|
14
19
|
@central_logger = CentralLogger::MongoLogger.new
|
15
|
-
@central_logger.send(:configure)
|
16
20
|
end
|
17
21
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
+
context "during configuration when using a separate " + LOGGER_CONFIG do
|
23
|
+
setup do
|
24
|
+
setup_for_config(LOGGER_CONFIG)
|
25
|
+
end
|
26
|
+
|
27
|
+
should_use_database_name_in_config
|
28
|
+
|
29
|
+
teardown do
|
30
|
+
teardown_for_config(LOGGER_CONFIG)
|
31
|
+
end
|
22
32
|
end
|
23
33
|
|
24
|
-
|
25
|
-
|
34
|
+
context "during configuration when using a separate " + MONGOID_CONFIG do
|
35
|
+
setup do
|
36
|
+
setup_for_config(MONGOID_CONFIG)
|
37
|
+
end
|
38
|
+
|
39
|
+
should_use_database_name_in_config
|
40
|
+
|
41
|
+
teardown do
|
42
|
+
teardown_for_config(MONGOID_CONFIG)
|
43
|
+
end
|
26
44
|
end
|
27
45
|
|
28
|
-
|
46
|
+
# this test will work without the --auth mongod arg
|
47
|
+
context "upon connecting with authentication settings" do
|
29
48
|
setup do
|
49
|
+
setup_for_config(DEFAULT_CONFIG_WITH_AUTH, DEFAULT_CONFIG)
|
50
|
+
create_user
|
51
|
+
end
|
52
|
+
|
53
|
+
should "authenticate with the credentials in the configuration" do
|
30
54
|
@central_logger.send(:connect)
|
31
|
-
|
32
|
-
|
55
|
+
assert @central_logger.authenticated?
|
56
|
+
end
|
57
|
+
|
58
|
+
teardown do
|
59
|
+
# config will be deleted by outer teardown
|
60
|
+
remove_user
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context "after configuration" do
|
65
|
+
setup do
|
66
|
+
@central_logger.send(:configure)
|
33
67
|
end
|
34
68
|
|
35
|
-
should "
|
36
|
-
|
69
|
+
should "set the default host, port, and capsize if not configured" do
|
70
|
+
assert_equal 'localhost', @central_logger.db_configuration['host']
|
71
|
+
assert_equal 27017, @central_logger.db_configuration['port']
|
72
|
+
assert_equal CentralLogger::MongoLogger::DEFAULT_COLLECTION_SIZE, @central_logger.db_configuration['capsize']
|
37
73
|
end
|
38
74
|
|
39
|
-
should "
|
40
|
-
@central_logger.
|
41
|
-
|
42
|
-
|
43
|
-
|
75
|
+
should "set the mongo collection name depending on the Rails environment" do
|
76
|
+
assert_equal "#{Rails.env}_log", @central_logger.mongo_collection_name
|
77
|
+
end
|
78
|
+
|
79
|
+
should "use the database name in the config file" do
|
80
|
+
assert_equal "system_log", @central_logger.db_configuration['database']
|
81
|
+
end
|
82
|
+
|
83
|
+
context "upon connecting to an empty database" do
|
84
|
+
setup do
|
85
|
+
@central_logger.send(:connect)
|
86
|
+
common_setup
|
87
|
+
@collection.drop
|
88
|
+
end
|
89
|
+
|
90
|
+
should "expose a valid mongo connection" do
|
91
|
+
assert_instance_of Mongo::DB, @central_logger.mongo_connection
|
92
|
+
end
|
93
|
+
|
94
|
+
should "not authenticate" do
|
95
|
+
assert !@central_logger.authenticated?
|
96
|
+
end
|
97
|
+
|
98
|
+
should "create a capped collection in the database with the configured size" do
|
99
|
+
@central_logger.send(:check_for_collection)
|
100
|
+
assert @con.collection_names.include?(@central_logger.mongo_collection_name)
|
101
|
+
# new capped collections are X MB + 5888 bytes, but don't be too strict in case that changes
|
102
|
+
assert @collection.stats["storageSize"] < CentralLogger::MongoLogger::DEFAULT_COLLECTION_SIZE + 1.megabyte
|
103
|
+
end
|
44
104
|
end
|
45
105
|
end
|
46
106
|
end
|
@@ -112,6 +172,9 @@ class CentralLogger::MongoLoggerTest < Test::Unit::TestCase
|
|
112
172
|
assert_equal 0, @collection.find_one({}, :fields => ["messages"])["messages"].count
|
113
173
|
end
|
114
174
|
end
|
115
|
-
|
175
|
+
teardown do
|
176
|
+
file = File.join(CONFIG_DIR, DEFAULT_CONFIG)
|
177
|
+
File.delete(file) if File.exist?(file)
|
178
|
+
end
|
116
179
|
end
|
117
180
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Phil Burrows
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-30 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -175,11 +175,15 @@ files:
|
|
175
175
|
- lib/central_logger/initializer.rb
|
176
176
|
- lib/central_logger/initializer_mixin.rb
|
177
177
|
- lib/central_logger/mongo_logger.rb
|
178
|
-
- lib/railtie.rb
|
178
|
+
- lib/central_logger/railtie.rb
|
179
179
|
- test/active_record.rb
|
180
|
-
- test/config/
|
180
|
+
- test/config/samples/central_logger.yml
|
181
|
+
- test/config/samples/database.yml
|
182
|
+
- test/config/samples/database_with_auth.yml
|
183
|
+
- test/config/samples/mongoid.yml
|
181
184
|
- test/rails.rb
|
182
185
|
- test/shoulda_macros/log_macros.rb
|
186
|
+
- test/test.sh
|
183
187
|
- test/test_helper.rb
|
184
188
|
- test/unit/central_logger_test.rb
|
185
189
|
has_rdoc: true
|