Module: OneApm::Agent::Datastore::MetricHelper

Defined in:
lib/one_apm/agent/datastore/metric_helper.rb

Constant Summary collapse

OA_ROLLUP_METRIC =
"Datastore/all".freeze
OA_WEB_ROLLUP_METRIC =
"Datastore/allWeb".freeze
OA_OTHER_ROLLUP_METRIC =
"Datastore/allOther".freeze
OA_DEFAULT_PRODUCT_NAME =
"ActiveRecord".freeze
OA_OTHER =
"Other".freeze
OA_ALL =
"all".freeze
OA_ALL_WEB =
"allWeb".freeze
OA_ALL_OTHER =
"allOther".freeze

Class Method Summary collapse

Class Method Details

.all_suffixObject



64
65
66
67
68
69
70
# File 'lib/one_apm/agent/datastore/metric_helper.rb', line 64

def self.all_suffix
  if OneApm::Transaction.recording_web_transaction?
    OA_ALL_WEB
  else
    OA_ALL_OTHER
  end
end

.metrics_for(product, operation, collection = nil) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/one_apm/agent/datastore/metric_helper.rb', line 72

def self.metrics_for(product, operation, collection = nil)
  if overrides = overridden_operation_and_collection
    operation, collection = overrides
  end

  suffix = all_suffix

  # Order of these metrics matters--the first metric in the list will
  # be treated as the scoped metric in a bunch of different cases.
  metrics = [
    operation_metric_for(product, operation),
    operation_product_rollup(product),
    operation_all(product),
    product_suffixed_rollup(product, suffix),
    product_rollup(product),
    suffixed_rollup(suffix),
    OA_ROLLUP_METRIC
  ]

  metrics.unshift statement_metric_for(product, collection, operation) if collection
  metrics.unshift statement_action_metric_for(product,operation)
  metrics.unshift statement_all_metric_for(product)
  metrics.unshift statement_all(product)
  metrics
end

.metrics_from_sql(product, sql) ⇒ Object



98
99
100
101
# File 'lib/one_apm/agent/datastore/metric_helper.rb', line 98

def self.metrics_from_sql(product, sql)
  operation = OneApm::Agent::Database.parse_operation_from_query(sql) || OA_OTHER
  metrics_for(product, operation)
end

.operation_all(product) ⇒ Object

Datastore/operation/NoSqlType



28
29
30
# File 'lib/one_apm/agent/datastore/metric_helper.rb', line 28

def self.operation_all(product)
  "Datastore/operation/#{product.split(':')[0]}"
end

.operation_metric_for(product, operation) ⇒ Object

Datastore/operation/NoSqlType:10.128.6.240:27017/update



18
19
20
# File 'lib/one_apm/agent/datastore/metric_helper.rb', line 18

def self.operation_metric_for(product, operation)
  "Datastore/operation/#{product}/#{operation}"
end

.operation_product_rollup(product) ⇒ Object

Datastore/operation/NoSqlType:10.128.6.240:27017/all



23
24
25
# File 'lib/one_apm/agent/datastore/metric_helper.rb', line 23

def self.operation_product_rollup(product)
  "Datastore/operation/#{product}/all"
end

.overridden_operation_and_collectionObject

Allow Transaction#with_database_metric_name to override our collection and operation



105
106
107
108
109
# File 'lib/one_apm/agent/datastore/metric_helper.rb', line 105

def self.overridden_operation_and_collection
  state = OneApm::TransactionState.tl_get
  txn   = state.current_transaction
  txn ? txn.instrumentation_state[:datastore_override] : nil
end

.product_rollup(product) ⇒ Object



36
37
38
# File 'lib/one_apm/agent/datastore/metric_helper.rb', line 36

def self.product_rollup(product)
  "Datastore//#{product}/all"
end

.product_suffixed_rollup(product, suffix) ⇒ Object



32
33
34
# File 'lib/one_apm/agent/datastore/metric_helper.rb', line 32

def self.product_suffixed_rollup(product, suffix)
  "Datastore/#{product}/#{suffix}"
end

.statement_action_metric_for(product, operation) ⇒ Object

Datastore/statement/NoSqlType:10.128.6.240:27017/book/insert



50
51
52
# File 'lib/one_apm/agent/datastore/metric_helper.rb', line 50

def self.statement_action_metric_for(product, operation)
  "Datastore/statement/#{product}/#{operation}"
end

.statement_all(product) ⇒ Object

Datastore/statement/NoSqlType



60
61
62
# File 'lib/one_apm/agent/datastore/metric_helper.rb', line 60

def self.statement_all(product)
  "Datastore/statement/#{product.split(':')[0]}"
end

.statement_all_metric_for(product) ⇒ Object

Datastore/statement/NoSqlType:10.128.6.240:27017/all



55
56
57
# File 'lib/one_apm/agent/datastore/metric_helper.rb', line 55

def self.statement_all_metric_for(product)
  "Datastore/statement/#{product}/all"
end

.statement_metric_for(product, collection, operation) ⇒ Object

Datastore/statement/NoSqlType:10.128.6.240:27017/book/insert



45
46
47
# File 'lib/one_apm/agent/datastore/metric_helper.rb', line 45

def self.statement_metric_for(product, collection, operation)
  "Datastore/statement/#{product}/#{collection}/#{operation}"
end

.suffixed_rollup(suffix) ⇒ Object



40
41
42
# File 'lib/one_apm/agent/datastore/metric_helper.rb', line 40

def self.suffixed_rollup(suffix)
  "Datastore/#{suffix}"
end