central_logger 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|