class Influxer::Metrics

Base class for InfluxDB querying and writing

Constants

TIME_FACTOR

Attributes

database[R]
precision[R]
retention_policy[R]
series[R]
tag_names[RW]
timestamp[RW]

Public Class Methods

all() click to toggle source

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

# File lib/influxer/metrics/metrics.rb, line 107
def all
  if current_scope
    current_scope.clone
  else
    default_scoped
  end
end
attributes(*attrs) click to toggle source
# File lib/influxer/metrics/metrics.rb, line 45
def attributes(*attrs)
  attrs.each do |name|
    define_method("#{name}=") do |val|
      @attributes[name] = val
    end

    define_method(name.to_s) do
      @attributes[name]
    end
  end
end
inherited(subclass) click to toggle source
# File lib/influxer/metrics/metrics.rb, line 67
def inherited(subclass)
  subclass.set_series
  subclass.tag_names = tag_names.nil? ? [] : tag_names.dup
end
new(attributes = {}) click to toggle source
Calls superclass method Influxer::ActiveModel3::Model::new
# File lib/influxer/metrics/metrics.rb, line 151
def initialize(attributes = {})
  @attributes = {}
  @persisted = false
  super
end
quote(name) click to toggle source
# File lib/influxer/metrics/metrics.rb, line 141
def quote(name)
  '"' + name.to_s.gsub(/\"/) { '\"' } + '"'
end
quoted_series(val = @series, instance = nil, write: false) click to toggle source

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

# File lib/influxer/metrics/metrics.rb, line 118
def quoted_series(val = @series, instance = nil, write: false)
  case val
  when Regexp
    val.inspect
  when Proc
    quoted_series(val.call(instance), write: write)
  when Array
    if val.length > 1
      "merge(#{val.map { |s| quoted_series(s, write: write) }.join(",")})"
    else
      quoted_series(val.first, write: write)
    end
  else
    # Only add retention policy when selecting points
    # and not writing
    if !write && retention_policy.present?
      [quote(@retention_policy), quote(val)].join(".")
    else
      quote(val)
    end
  end
end
set_database(database) click to toggle source

Use custom database for this metrics

# File lib/influxer/metrics/metrics.rb, line 78
def set_database(database)
  @database = database
end
set_precision(precision) click to toggle source

Use custom precision for this metrics

# File lib/influxer/metrics/metrics.rb, line 83
def set_precision(precision)
  @precision = precision
end
set_retention_policy(policy_name) click to toggle source

Use custom retention policy

# File lib/influxer/metrics/metrics.rb, line 73
def set_retention_policy(policy_name)
  @retention_policy = policy_name
end
set_series(*args) click to toggle source

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

# File lib/influxer/metrics/metrics.rb, line 89
def set_series(*args)
  if args.empty?
    matches = to_s.match(/^(.*)Metrics$/)
    @series =
      if matches.nil?
        superclass.respond_to?(:series) ? superclass.series : to_s.underscore
      else
        matches[1].split("::").join("_").underscore
      end
  elsif args.first.is_a?(Proc)
    @series = args.first
  else
    @series = args
  end
end
tag?(name) click to toggle source
# File lib/influxer/metrics/metrics.rb, line 63
def tag?(name)
  tag_names.include?(name.to_s)
end
tags(*attrs) click to toggle source
# File lib/influxer/metrics/metrics.rb, line 57
def tags(*attrs)
  attributes(*attrs)
  self.tag_names ||= []
  self.tag_names += attrs.map(&:to_s)
end

Public Instance Methods

client() click to toggle source
# File lib/influxer/metrics/metrics.rb, line 195
def client
  Influxer.client
end
dup() click to toggle source
# File lib/influxer/metrics/metrics.rb, line 199
def dup
  self.class.new(@attributes)
end
persisted?() click to toggle source
# File lib/influxer/metrics/metrics.rb, line 187
def persisted?
  @persisted
end
series(**options) click to toggle source
# File lib/influxer/metrics/metrics.rb, line 191
def series(**options)
  self.class.quoted_series(self.class.series, self, **options)
end
tag_names() click to toggle source
# File lib/influxer/metrics/metrics.rb, line 213
def tag_names
  self.class.tag_names
end
tags() click to toggle source

Returns hash with metrics tags

# File lib/influxer/metrics/metrics.rb, line 209
def tags
  @attributes.select { |k, _| tag_names.include?(k.to_s) }
end
values() click to toggle source

Returns hash with metrics values

# File lib/influxer/metrics/metrics.rb, line 204
def values
  @attributes.reject { |k, _| tag_names.include?(k.to_s) }
end
write() click to toggle source
# File lib/influxer/metrics/metrics.rb, line 157
def write
  raise MetricsError if persisted?

  return false if invalid?

  run_callbacks :write do
    write_point
  end
  self
end
write!() click to toggle source
# File lib/influxer/metrics/metrics.rb, line 168
def write!
  raise MetricsInvalid if invalid?

  write
end
write_point() click to toggle source
# File lib/influxer/metrics/metrics.rb, line 174
def write_point
  data = {
    values: values,
    tags: tags,
    timestamp: parsed_timestamp
  }
  write_with_config(
    unquote(series(write: true)),
    data
  )
  @persisted = true
end

Private Instance Methods

parsed_timestamp() click to toggle source
# File lib/influxer/metrics/metrics.rb, line 226
def parsed_timestamp
  quote_timestamp_for_write @timestamp, client
end
unquote(name) click to toggle source
# File lib/influxer/metrics/metrics.rb, line 230
def unquote(name)
  name.gsub(/(\A['"]|['"]\z)/, "")
end
write_with_config(series, data) click to toggle source
# File lib/influxer/metrics/metrics.rb, line 219
def write_with_config(series, data)
  client.write_point(series, data,
                     self.class.precision,
                     self.class.retention_policy,
                     self.class.database)
end