class DockerBoss::Module::InfluxDB::Worker

Public Class Methods

new(config) click to toggle source
# File lib/docker_boss/module/influxdb.rb, line 98
def initialize(config)
  @config = config
end

Public Instance Methods

blkio_sample(id, type, file, key_prefix) { |k, v| ... } click to toggle source
# File lib/docker_boss/module/influxdb.rb, line 142
def blkio_sample(id, type, file, key_prefix)
  return to_enum(:blkio_sample, id, type, file, key_prefix) unless block_given?
  data = {}

  File.readlines(build_path(id, type, file)).each do |line|
    (maj_min,k,v) = line.chomp.split(/\s+/, 3)
    if maj_min != 'Total'
      data["#{key_prefix}_#{k.downcase}"] ||= 0
      data["#{key_prefix}_#{k.downcase}"] += v.to_i
    end
  end

  data.each { |k,v| yield k, v }
end
blkio_v_sample(id, type, file, key) { |k, v| ... } click to toggle source
# File lib/docker_boss/module/influxdb.rb, line 157
def blkio_v_sample(id, type, file, key)
  return to_enum(:blkio_v_sample, id, type, file, key) unless block_given?
  data = {}

  File.readlines(build_path(id, type, file)).each do |line|
    (maj_min,v) = line.chomp.split(/\s+/, 2)
    data[key] ||= 0
    data[key] += v.to_i
  end

  data.each { |k,v| yield k, v }
end
build_path(id, type, file) click to toggle source
# File lib/docker_boss/module/influxdb.rb, line 102
def build_path(id, type, file)
  if @config['docker_cg']
    "#{@config['cgroup_path']}/#{type}/docker/#{id}/#{file}"
  else
    "#{@config['cgroup_path']}/#{type}/system.slice/docker-#{id}.scope/#{file}"
  end
end
kv_sample(id, type, file, key_prefix) { |"#{key_prefix}_#{downcase}", to_i| ... } click to toggle source
# File lib/docker_boss/module/influxdb.rb, line 133
def kv_sample(id, type, file, key_prefix)
  return to_enum(:kv_sample, id, type, file, key_prefix) unless block_given?

  File.readlines(build_path(id, type, file)).each do |line|
    (k,v) = line.chomp.split(/\s+/, 2)
    yield "#{key_prefix}_#{k.downcase}", v.to_i
  end
end
sample_container(container) click to toggle source
# File lib/docker_boss/module/influxdb.rb, line 110
def sample_container(container)
  time_now = Time.now.to_i
  data = { time: time_now }

  kv_sample(container[:id], 'memory', 'memory.stat', 'memory') { |k,v| data[k] = v }
  kv_sample(container[:id], 'cpuacct', 'cpuacct.stat', 'cpuacct') { |k,v| data[k] = v }
  ['blkio.io_serviced', 'blkio.io_service_bytes',
   'blkio.io_wait_time', 'blkio.io_service_time', 'blkio.io_queued'].each do |f|
    blkio_sample(container[:id], 'blkio', f, f.gsub(/\./, '_')) { |k,v| data[k] = v }
  end
  ['blkio.sectors'].each do |f|
    blkio_v_sample(container[:id], 'blkio', f, f.gsub(/\./, '_')) { |k,v| data[k] = v }
  end

  name = container[:name].empty? ? container[:id] : container[:name]

  {
    name:           "#{@config['prefix']}#{name}",
    columns:        data.keys,
    points:         [ data.values ]
  }
end