#!/usr/bin/perl

#
# script for RRDtool to collect free memory info
#

$step=60;
$base="/var/rrd/memfree.rrd";

if ($ARGV[0] eq init){
    
    system("rrdtool create $base --step $step".
    " DS:mem_free:GAUGE:200:0:999999999".
    " DS:swap_free:GAUGE:200:0:U".
    " DS:cached:GAUGE:200:0:999999999".
    " RRA=AVERAGE:0.5:1:1440".	# 1440 samples every minute - day
    " RRA=AVERAGE:0.5:5:2016"); # 2016 samples every 5 minute - week
    
    exit;
}

if ($ARGV[0] eq update){

# memfree and swap free    
    open LA,"</proc/meminfo";
    $_=<LA>;
    $a1=<LA>;
    $a2=<LA>;
    close LA;
    # parse
    @phiz=split /\s+/,$a1;
    @swap=split /\s+/,$a2;
    
    $pz=trim(@phiz[3]);
    $sw=trim(@swap[3]);
    $ca=trim(@phiz[6]);
    
    #print (" @phiz[3] @swap[3]\n");
    $n=time;
    system("rrdtool update $base $n:$pz:$sw:$ca ");
    #system("echo update $base $n:$pz:$sw:$ca ");    
    
    exit;
}

if ($ARGV[0] eq day){
    system("rrdtool graph /tmp/day-memfree.gif -t \"Memory Usage, MB\" ".
	"DEF:ram_free=$base:mem_free:AVERAGE ".
	"DEF:swap_free=$base:swap_free:AVERAGE ".	
	"DEF:cached=$base:cached:AVERAGE ".		
	"CDEF:ram_free_mb=ram_free,1048576,/ ".
	"CDEF:swap_free_mb=swap_free,1048576,/ ".
	"CDEF:cached_mb=cached,1048576,/ ".
	"AREA:swap_free_mb#ffff00:\"Available Swap Space\" ".
	"STACK:cached_mb#0000ff:\"Cached\" ".
	"STACK:ram_free_mb#00ff00:\"Free RAM\" ".
	"-h 200 -v MB ");    
    exit;
}

if($ARGV[0] eq remove){
    unlink $base;
}

if($ARGV[0] eq descr){
    print("Memory Usage Statistics:/tmp/day-memfree.gif\n");
}

sub trim{
    my @out=@_;
    for(@out){
        s/^\s+//;
        s/\s+$//;
    }
    return wantarray? @out : $out[0];
}




