mongodb_logger 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -1,307 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'mongodb_logger'
|
3
|
-
require 'mongodb_logger/logger'
|
4
|
-
require 'tempfile'
|
5
|
-
require 'pathname'
|
6
|
-
|
7
|
-
# test the basic stuff
|
8
|
-
class MongodbLogger::LoggerTest < Test::Unit::TestCase
|
9
|
-
extend LogMacros
|
10
|
-
|
11
|
-
EXCEPTION_MSG = "Foo"
|
12
|
-
|
13
|
-
context "A MongodbLogger::Logger" do
|
14
|
-
setup do
|
15
|
-
# Can use different configs, but most tests use database.yml
|
16
|
-
FileUtils.cp(File.join(SAMPLE_CONFIG_DIR, DEFAULT_CONFIG), CONFIG_DIR)
|
17
|
-
end
|
18
|
-
|
19
|
-
context "in instantiation" do
|
20
|
-
setup do
|
21
|
-
MongodbLogger::Logger.any_instance.stubs(:internal_initialize).returns(nil)
|
22
|
-
MongodbLogger::Logger.any_instance.stubs(:disable_file_logging?).returns(false)
|
23
|
-
@mongodb_logger = MongodbLogger::Logger.new
|
24
|
-
end
|
25
|
-
|
26
|
-
context "during configuration when using a separate " + LOGGER_CONFIG do
|
27
|
-
setup do
|
28
|
-
setup_for_config(LOGGER_CONFIG)
|
29
|
-
end
|
30
|
-
|
31
|
-
should_use_database_name_in_config
|
32
|
-
|
33
|
-
teardown do
|
34
|
-
teardown_for_config(LOGGER_CONFIG)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context "during configuration when using a separate " + MONGOID_CONFIG do
|
39
|
-
setup do
|
40
|
-
setup_for_config(MONGOID_CONFIG)
|
41
|
-
end
|
42
|
-
|
43
|
-
should_use_database_name_in_config
|
44
|
-
|
45
|
-
teardown do
|
46
|
-
teardown_for_config(MONGOID_CONFIG)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
context "upon connecting with url settings" do
|
51
|
-
setup do
|
52
|
-
setup_for_config(DEFAULT_CONFIG_WITH_URL, DEFAULT_CONFIG)
|
53
|
-
end
|
54
|
-
|
55
|
-
should "connect with the url" do
|
56
|
-
@mongodb_logger.send(:connect)
|
57
|
-
assert @mongodb_logger.mongo_adapter.authenticated?
|
58
|
-
assert_equal "system_log", @mongodb_logger.mongo_adapter.configuration['database']
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
# this test will work without the --auth mongod arg
|
63
|
-
context "upon connecting with authentication settings" do
|
64
|
-
setup do
|
65
|
-
setup_for_config(DEFAULT_CONFIG_WITH_AUTH, DEFAULT_CONFIG)
|
66
|
-
create_mongo_user
|
67
|
-
end
|
68
|
-
|
69
|
-
should "authenticate with the credentials in the configuration" do
|
70
|
-
@mongodb_logger.send(:connect)
|
71
|
-
assert @mongodb_logger.mongo_adapter.authenticated?
|
72
|
-
end
|
73
|
-
|
74
|
-
teardown do
|
75
|
-
# config will be deleted by outer teardown
|
76
|
-
remove_mongo_user
|
77
|
-
end
|
78
|
-
end
|
79
|
-
=begin
|
80
|
-
context "after configuration" do
|
81
|
-
setup do
|
82
|
-
@mongodb_logger.send(:configure)
|
83
|
-
@mongo_adapter = @mongodb_logger.mongo_adapter
|
84
|
-
end
|
85
|
-
|
86
|
-
should "set the default host, port, and capsize if not configured" do
|
87
|
-
assert_equal 'localhost', @mongo_adapter.configuration['host']
|
88
|
-
assert_equal 27017, @mongo_adapter.configuration['port']
|
89
|
-
assert_equal MongodbLogger::Logger::DEFAULT_COLLECTION_SIZE, @mongo_adapter.configuration['capsize']
|
90
|
-
end
|
91
|
-
|
92
|
-
should "set the mongo collection name depending on the Rails environment" do
|
93
|
-
assert_equal "#{Rails.env}_log", @mongo_adapter.collection_name
|
94
|
-
end
|
95
|
-
|
96
|
-
should "set the application name when specified in the config file" do
|
97
|
-
assert_equal "mongo_foo", @mongo_adapter.configuration['application_name']
|
98
|
-
end
|
99
|
-
|
100
|
-
should "set safe insert when specified in the config file" do
|
101
|
-
assert @mongo_adapter.configuration['safe_insert']
|
102
|
-
end
|
103
|
-
|
104
|
-
should "use the database name in the config file" do
|
105
|
-
assert_equal "system_log", @mongo_adapter.configuration['database']
|
106
|
-
end
|
107
|
-
|
108
|
-
context "upon connecting to an empty database" do
|
109
|
-
setup do
|
110
|
-
@mongodb_logger.send(:connect)
|
111
|
-
common_setup
|
112
|
-
@collection.drop
|
113
|
-
end
|
114
|
-
|
115
|
-
should "expose a valid mongo connection" do
|
116
|
-
assert_instance_of Mongo::DB, @mongodb_logger.mongo_connection
|
117
|
-
end
|
118
|
-
|
119
|
-
should "derive from Mongo::Connection for single host" do
|
120
|
-
assert_equal Mongo::Connection, @mongodb_logger.mongo_connection_type
|
121
|
-
end
|
122
|
-
|
123
|
-
should "not authenticate" do
|
124
|
-
assert !@mongodb_logger.authenticated?
|
125
|
-
end
|
126
|
-
|
127
|
-
should "create a capped collection in the database with the configured size" do
|
128
|
-
@mongodb_logger.send(:check_for_collection)
|
129
|
-
assert @con.collection_names.include?(@mongodb_logger.mongo_collection_name)
|
130
|
-
# new capped collections are X MB + 5888 bytes, but don't be too strict in case that changes
|
131
|
-
assert @collection.stats["storageSize"] < MongodbLogger::Logger::DEFAULT_COLLECTION_SIZE + 1.megabyte
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
=end
|
136
|
-
end
|
137
|
-
|
138
|
-
context "after instantiation" do
|
139
|
-
setup do
|
140
|
-
@mongodb_logger = MongodbLogger::Logger.new
|
141
|
-
common_setup
|
142
|
-
reset_collection
|
143
|
-
end
|
144
|
-
|
145
|
-
context "upon insertion of a log record when active record is not used" do
|
146
|
-
# mock ActiveRecord has not been included
|
147
|
-
setup do
|
148
|
-
log("Test")
|
149
|
-
end
|
150
|
-
|
151
|
-
should_contain_one_log_record
|
152
|
-
|
153
|
-
should "allow recreation of the capped collection to remove all records" do
|
154
|
-
reset_collection
|
155
|
-
assert_equal 0, @collection.count
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
context "upon insertion of a colorized log record when ActiveRecord is used" do
|
160
|
-
setup do
|
161
|
-
@log_message = "TESTING"
|
162
|
-
require_bogus_active_record
|
163
|
-
log("\e[31m #{@log_message} \e[0m")
|
164
|
-
end
|
165
|
-
|
166
|
-
should "detect logging is colorized" do
|
167
|
-
assert @mongodb_logger.send(:logging_colorized?)
|
168
|
-
end
|
169
|
-
|
170
|
-
should_contain_one_log_record
|
171
|
-
|
172
|
-
should "strip out colorization from log messages" do
|
173
|
-
assert_equal 1, @collection.find({"messages.debug" => @log_message}).count
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
should "add application metadata to the log record" do
|
178
|
-
options = {"application" => self.class.name}
|
179
|
-
log_metadata(options)
|
180
|
-
assert_equal 1, @collection.find({"application" => self.class.name}).count
|
181
|
-
end
|
182
|
-
|
183
|
-
should "not raise an exception when bson-unserializable data is logged in the :messages key" do
|
184
|
-
log(Tempfile.new("foo"))
|
185
|
-
assert_equal 1, @collection.count
|
186
|
-
end
|
187
|
-
|
188
|
-
should "not raise an exception when bson-unserializable data is logged in the :params key" do
|
189
|
-
log_params({:foo => Tempfile.new("bar")})
|
190
|
-
assert_equal 1, @collection.count
|
191
|
-
end
|
192
|
-
|
193
|
-
context "when an exception is raised" do
|
194
|
-
should "log the exception" do
|
195
|
-
assert_raise(RuntimeError, EXCEPTION_MSG) {log_exception(EXCEPTION_MSG)}
|
196
|
-
assert_equal 1, @collection.find_one({"messages.error" => /^#{EXCEPTION_MSG}/})["messages"]["error"].count
|
197
|
-
assert_equal 1, @collection.find_one({"is_exception" => true})["messages"]["error"].count
|
198
|
-
end
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
context "after configure" do
|
203
|
-
setup do
|
204
|
-
MongodbLogger::Base.configure do |config|
|
205
|
-
config.on_log_exception do |mongo_record|
|
206
|
-
# do something
|
207
|
-
end
|
208
|
-
end
|
209
|
-
@mongodb_logger = MongodbLogger::Logger.new
|
210
|
-
common_setup
|
211
|
-
reset_collection
|
212
|
-
end
|
213
|
-
|
214
|
-
should "should not call callback function on log" do
|
215
|
-
MongodbLogger::Base.expects(:on_log_exception).times(0)
|
216
|
-
log("Test")
|
217
|
-
end
|
218
|
-
|
219
|
-
context "when an exception is raised" do
|
220
|
-
should "should call callback function" do
|
221
|
-
MongodbLogger::Base.expects(:on_log_exception).times(1)
|
222
|
-
assert_raise(RuntimeError, EXCEPTION_MSG) {log_exception(EXCEPTION_MSG)}
|
223
|
-
end
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
context "logging at INFO level" do
|
228
|
-
setup do
|
229
|
-
@mongodb_logger = MongodbLogger::Logger.new(:level => MongodbLogger::Logger::INFO)
|
230
|
-
common_setup
|
231
|
-
reset_collection
|
232
|
-
log("INFO")
|
233
|
-
end
|
234
|
-
|
235
|
-
should_contain_one_log_record
|
236
|
-
|
237
|
-
should "not log DEBUG messages" do
|
238
|
-
assert_equal 0, @collection.find_one({}, :fields => ["messages"])["messages"].count
|
239
|
-
end
|
240
|
-
end
|
241
|
-
teardown do
|
242
|
-
file = File.join(CONFIG_DIR, DEFAULT_CONFIG)
|
243
|
-
File.delete(file) if File.exist?(file)
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
context "A MongodbLogger::Logger without file logging" do
|
248
|
-
setup do
|
249
|
-
FileUtils.cp(File.join(SAMPLE_CONFIG_DIR, DEFAULT_CONFIG_WITH_NO_FILE_LOGGING), File.join(CONFIG_DIR, DEFAULT_CONFIG))
|
250
|
-
@log_file = Pathname.new('log.out')
|
251
|
-
FileUtils.touch(@log_file)
|
252
|
-
end
|
253
|
-
|
254
|
-
context "in instantiation" do
|
255
|
-
should "not call super in the initialize method" do
|
256
|
-
MongodbLogger::Logger.any_instance.expects(:open).never # Stubbing out super doesn't work, so we use this side effect instead.
|
257
|
-
MongodbLogger::Logger.new
|
258
|
-
end
|
259
|
-
|
260
|
-
should "set log" do
|
261
|
-
assert MongodbLogger::Logger.new.instance_variable_get(:@log).is_a?(Logger)
|
262
|
-
end
|
263
|
-
end
|
264
|
-
|
265
|
-
context "after instantiation" do
|
266
|
-
context "upon insertion of a log record" do
|
267
|
-
setup do
|
268
|
-
@mongodb_logger = MongodbLogger::Logger.new(:path => @log_file)
|
269
|
-
log("Test")
|
270
|
-
end
|
271
|
-
|
272
|
-
should "not log the record to a file" do
|
273
|
-
assert_equal '', open(@log_file.to_s).read
|
274
|
-
end
|
275
|
-
end
|
276
|
-
end
|
277
|
-
|
278
|
-
teardown do
|
279
|
-
file = File.join(CONFIG_DIR, DEFAULT_CONFIG)
|
280
|
-
File.delete(file) if File.exist?(file)
|
281
|
-
File.delete(@log_file)
|
282
|
-
end
|
283
|
-
end
|
284
|
-
|
285
|
-
context "A MongodbLogger::Logger with custom collection" do
|
286
|
-
setup do
|
287
|
-
file_path = File.join(SAMPLE_CONFIG_DIR, DEFAULT_CONFIG_WITH_COLLECTION)
|
288
|
-
FileUtils.cp(file_path, File.join(CONFIG_DIR, DEFAULT_CONFIG))
|
289
|
-
@mongodb_logger = MongodbLogger::Logger.new
|
290
|
-
common_setup
|
291
|
-
reset_collection
|
292
|
-
|
293
|
-
@file_config = YAML.load(ERB.new(File.new(file_path).read).result)[Rails.env]['mongodb_logger']
|
294
|
-
end
|
295
|
-
|
296
|
-
should "changed collection name" do
|
297
|
-
assert_equal @file_config['collection'], @collection.name
|
298
|
-
assert_equal "#{@file_config['database']}.#{@file_config['collection']}", @collection.stats()['ns']
|
299
|
-
end
|
300
|
-
|
301
|
-
teardown do
|
302
|
-
file = File.join(CONFIG_DIR, DEFAULT_CONFIG)
|
303
|
-
File.delete(file) if File.exist?(file)
|
304
|
-
end
|
305
|
-
end
|
306
|
-
|
307
|
-
end
|