commit 5eb1feca2d5d17a76a4591e6a3739a778ddb0df8 Author: neingeist Date: Thu Feb 21 12:13:03 2013 +0100 initial git commit diff --git a/conky-disks b/conky-disks new file mode 100755 index 0000000..5f4af9f --- /dev/null +++ b/conky-disks @@ -0,0 +1,97 @@ +#!/usr/bin/perl +use strict; +use warnings; +use Carp; + +use Sys::Filesystem (); +use Filesys::Df qw(df); +use IO::Socket; + +my @ignoreformats = qw(tmpfs sysfs devtmpfs devpts proc binfmt_misc + fusectl fuse.gvfsd-fuse fuse.vmware-vmblock + debugfs securityfs swap); + +my $color_ok = "#78af78"; +my $color_warn = "#ffff00"; +my $color_crit = "#ff0000"; + + +# check_mk based magic df kungfu +sub magic_level { + my ($level, $size) = @_; + + my $normsize = 20.0; # GB + my $exp = 0.6; + + my $hgb_size = $size / $normsize; + my $felt_size = $hgb_size ** $exp; + my $scale = $felt_size / $hgb_size; + my $new_level = 1 - ((1 - $level) * $scale); + if ($new_level < 0.6) { + $new_level = 0.6; + } + + return $new_level; +} + +my $fs = Sys::Filesystem->new(); +my @filesystems = $fs->filesystems(); + +# determine longest mount point path +my $mlength = 5; +for my $f (@filesystems) { + my $mount_point = $fs->mount_point($f); + + if (length($mount_point) > $mlength) { + $mlength = length($mount_point); + } +} + +for my $f (@filesystems) { + my $mount_point = $fs->mount_point($f); + my $format= $fs->format($f); + + next if grep { /^$format$/xsm } @ignoreformats; + + my $df = df($mount_point, 1024); # 1k blocks + my $size = $df->{blocks}/(1024*1024); + + my $level_warn = magic_level(0.80, $size) * 100; + my $level_crit = magic_level(0.90, $size) * 100; + + # color depends on used percent + my $color = $color_ok; + if ($df->{per} >= $level_warn) { + $color = $color_warn; + } + if ($df->{per} >= $level_crit) { + $color = $color_crit; + } + + printf(" \${color #98c2c7}%-${mlength}s\$color %2.f%% (%2.f/%2.f) %6.2fGB \${color $color}\${fs_bar 6 %s}\$color\n", + $mount_point, + 100 - $df->{per}, + 100 - $level_warn, 100 - $level_crit, + $df->{bfree}/(1024*1024), + $mount_point + ); +} + +# hddtemp +my $socket=IO::Socket::INET->new( + PeerAddr => 'localhost', PeerPort=> 7634, + Proto => 'tcp', Type => $IO::Socket::SOCK_STREAM) + or croak "Can't talk to hddtemp"; +my $hddtemp_output = <$socket>; +close $socket; + +my @hddtemp_output = split /[|]/x, $hddtemp_output; +my $diskcount = $#hddtemp_output/5; +for (my $i = 0; $i < $diskcount; $i++) { + my $dev = $hddtemp_output[$i*5+1]; + my $temp = $hddtemp_output[$i*5+3]; + my $unit = $hddtemp_output[$i*5+4]; + printf " %s %02.f°%s\n", $dev, $temp, $unit; +} + +# vim:textwidth=120: