module Telemetry::Metrics::Parser::LineProtocol

Public Class Methods

get_measurement(line) click to toggle source
# File lib/telemetry/metrics/parser/line_protocol.rb, line 26
def get_measurement(line)
  measurement = line.split(',').first
  return nil if measurement.include? '='

  measurement
end
hash_to_line(hash) click to toggle source
# File lib/telemetry/metrics/parser/line_protocol.rb, line 54
def hash_to_line(hash)
  hash.map { |k, v| "#{k}=#{v}" }.join(',').strip.delete_suffix(',')
end
parse(line, use_shellwords: true) click to toggle source
# File lib/telemetry/metrics/parser/line_protocol.rb, line 10
def parse(line, use_shellwords: true)
  if use_shellwords
    raw_tags, raw_fields, timestamp = Shellwords.split(line.strip)
  else
    raw_tags, raw_fields, timestamp = line.strip.split
  end

  {
    measurement: get_measurement(line),
    tags: split_string_to_hash(raw_tags),
    fields: split_string_to_hash(raw_fields),
    timestamp: convert_to_number(timestamp)
  }
end
split_string_to_hash(raw_string) click to toggle source
# File lib/telemetry/metrics/parser/line_protocol.rb, line 34
def split_string_to_hash(raw_string)
  results = {}
  return results if raw_string.nil?

  raw_string.split(',').each do |string|
    next unless string.include? '='

    k, v = string.split('=')
    results[k.to_sym] = convert_to_number(v)
  end

  results
end
to_line_protocol(measurement:, fields:, tags: {}, timestamp: DateTime.now.strftime('%Q')) click to toggle source
# File lib/telemetry/metrics/parser/line_protocol.rb, line 49
def to_line_protocol(measurement:, fields:, tags: {}, timestamp: DateTime.now.strftime('%Q'))
  "#{measurement},#{hash_to_line(tags)} #{hash_to_line(fields)} #{timestamp}"
end

Private Instance Methods

get_measurement(line) click to toggle source
# File lib/telemetry/metrics/parser/line_protocol.rb, line 26
def get_measurement(line)
  measurement = line.split(',').first
  return nil if measurement.include? '='

  measurement
end
hash_to_line(hash) click to toggle source
# File lib/telemetry/metrics/parser/line_protocol.rb, line 54
def hash_to_line(hash)
  hash.map { |k, v| "#{k}=#{v}" }.join(',').strip.delete_suffix(',')
end
parse(line, use_shellwords: true) click to toggle source
# File lib/telemetry/metrics/parser/line_protocol.rb, line 10
def parse(line, use_shellwords: true)
  if use_shellwords
    raw_tags, raw_fields, timestamp = Shellwords.split(line.strip)
  else
    raw_tags, raw_fields, timestamp = line.strip.split
  end

  {
    measurement: get_measurement(line),
    tags: split_string_to_hash(raw_tags),
    fields: split_string_to_hash(raw_fields),
    timestamp: convert_to_number(timestamp)
  }
end
split_string_to_hash(raw_string) click to toggle source
# File lib/telemetry/metrics/parser/line_protocol.rb, line 34
def split_string_to_hash(raw_string)
  results = {}
  return results if raw_string.nil?

  raw_string.split(',').each do |string|
    next unless string.include? '='

    k, v = string.split('=')
    results[k.to_sym] = convert_to_number(v)
  end

  results
end
to_line_protocol(measurement:, fields:, tags: {}, timestamp: DateTime.now.strftime('%Q')) click to toggle source
# File lib/telemetry/metrics/parser/line_protocol.rb, line 49
def to_line_protocol(measurement:, fields:, tags: {}, timestamp: DateTime.now.strftime('%Q'))
  "#{measurement},#{hash_to_line(tags)} #{hash_to_line(fields)} #{timestamp}"
end