Module: InfluxDB::Rails

Extended by:
Logger
Defined in:
lib/asklytics-influxdb-rails.rb,
lib/influxdb/rails/rack.rb,
lib/influxdb/rails/logger.rb,
lib/influxdb/rails/context.rb,
lib/influxdb/rails/railtie.rb,
lib/influxdb/rails/version.rb,
lib/influxdb/rails/backtrace.rb,
lib/influxdb/rails/sql/query.rb,
lib/influxdb/rails/configuration.rb,
lib/influxdb/rails/sql/normalizer.rb,
lib/influxdb/rails/instrumentation.rb,
lib/influxdb/rails/exception_presenter.rb,
lib/influxdb/rails/middleware/subscriber.rb,
lib/influxdb/rails/air_traffic_controller.rb,
lib/influxdb/rails/middleware/sql_subscriber.rb,
lib/influxdb/rails/middleware/render_subscriber.rb,
lib/influxdb/rails/middleware/simple_subscriber.rb,
lib/influxdb/rails/middleware/request_subscriber.rb,
lib/influxdb/rails/middleware/hijack_render_exception.rb,
lib/influxdb/rails/middleware/hijack_rescue_action_everywhere.rb

Overview

InfluxDB::Rails contains the glue code needed to integrate with InfluxDB and Rails. This is a singleton class.

Defined Under Namespace

Modules: AirTrafficController, Instrumentation, Logger, Middleware, Sql Classes: Backtrace, Configuration, Context, ExceptionPresenter, Rack, Railtie

Constant Summary collapse

VERSION =
"1.0.0".freeze

Constants included from Logger

Logger::PREFIX

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.clientObject

rubocop:disable Metrics/MethodLength rubocop:disable Metrics/AbcSize



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/asklytics-influxdb-rails.rb', line 42

def client
  @client ||= InfluxDB::Client.new \
    database:       configuration.influxdb_database,
    username:       configuration.influxdb_username,
    password:       configuration.influxdb_password,
    hosts:          configuration.influxdb_hosts,
    port:           configuration.influxdb_port,
    async:          configuration.async,
    use_ssl:        configuration.use_ssl,
    retry:          configuration.retry,
    open_timeout:   configuration.open_timeout,
    read_timeout:   configuration.read_timeout,
    max_delay:      configuration.max_delay,
    time_precision: configuration.time_precision
end

.configurationObject

rubocop:enable Metrics/MethodLength rubocop:enable Metrics/AbcSize



61
62
63
# File 'lib/asklytics-influxdb-rails.rb', line 61

def configuration
  @configuration ||= InfluxDB::Rails::Configuration.new
end

Class Method Details

.configure(_silent = false) {|configuration| ... } ⇒ Object

Yields:



30
31
32
33
34
35
36
37
# File 'lib/asklytics-influxdb-rails.rb', line 30

def configure(_silent = false)
  yield(configuration)

  # if we change configuration, reload the client
  self.client = nil

  InfluxDB::Logging.logger = configuration.logger unless configuration.logger.nil?
end

.currentObject



75
76
77
# File 'lib/asklytics-influxdb-rails.rb', line 75

def current
  @current ||= InfluxDB::Rails::Context.new
end

.current_timestampObject

rubocop:enable Metrics/MethodLength rubocop:enable Metrics/AbcSize



110
111
112
# File 'lib/asklytics-influxdb-rails.rb', line 110

def current_timestamp
  InfluxDB.now(configuration.time_precision)
end

.ignorable_exception?(ex) ⇒ Boolean

Returns:

  • (Boolean)


114
115
116
# File 'lib/asklytics-influxdb-rails.rb', line 114

def ignorable_exception?(ex)
  configuration.ignore_current_environment? || configuration.ignore_exception?(ex)
end

.report_exception(ex, env = {}) ⇒ Object Also known as: transmit

rubocop:disable Metrics/MethodLength rubocop:disable Metrics/AbcSize



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/asklytics-influxdb-rails.rb', line 87

def report_exception(ex, env = {})
  timestamp = InfluxDB::Rails.current_timestamp
  env = influxdb_request_data if env.empty? && defined? influxdb_request_data
  exception_presenter = ExceptionPresenter.new(ex, env)
  log :info, "Exception: #{exception_presenter.to_json[0..512]}..."
  tags = configuration.tags_middleware.call(
    exception_presenter.context.merge(exception_presenter.dimensions)
  )

  client.write_point \
    configuration.series_name_for_exceptions,
    values:    exception_presenter.values.merge(ts: timestamp),
    tags:      tags,
    timestamp: timestamp
rescue StandardError => ex
  log :info, "[InfluxDB::Rails] Something went terribly wrong." \
    " Exception failed to take off! #{ex.class}: #{ex.message}"
end

.report_exception_unless_ignorable(ex, env = {}) ⇒ Object Also known as: transmit_unless_ignorable



79
80
81
# File 'lib/asklytics-influxdb-rails.rb', line 79

def report_exception_unless_ignorable(ex, env = {})
  report_exception(ex, env) unless ignorable_exception?(ex)
end

.rescueObject



118
119
120
121
122
123
124
# File 'lib/asklytics-influxdb-rails.rb', line 118

def rescue
  yield
rescue StandardError => ex
  raise ex if configuration.ignore_current_environment?

  transmit_unless_ignorable(ex)
end

.rescue_and_reraiseObject



126
127
128
129
130
131
# File 'lib/asklytics-influxdb-rails.rb', line 126

def rescue_and_reraise
  yield
rescue StandardError => ex
  transmit_unless_ignorable(ex)
  raise ex
end