Sha256: a3041dd0348eba71f17bf83bf0bc9449dc0851ca2ad8a3437db8436a8b707c6e

Contents?: true

Size: 1.49 KB

Versions: 1

Compression:

Stored size: 1.49 KB

Contents

#!/usr/bin/env ruby

require 'json'
require 'rubygems'
require 'ostruct'

config = JSON::parse(ARGV[0])

$stdout.sync = true

def GB b; (b.to_f / 1024**3).round(6); end # GB significant down to 4kB

def get_mounts
  mount_hash = {}
  mounts = File.open("/etc/mtab", "r").read.split("\n").map{|l| l.split(/\s+/)}
  mounts.each{|m| mount_hash[m[1]] = m[0] unless %w[devpts udev sysfs tmpfs none proc].include?(m[0])}
  mount_hash
end

def stat_fs (mounts)
  s = %x[stat --printf="%n %s %b %f %a %c %d\n" -f #{mounts.keys.join(' ')}].split("\n")
  s.map!{|l| l.split}
  s.map{|l|
    OpenStruct.new(
      name: mounts[l[0]],
      block_size: l[1].to_i,
      blocks: l[2].to_i,
      blocks_free: l[3].to_i,
      blocks_available: l[4].to_i, #blocks available to non-superuser
      files: l[5].to_i,
      files_available: l[6].to_i
    ).freeze
  }
end

while(true) do
  mounts = get_mounts
  stats = stat_fs(mounts).select{|m| m.blocks > 0}
  info = stats.map{ |s|
    [s.name, {
      space_used: GB((s.blocks - s.blocks_free) * s.block_size),
      space_free: GB(s.blocks_available         * s.block_size),
      space_priv: GB((s.blocks_free - s.blocks_available) * s.block_size),
      space_used_percentage: ((s.blocks - s.blocks_free) * 100.0 / (s.blocks - s.blocks_free + s.blocks_available)).round(2),
      files_used: s.files - s.files_available,
      files_free: s.files_available,
    }]
  }
  puts JSON::generate(Hash[*info.flatten])

  break unless config.include?('interval')
  sleep config['interval']
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
panoptimon-0.4.5 collectors/disk/disk