#!/usr/bin/perl use strict; use FileHandle; use RRDs; use Glib; use Linux::meminfo; my $outfile = "/var/www/apps/memstats/loke.rrd"; unless( -e $outfile) { &create($outfile); } if( -e $outfile) { my $loop = Glib::MainLoop->new; my $timer = Glib::Timeout -> add(10000, \&update); $loop -> run; } sub create { RRDs::create( "$outfile", "-s 10", 'DS:total:GAUGE:30:0:U', 'DS:used:GAUGE:30:0:U', 'DS:free:GAUGE:30:0:U', 'DS:buffers:GAUGE:30:0:U', 'DS:cached:GAUGE:30:0:U', 'RRA:AVERAGE:0.5:1:360', 'RRA:AVERAGE:0.5:6:1440', 'RRA:AVERAGE:0.5:30:2014', 'RRA:AVERAGE:0.5:360:672', 'RRA:AVERAGE:0.5:8640:365', ); &errorcheck; `chmod 640 "$outfile"`; `chown admin:www-data "$outfile"`; } sub update { if(defined($outfile)) { my %mem = &get_meminfo; my $now = time; foreach my $key(keys %mem) { $mem{$key} = $mem{$key} * 1024; } my $used = $mem{'MemTotal'} - $mem{'MemFree'} - $mem{'Buffers'} - $mem{'Cached'}; RRDs::update( "$outfile", "$now:$mem{'MemTotal'}:$used:$mem{'MemFree'}:$mem{'Buffers'}:$mem{'Cached'}" ); &errorcheck; } return 1; } sub errorcheck { my $ERR = RRDs::error; print "$ERR\n" if defined($ERR); }