module OneApm::Agent::Datastore::Mongo::MetricTranslator
Constants
- OA_CMD_COLLECTION
- OA_MONGO_PRODUCT_NAME
- OA_NAMES_IN_SELECTOR
Public Class Methods
build_metrics(name, collection)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 60 def self.build_metrics(name, collection) OneApm::Agent::Datastore::MetricHelper.metrics_for(OA_MONGO_PRODUCT_NAME, name, collection) end
collection_in_selector?(payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 66 def self.collection_in_selector?(payload) payload[:collection] == '$cmd' && payload[:selector] end
collection_name_from_group_selector(payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 174 def self.collection_name_from_group_selector(payload) payload[:selector]["group"]["ns"] end
collection_name_from_index(payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 156 def self.collection_name_from_index(payload) if payload[:documents] if payload[:documents].is_a?(Array) # mongo gem versions pre 1.10.0 document = payload[:documents].first else # mongo gem versions 1.10.0 and later document = payload[:documents] end if document && document[:ns] return document[:ns].split('.').last end end 'system.indexes' end
collection_name_from_rename_selector(payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 178 def self.collection_name_from_rename_selector(payload) parts = payload[:selector][:renameCollection].split('.') parts.shift parts.join('.') end
command_key_from_selector(payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 89 def self.command_key_from_selector(payload) selector = payload[:selector] OA_NAMES_IN_SELECTOR.find do |check_name| selector.key?(check_name) end end
create_index?(name, payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 132 def self.create_index?(name, payload) name == :insert && payload[:collection] == "system.indexes" end
create_indexes?(name, paylod)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 128 def self.create_indexes?(name, paylod) name == :createIndexes end
drop_index?(name, payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 140 def self.drop_index?(name, payload) name == :deleteIndexes end
drop_indexes?(name, payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 136 def self.drop_indexes?(name, payload) name == :deleteIndexes && payload[:selector] && payload[:selector][:index] == "*" end
find_and_modify?(name, payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 120 def self.find_and_modify?(name, payload) name == :findandmodify end
find_and_remove?(name, payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 124 def self.find_and_remove?(name, payload) name == :findandmodify && payload[:selector] && payload[:selector][:remove] end
find_one?(name, payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 116 def self.find_one?(name, payload) name == :find && payload[:limit] == -1 end
get_collection_from_selector(command_key, payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 107 def self.get_collection_from_selector(command_key, payload) if command_key payload[:selector][command_key] else OneApm::Manager.increment_metric("Supportability/Mongo/UnknownCollection") OA_CMD_COLLECTION end end
get_name_from_selector(command_key, payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 96 def self.get_name_from_selector(command_key, payload) if command_key command_key.to_sym else OneApm::Manager.increment_metric("Supportability/Mongo/UnknownCollection") payload[:selector].first.first unless command_key end end
group?(name, payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 148 def self.group?(name, payload) name == :group end
metrics_for(name, payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 11 def self.metrics_for(name, payload) payload ||= {} if collection_in_selector?(payload) command_key = command_key_from_selector(payload) name = get_name_from_selector(command_key, payload) collection = get_collection_from_selector(command_key, payload) else collection = payload[:collection] end # The 1.10.0 version of the mongo driver renamed 'remove' to # 'delete', but for metric consistency with previous versions we # want to keep it as 'remove'. name = 'remove' if name.to_s == 'delete' if self.find_one?(name, payload) name = 'findOne' elsif self.find_and_remove?(name, payload) name = 'findAndRemove' elsif self.find_and_modify?(name, payload) name = 'findAndModify' elsif self.create_indexes?(name, payload) name = 'createIndexes' elsif self.create_index?(name, payload) name = 'createIndex' collection = self.collection_name_from_index(payload) elsif self.drop_indexes?(name, payload) name = 'dropIndexes' elsif self.drop_index?(name, payload) name = 'dropIndex' elsif self.re_index?(name, payload) name = 'reIndex' elsif self.group?(name, payload) name = 'group' collection = collection_name_from_group_selector(payload) elsif self.rename_collection?(name, payload) name = 'renameCollection' collection = collection_name_from_rename_selector(payload) end build_metrics(name, collection) rescue => e OneApm::Manager.logger.debug("Failure during Mongo metric generation", e) [] end
re_index?(name, payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 144 def self.re_index?(name, payload) name == :reIndex && payload[:selector] && payload[:selector][:reIndex] end
rename_collection?(name, payload)
click to toggle source
# File lib/one_apm/agent/datastore/mongo/metric_translator.rb, line 152 def self.rename_collection?(name, payload) name == :renameCollection end