mongo 2.1.0.beta → 2.1.0.rc0
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/Rakefile +2 -2
- data/lib/mongo.rb +2 -3
- data/lib/mongo/address.rb +7 -5
- data/lib/mongo/address/unix.rb +2 -2
- data/lib/mongo/auth/ldap/conversation.rb +6 -2
- data/lib/mongo/auth/scram/conversation.rb +8 -2
- data/lib/mongo/auth/user/view.rb +21 -0
- data/lib/mongo/bulk_write.rb +155 -23
- data/lib/mongo/bulk_write/combineable.rb +51 -0
- data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
- data/lib/mongo/bulk_write/result.rb +61 -8
- data/lib/mongo/bulk_write/result_combiner.rb +117 -0
- data/lib/mongo/bulk_write/transformable.rb +117 -0
- data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
- data/lib/mongo/bulk_write/validatable.rb +62 -0
- data/lib/mongo/client.rb +7 -3
- data/lib/mongo/cluster.rb +3 -3
- data/lib/mongo/cluster/topology/replica_set.rb +8 -6
- data/lib/mongo/cluster/topology/unknown.rb +5 -2
- data/lib/mongo/collection.rb +75 -4
- data/lib/mongo/collection/view.rb +1 -2
- data/lib/mongo/collection/view/aggregation.rb +13 -8
- data/lib/mongo/collection/view/immutable.rb +6 -6
- data/lib/mongo/collection/view/iterable.rb +13 -4
- data/lib/mongo/collection/view/map_reduce.rb +22 -17
- data/lib/mongo/collection/view/readable.rb +121 -70
- data/lib/mongo/cursor.rb +5 -1
- data/lib/mongo/database.rb +3 -3
- data/lib/mongo/database/view.rb +1 -1
- data/lib/mongo/error.rb +7 -0
- data/lib/mongo/{bulk_write/unordered_bulk_write.rb → error/closed_stream.rb} +12 -21
- data/lib/mongo/{bulk_write/ordered_bulk_write.rb → error/extra_file_chunk.rb} +13 -27
- data/lib/mongo/error/file_not_found.rb +37 -0
- data/lib/mongo/error/invalid_file.rb +2 -2
- data/lib/mongo/error/invalid_file_revision.rb +37 -0
- data/lib/mongo/error/invalid_uri.rb +5 -4
- data/lib/mongo/error/missing_file_chunk.rb +38 -0
- data/lib/mongo/error/operation_failure.rb +1 -1
- data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
- data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
- data/lib/mongo/grid.rb +2 -1
- data/lib/mongo/grid/file.rb +12 -9
- data/lib/mongo/grid/file/chunk.rb +6 -6
- data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
- data/lib/mongo/grid/fs_bucket.rb +441 -0
- data/lib/mongo/grid/stream.rb +64 -0
- data/lib/mongo/grid/stream/read.rb +208 -0
- data/lib/mongo/grid/stream/write.rb +187 -0
- data/lib/mongo/index/view.rb +1 -1
- data/lib/mongo/loggable.rb +34 -57
- data/lib/mongo/logger.rb +16 -78
- data/lib/mongo/monitoring.rb +1 -5
- data/lib/mongo/monitoring/command_log_subscriber.rb +35 -17
- data/lib/mongo/monitoring/event/command_succeeded.rb +20 -1
- data/lib/mongo/monitoring/publishable.rb +22 -12
- data/lib/mongo/operation.rb +3 -6
- data/lib/mongo/operation/commands.rb +24 -0
- data/lib/mongo/operation/{aggregate.rb → commands/aggregate.rb} +3 -41
- data/lib/mongo/operation/{aggregate → commands/aggregate}/result.rb +0 -0
- data/lib/mongo/operation/commands/collections_info.rb +66 -0
- data/lib/mongo/operation/{command.rb → commands/command.rb} +2 -18
- data/lib/mongo/operation/commands/indexes.rb +70 -0
- data/lib/mongo/operation/commands/list_collections.rb +54 -0
- data/lib/mongo/operation/commands/list_collections/result.rb +112 -0
- data/lib/mongo/operation/commands/list_indexes.rb +56 -0
- data/lib/mongo/operation/commands/list_indexes/result.rb +115 -0
- data/lib/mongo/operation/{map_reduce.rb → commands/map_reduce.rb} +3 -41
- data/lib/mongo/operation/{map_reduce → commands/map_reduce}/result.rb +0 -0
- data/lib/mongo/operation/{parallel_scan.rb → commands/parallel_scan.rb} +3 -23
- data/lib/mongo/operation/{parallel_scan → commands/parallel_scan}/result.rb +0 -0
- data/lib/mongo/operation/commands/user_query.rb +69 -0
- data/lib/mongo/operation/commands/users_info.rb +53 -0
- data/lib/mongo/operation/commands/users_info/result.rb +36 -0
- data/lib/mongo/operation/executable.rb +4 -68
- data/lib/mongo/operation/kill_cursors.rb +3 -3
- data/lib/mongo/operation/read.rb +0 -4
- data/lib/mongo/operation/read/get_more.rb +2 -22
- data/lib/mongo/operation/read/query.rb +2 -21
- data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
- data/lib/mongo/operation/specifiable.rb +24 -0
- data/lib/mongo/operation/write.rb +2 -0
- data/lib/mongo/operation/write/bulk.rb +6 -3
- data/lib/mongo/operation/write/bulk/bulkable.rb +82 -0
- data/lib/mongo/operation/write/bulk/delete.rb +71 -0
- data/lib/mongo/operation/write/bulk/delete/result.rb +74 -0
- data/lib/mongo/operation/write/bulk/insert.rb +96 -0
- data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
- data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
- data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
- data/lib/mongo/operation/write/bulk/update.rb +81 -0
- data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
- data/lib/mongo/operation/write/command/create_index.rb +0 -1
- data/lib/mongo/operation/write/command/create_user.rb +0 -1
- data/lib/mongo/operation/write/command/delete.rb +0 -1
- data/lib/mongo/operation/write/command/drop_index.rb +0 -1
- data/lib/mongo/operation/write/command/insert.rb +0 -1
- data/lib/mongo/operation/write/command/remove_user.rb +0 -1
- data/lib/mongo/operation/write/command/update.rb +0 -1
- data/lib/mongo/operation/write/command/update_user.rb +0 -1
- data/lib/mongo/operation/write/command/writable.rb +13 -18
- data/lib/mongo/operation/write/create_index.rb +4 -27
- data/lib/mongo/operation/write/create_user.rb +4 -30
- data/lib/mongo/operation/write/delete.rb +5 -28
- data/lib/mongo/operation/write/drop_index.rb +3 -3
- data/lib/mongo/operation/write/gle.rb +48 -0
- data/lib/mongo/operation/write/idable.rb +5 -0
- data/lib/mongo/operation/write/insert.rb +2 -24
- data/lib/mongo/operation/write/remove_user.rb +4 -27
- data/lib/mongo/operation/write/update.rb +4 -32
- data/lib/mongo/operation/write/update_user.rb +4 -30
- data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
- data/lib/mongo/options/mapper.rb +4 -2
- data/lib/mongo/protocol/delete.rb +68 -3
- data/lib/mongo/protocol/get_more.rb +54 -2
- data/lib/mongo/protocol/insert.rb +59 -1
- data/lib/mongo/protocol/kill_cursors.rb +53 -4
- data/lib/mongo/protocol/message.rb +12 -12
- data/lib/mongo/protocol/query.rb +139 -65
- data/lib/mongo/protocol/reply.rb +69 -1
- data/lib/mongo/protocol/update.rb +70 -1
- data/lib/mongo/server/connection.rb +11 -3
- data/lib/mongo/server/description.rb +29 -0
- data/lib/mongo/server/description/features.rb +2 -1
- data/lib/mongo/server/monitor.rb +2 -2
- data/lib/mongo/server_selector.rb +14 -10
- data/lib/mongo/server_selector/selectable.rb +24 -22
- data/lib/mongo/socket.rb +6 -3
- data/lib/mongo/socket/tcp.rb +2 -2
- data/lib/mongo/socket/unix.rb +5 -8
- data/lib/mongo/uri.rb +243 -139
- data/lib/mongo/version.rb +1 -1
- data/spec/mongo/address/unix_spec.rb +1 -1
- data/spec/mongo/address_spec.rb +25 -0
- data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
- data/spec/mongo/auth/user/view_spec.rb +26 -1
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +271 -0
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
- data/spec/mongo/bulk_write_spec.rb +332 -166
- data/spec/mongo/client_spec.rb +25 -0
- data/spec/mongo/cluster/topology/replica_set_spec.rb +2 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +65 -0
- data/spec/mongo/collection/view/immutable_spec.rb +103 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +98 -3
- data/spec/mongo/collection/view/readable_spec.rb +17 -30
- data/spec/mongo/collection/view_spec.rb +233 -7
- data/spec/mongo/collection_spec.rb +360 -18
- data/spec/mongo/command_monitoring_spec.rb +51 -0
- data/spec/mongo/connection_string_spec.rb +137 -0
- data/spec/mongo/database_spec.rb +27 -11
- data/spec/mongo/grid/file/chunk_spec.rb +5 -5
- data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
- data/spec/mongo/grid/file_spec.rb +8 -8
- data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
- data/spec/mongo/grid/stream/read_spec.rb +275 -0
- data/spec/mongo/grid/stream/write_spec.rb +440 -0
- data/spec/mongo/grid/stream_spec.rb +48 -0
- data/spec/mongo/gridfs_spec.rb +50 -0
- data/spec/mongo/logger_spec.rb +0 -40
- data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
- data/spec/mongo/operation/{aggregate_spec.rb → commands/aggregate_spec.rb} +0 -42
- data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
- data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +0 -0
- data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
- data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +0 -18
- data/spec/mongo/operation/kill_cursors_spec.rb +1 -1
- data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
- data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +1 -12
- data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +1 -12
- data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +1 -12
- data/spec/mongo/operation/write/insert_spec.rb +0 -11
- data/spec/mongo/protocol/kill_cursors_spec.rb +5 -3
- data/spec/mongo/server/description_spec.rb +42 -0
- data/spec/mongo/server/monitor_spec.rb +21 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +1 -0
- data/spec/mongo/server_selection_spec.rb +3 -3
- data/spec/mongo/server_selector/nearest_spec.rb +34 -27
- data/spec/mongo/server_selector/primary_preferred_spec.rb +31 -30
- data/spec/mongo/server_selector/primary_spec.rb +14 -13
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +27 -26
- data/spec/mongo/server_selector/secondary_spec.rb +23 -22
- data/spec/mongo/server_selector_spec.rb +87 -24
- data/spec/mongo/socket/unix_spec.rb +52 -0
- data/spec/mongo/uri_spec.rb +251 -39
- data/spec/spec_helper.rb +11 -4
- data/spec/support/authorization.rb +4 -5
- data/spec/support/command_monitoring.rb +365 -0
- data/spec/support/command_monitoring/bulkWrite.yml +73 -0
- data/spec/support/command_monitoring/command.yml +42 -0
- data/spec/support/command_monitoring/deleteMany.yml +55 -0
- data/spec/support/command_monitoring/deleteOne.yml +55 -0
- data/spec/support/command_monitoring/find.yml +219 -0
- data/spec/support/command_monitoring/insertMany.yml +81 -0
- data/spec/support/command_monitoring/insertOne.yml +51 -0
- data/spec/support/command_monitoring/updateMany.yml +67 -0
- data/spec/support/command_monitoring/updateOne.yml +95 -0
- data/spec/support/connection_string.rb +228 -0
- data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
- data/spec/support/connection_string_tests/valid-auth.yml +256 -0
- data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
- data/spec/support/connection_string_tests/valid-options.yml +30 -0
- data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
- data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
- data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
- data/spec/support/crud.rb +3 -1
- data/spec/support/crud/read.rb +14 -10
- data/spec/support/crud/write.rb +36 -9
- data/spec/support/gridfs.rb +637 -0
- data/spec/support/gridfs_tests/delete.yml +157 -0
- data/spec/support/gridfs_tests/download.yml +210 -0
- data/spec/support/gridfs_tests/download_by_name.yml +113 -0
- data/spec/support/gridfs_tests/upload.yml +158 -0
- data/spec/support/sdam/rs/equal_electionids.yml +1 -2
- data/spec/support/sdam/rs/new_primary_new_electionid.yml +0 -3
- data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
- data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
- data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
- data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
- data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
- data/spec/support/sdam/single/not_ok_response.yml +0 -1
- data/spec/support/server_discovery_and_monitoring.rb +3 -1
- data/spec/support/server_selection.rb +3 -1
- data/spec/support/shared/bulk_write.rb +192 -0
- data/spec/support/shared/server_selector.rb +21 -12
- metadata +147 -57
- metadata.gz.sig +0 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +0 -252
- data/lib/mongo/bulk_write/deletable.rb +0 -57
- data/lib/mongo/bulk_write/insertable.rb +0 -49
- data/lib/mongo/bulk_write/replacable.rb +0 -58
- data/lib/mongo/bulk_write/updatable.rb +0 -69
- data/lib/mongo/grid/fs.rb +0 -146
- data/lib/mongo/operation/list_collections/result.rb +0 -114
- data/lib/mongo/operation/list_indexes/result.rb +0 -118
- data/lib/mongo/operation/read/collections_info.rb +0 -68
- data/lib/mongo/operation/read/indexes.rb +0 -69
- data/lib/mongo/operation/read/list_collections.rb +0 -76
- data/lib/mongo/operation/read/list_indexes.rb +0 -78
- data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
- data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
- data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
- data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
- data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
- data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
- data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -174
- data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
- data/spec/mongo/grid/fs_spec.rb +0 -160
- data/spec/mongo/loggable_spec.rb +0 -63
data/lib/mongo/index/view.rb
CHANGED
data/lib/mongo/loggable.rb
CHANGED
@@ -24,105 +24,82 @@ module Mongo
|
|
24
24
|
# @since 2.0.0
|
25
25
|
PREFIX = 'MONGODB'.freeze
|
26
26
|
|
27
|
-
# Log the operations. If a block is provided it will be yielded to,
|
28
|
-
# otherwise only the logging will take place.
|
29
|
-
#
|
30
|
-
# @example Log a query operation.
|
31
|
-
# loggable.log(:debug, "MONGO.query", operations)
|
32
|
-
#
|
33
|
-
# @param [ Symbol ] level The log level.
|
34
|
-
# @param [ String ] prefix The prefix for the log line.
|
35
|
-
# @param [ Array<Object> ] operations The operations to log. The must
|
36
|
-
# respond to #log_message.
|
37
|
-
#
|
38
|
-
# @return [ Object ] The result of the block or nil if no block given.
|
39
|
-
#
|
40
|
-
# @since 2.0.0
|
41
|
-
def log(level, prefix, operations)
|
42
|
-
started = Time.new
|
43
|
-
begin
|
44
|
-
yield(operations) if block_given?
|
45
|
-
rescue Exception => e
|
46
|
-
raise e
|
47
|
-
ensure
|
48
|
-
if Logger.allow?(level)
|
49
|
-
runtime = format("%.4fms", (Time.now.to_f - started.to_f) * 1000.0)
|
50
|
-
operations.each do |operation|
|
51
|
-
Logger.log(level, prefix, log_inspect(operation), runtime)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
27
|
# Convenience method to log debug messages with the standard prefix.
|
58
28
|
#
|
59
29
|
# @example Log a debug message.
|
60
|
-
# log_debug(
|
30
|
+
# log_debug('Message')
|
61
31
|
#
|
62
|
-
# @param [
|
63
|
-
# to log.
|
32
|
+
# @param [ String ] message The message to log.
|
64
33
|
#
|
65
34
|
# @since 2.0.0
|
66
|
-
def log_debug(
|
67
|
-
|
35
|
+
def log_debug(message)
|
36
|
+
logger.debug(format_message(message)) if logger.debug?
|
68
37
|
end
|
69
38
|
|
70
39
|
# Convenience method to log error messages with the standard prefix.
|
71
40
|
#
|
72
41
|
# @example Log a error message.
|
73
|
-
# log_error(
|
42
|
+
# log_error('Message')
|
74
43
|
#
|
75
|
-
# @param [
|
76
|
-
# to log.
|
44
|
+
# @param [ String ] message The message to log.
|
77
45
|
#
|
78
46
|
# @since 2.0.0
|
79
|
-
def log_error(
|
80
|
-
|
47
|
+
def log_error(message)
|
48
|
+
logger.error(format_message(message)) if logger.error?
|
81
49
|
end
|
82
50
|
|
83
51
|
# Convenience method to log fatal messages with the standard prefix.
|
84
52
|
#
|
85
53
|
# @example Log a fatal message.
|
86
|
-
# log_fatal(
|
54
|
+
# log_fatal('Message')
|
87
55
|
#
|
88
|
-
# @param [
|
89
|
-
# to log.
|
56
|
+
# @param [ String ] message The message to log.
|
90
57
|
#
|
91
58
|
# @since 2.0.0
|
92
|
-
def log_fatal(
|
93
|
-
|
59
|
+
def log_fatal(message)
|
60
|
+
logger.fatal(format_message(message)) if logger.fatal?
|
94
61
|
end
|
95
62
|
|
96
63
|
# Convenience method to log info messages with the standard prefix.
|
97
64
|
#
|
98
65
|
# @example Log a info message.
|
99
|
-
# log_info(
|
66
|
+
# log_info('Message')
|
100
67
|
#
|
101
|
-
# @param [
|
102
|
-
# to log.
|
68
|
+
# @param [ String ] message The message to log.
|
103
69
|
#
|
104
70
|
# @since 2.0.0
|
105
|
-
def log_info(
|
106
|
-
|
71
|
+
def log_info(message)
|
72
|
+
logger.info(format_message(message)) if logger.info?
|
107
73
|
end
|
108
74
|
|
109
75
|
# Convenience method to log warn messages with the standard prefix.
|
110
76
|
#
|
111
77
|
# @example Log a warn message.
|
112
|
-
# log_warn(
|
78
|
+
# log_warn('Message')
|
113
79
|
#
|
114
|
-
# @param [
|
115
|
-
# to log.
|
80
|
+
# @param [ String ] message The message to log.
|
116
81
|
#
|
117
82
|
# @since 2.0.0
|
118
|
-
def log_warn(
|
119
|
-
|
83
|
+
def log_warn(message)
|
84
|
+
logger.warn(format_message(message)) if logger.warn?
|
85
|
+
end
|
86
|
+
|
87
|
+
# Get the logger instance.
|
88
|
+
#
|
89
|
+
# @example Get the logger instance.
|
90
|
+
# loggable.logger
|
91
|
+
#
|
92
|
+
# @return [ Logger ] The logger.
|
93
|
+
#
|
94
|
+
# @since 2.1.0
|
95
|
+
def logger
|
96
|
+
(options[:logger] || Logger.logger)
|
120
97
|
end
|
121
98
|
|
122
99
|
private
|
123
100
|
|
124
|
-
def
|
125
|
-
|
101
|
+
def format_message(message)
|
102
|
+
format("%s | %s".freeze, PREFIX, message)
|
126
103
|
end
|
127
104
|
end
|
128
105
|
end
|
data/lib/mongo/logger.rb
CHANGED
@@ -23,76 +23,6 @@ module Mongo
|
|
23
23
|
|
24
24
|
class << self
|
25
25
|
|
26
|
-
# Log a debug level message.
|
27
|
-
#
|
28
|
-
# @example Log a debug level message.
|
29
|
-
# Logger.debug('mongo', 'message', '10ms')
|
30
|
-
#
|
31
|
-
# @param [ String ] prefix The category prefix.
|
32
|
-
# @param [ String ] message The log message.
|
33
|
-
# @param [ String ] runtime The time of the operation.
|
34
|
-
#
|
35
|
-
# @since 2.0.0
|
36
|
-
def debug(prefix, message, runtime)
|
37
|
-
self.log(:debug, prefix, message, runtime)
|
38
|
-
end
|
39
|
-
|
40
|
-
# Log a error level message.
|
41
|
-
#
|
42
|
-
# @example Log a error level message.
|
43
|
-
# Logger.error('mongo', 'message', '10ms')
|
44
|
-
#
|
45
|
-
# @param [ String ] prefix The category prefix.
|
46
|
-
# @param [ String ] message The log message.
|
47
|
-
# @param [ String ] runtime The time of the operation.
|
48
|
-
#
|
49
|
-
# @since 2.0.0
|
50
|
-
def error(prefix, message, runtime)
|
51
|
-
self.log(:error, prefix, message, runtime)
|
52
|
-
end
|
53
|
-
|
54
|
-
# Log a fatal level message.
|
55
|
-
#
|
56
|
-
# @example Log a fatal level message.
|
57
|
-
# Logger.fatal('mongo', 'message', '10ms')
|
58
|
-
#
|
59
|
-
# @param [ String ] prefix The category prefix.
|
60
|
-
# @param [ String ] message The log message.
|
61
|
-
# @param [ String ] runtime The time of the operation.
|
62
|
-
#
|
63
|
-
# @since 2.0.0
|
64
|
-
def fatal(prefix, message, runtime)
|
65
|
-
self.log(:fatal, prefix, message, runtime)
|
66
|
-
end
|
67
|
-
|
68
|
-
# Log a info level message.
|
69
|
-
#
|
70
|
-
# @example Log a info level message.
|
71
|
-
# Logger.info('mongo', 'message', '10ms')
|
72
|
-
#
|
73
|
-
# @param [ String ] prefix The category prefix.
|
74
|
-
# @param [ String ] message The log message.
|
75
|
-
# @param [ String ] runtime The time of the operation.
|
76
|
-
#
|
77
|
-
# @since 2.0.0
|
78
|
-
def info(prefix, message, runtime)
|
79
|
-
self.log(:info, prefix, message, runtime)
|
80
|
-
end
|
81
|
-
|
82
|
-
# Log a warn level message.
|
83
|
-
#
|
84
|
-
# @example Log a warn level message.
|
85
|
-
# Logger.warn('mongo', 'message', '10ms')
|
86
|
-
#
|
87
|
-
# @param [ String ] prefix The category prefix.
|
88
|
-
# @param [ String ] message The log message.
|
89
|
-
# @param [ String ] runtime The time of the operation.
|
90
|
-
#
|
91
|
-
# @since 2.0.0
|
92
|
-
def warn(prefix, message, runtime)
|
93
|
-
self.log(:warn, prefix, message, runtime)
|
94
|
-
end
|
95
|
-
|
96
26
|
# Get the wrapped logger. If none was set will return a default debug
|
97
27
|
# level logger.
|
98
28
|
#
|
@@ -120,18 +50,26 @@ module Mongo
|
|
120
50
|
@logger = other
|
121
51
|
end
|
122
52
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
53
|
+
# Get the global logger level.
|
54
|
+
#
|
55
|
+
# @example Get the global logging level.
|
56
|
+
# Mongo::Logger.level
|
57
|
+
#
|
58
|
+
# @return [ Integer ] The log level.
|
59
|
+
#
|
60
|
+
# @since 2.0.0
|
131
61
|
def level
|
132
62
|
logger.level
|
133
63
|
end
|
134
64
|
|
65
|
+
# Set the global logger level.
|
66
|
+
#
|
67
|
+
# @example Set the global logging level.
|
68
|
+
# Mongo::Logger.level == Logger::DEBUG
|
69
|
+
#
|
70
|
+
# @return [ Integer ] The log level.
|
71
|
+
#
|
72
|
+
# @since 2.0.0
|
135
73
|
def level=(level)
|
136
74
|
logger.level = level
|
137
75
|
end
|
data/lib/mongo/monitoring.rb
CHANGED
@@ -83,11 +83,6 @@ module Mongo
|
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
|
-
# Adds our internal command logging to the global subscribers.
|
87
|
-
#
|
88
|
-
# @since 2.1.0
|
89
|
-
Global.subscribe(COMMAND, CommandLogSubscriber.new)
|
90
|
-
|
91
86
|
# Initialize the monitoring.
|
92
87
|
#
|
93
88
|
# @api private
|
@@ -105,6 +100,7 @@ module Mongo
|
|
105
100
|
subscribe(topic, subscriber)
|
106
101
|
end
|
107
102
|
end
|
103
|
+
subscribe(COMMAND, CommandLogSubscriber.new(options))
|
108
104
|
end
|
109
105
|
end
|
110
106
|
|
@@ -19,6 +19,10 @@ module Mongo
|
|
19
19
|
#
|
20
20
|
# @since 2.1.0
|
21
21
|
class CommandLogSubscriber
|
22
|
+
include Loggable
|
23
|
+
|
24
|
+
# @return [ Hash ] options The options.
|
25
|
+
attr_reader :options
|
22
26
|
|
23
27
|
# Constant for the max number of characters to print when inspecting
|
24
28
|
# a query field.
|
@@ -26,6 +30,20 @@ module Mongo
|
|
26
30
|
# @since 2.1.0
|
27
31
|
LOG_STRING_LIMIT = 250
|
28
32
|
|
33
|
+
# Create the new log subscriber.
|
34
|
+
#
|
35
|
+
# @example Create the log subscriber.
|
36
|
+
# CommandLogSubscriber.new
|
37
|
+
#
|
38
|
+
# @param [ Hash ] options The options.
|
39
|
+
#
|
40
|
+
# @option options [ Logger ] :logger An optional custom logger.
|
41
|
+
#
|
42
|
+
# @since 2.1.0
|
43
|
+
def initialize(options = {})
|
44
|
+
@options = options
|
45
|
+
end
|
46
|
+
|
29
47
|
# Handle the command started event.
|
30
48
|
#
|
31
49
|
# @example Handle the event.
|
@@ -35,9 +53,7 @@ module Mongo
|
|
35
53
|
#
|
36
54
|
# @since 2.1.0
|
37
55
|
def started(event)
|
38
|
-
|
39
|
-
log("#{prefix(event)} | STARTED | #{format(event.command)}")
|
40
|
-
end
|
56
|
+
log_debug("#{prefix(event)} | STARTED | #{format_command(event.command)}")
|
41
57
|
end
|
42
58
|
|
43
59
|
# Handle the command succeeded event.
|
@@ -49,9 +65,7 @@ module Mongo
|
|
49
65
|
#
|
50
66
|
# @since 2.1.0
|
51
67
|
def succeeded(event)
|
52
|
-
|
53
|
-
log("#{prefix(event)} | SUCCEEDED | #{event.duration}s")
|
54
|
-
end
|
68
|
+
log_debug("#{prefix(event)} | SUCCEEDED | #{event.duration}s")
|
55
69
|
end
|
56
70
|
|
57
71
|
# Handle the command failed event.
|
@@ -63,25 +77,29 @@ module Mongo
|
|
63
77
|
#
|
64
78
|
# @since 2.1.0
|
65
79
|
def failed(event)
|
66
|
-
|
67
|
-
log("#{prefix(event)} | FAILED | #{event.message} | #{event.duration}s")
|
68
|
-
end
|
80
|
+
log_debug("#{prefix(event)} | FAILED | #{event.message} | #{event.duration}s")
|
69
81
|
end
|
70
82
|
|
71
83
|
private
|
72
84
|
|
73
|
-
def
|
74
|
-
|
75
|
-
|
76
|
-
|
85
|
+
def format_command(args)
|
86
|
+
begin
|
87
|
+
truncating? ? truncate(args) : args.inspect
|
88
|
+
rescue Exception
|
89
|
+
'<Unable to inspect arguments>'
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def prefix(event)
|
94
|
+
"#{event.address.to_s} | #{event.database_name}.#{event.command_name}"
|
77
95
|
end
|
78
96
|
|
79
|
-
def
|
80
|
-
|
97
|
+
def truncate(command)
|
98
|
+
((s = command.inspect).length > LOG_STRING_LIMIT) ? "#{s[0..LOG_STRING_LIMIT]}..." : s
|
81
99
|
end
|
82
100
|
|
83
|
-
def
|
84
|
-
|
101
|
+
def truncating?
|
102
|
+
@truncating ||= (options[:truncate_logs] != false)
|
85
103
|
end
|
86
104
|
end
|
87
105
|
end
|
@@ -86,10 +86,29 @@ module Mongo
|
|
86
86
|
address,
|
87
87
|
command_payload[:request_id],
|
88
88
|
operation_id,
|
89
|
-
|
89
|
+
generate_reply(command_payload, reply_payload),
|
90
90
|
duration
|
91
91
|
)
|
92
92
|
end
|
93
|
+
|
94
|
+
private
|
95
|
+
|
96
|
+
def self.generate_reply(command_payload, reply_payload)
|
97
|
+
if reply_payload
|
98
|
+
reply = reply_payload[:reply]
|
99
|
+
if cursor = reply[:cursor]
|
100
|
+
reply = reply.merge(cursor: cursor.merge(ns: namespace(command_payload)))
|
101
|
+
end
|
102
|
+
reply
|
103
|
+
else
|
104
|
+
BSON::Document.new(ok: 1)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def self.namespace(payload)
|
109
|
+
command = payload[:command]
|
110
|
+
"#{payload[:database_name]}.#{command[:collection] || command.values.first}"
|
111
|
+
end
|
93
112
|
end
|
94
113
|
end
|
95
114
|
end
|
@@ -37,14 +37,20 @@ module Mongo
|
|
37
37
|
# @since 2.1.0
|
38
38
|
def publish_command(messages, operation_id = Monitoring.next_operation_id)
|
39
39
|
start = Time.now
|
40
|
-
|
40
|
+
message = messages.first
|
41
|
+
message.set_request_id
|
42
|
+
payload = message.payload
|
43
|
+
send_duration = duration(start)
|
41
44
|
command_started(address, operation_id, payload)
|
45
|
+
receive_start = Time.now
|
42
46
|
begin
|
43
47
|
result = yield(messages)
|
44
|
-
|
48
|
+
total_duration = duration(receive_start) + send_duration
|
49
|
+
command_completed(result, address, operation_id, payload, total_duration)
|
45
50
|
result
|
46
51
|
rescue Exception => e
|
47
|
-
|
52
|
+
total_duration = duration(receive_start) + send_duration
|
53
|
+
command_failed(address, operation_id, payload, e.message, total_duration)
|
48
54
|
raise e
|
49
55
|
end
|
50
56
|
end
|
@@ -58,17 +64,17 @@ module Mongo
|
|
58
64
|
)
|
59
65
|
end
|
60
66
|
|
61
|
-
def command_completed(result, address, operation_id, payload,
|
67
|
+
def command_completed(result, address, operation_id, payload, duration)
|
62
68
|
document = result ? (result.documents || []).first : nil
|
63
|
-
|
64
|
-
|
65
|
-
|
69
|
+
if error?(document)
|
70
|
+
parser = Error::Parser.new(document)
|
71
|
+
command_failed(address, operation_id, payload, parser.message, duration)
|
66
72
|
else
|
67
|
-
|
73
|
+
command_succeeded(result, address, operation_id, payload, duration)
|
68
74
|
end
|
69
75
|
end
|
70
76
|
|
71
|
-
def command_succeeded(result, address, operation_id, payload,
|
77
|
+
def command_succeeded(result, address, operation_id, payload, duration)
|
72
78
|
monitoring.succeeded(
|
73
79
|
Monitoring::COMMAND,
|
74
80
|
Event::CommandSucceeded.generate(
|
@@ -76,21 +82,25 @@ module Mongo
|
|
76
82
|
operation_id,
|
77
83
|
payload,
|
78
84
|
result ? result.payload : nil,
|
79
|
-
duration
|
85
|
+
duration
|
80
86
|
)
|
81
87
|
)
|
82
88
|
end
|
83
89
|
|
84
|
-
def command_failed(address, operation_id, payload, message,
|
90
|
+
def command_failed(address, operation_id, payload, message, duration)
|
85
91
|
monitoring.failed(
|
86
92
|
Monitoring::COMMAND,
|
87
|
-
Event::CommandFailed.generate(address, operation_id, payload, message, duration
|
93
|
+
Event::CommandFailed.generate(address, operation_id, payload, message, duration)
|
88
94
|
)
|
89
95
|
end
|
90
96
|
|
91
97
|
def duration(start)
|
92
98
|
Time.now - start
|
93
99
|
end
|
100
|
+
|
101
|
+
def error?(document)
|
102
|
+
document && (document['ok'] == 0 || document.key?('$err'))
|
103
|
+
end
|
94
104
|
end
|
95
105
|
end
|
96
106
|
end
|