#!/usr/bin/perl
###########################################
# sysinfo - Show Linux System Statistics
# Mike Schilli, 2002 (m@perlmeister.com)
###########################################
use warnings;
use strict;
use Inline "C";

my ($uptime, $load1, $load5, $load15, 
    $totalram, $freeram, $sharedram, 
    $bufferram, $totalswap, $freeswap, 
    $procs) = sysinfo_as_list();

die "sysinfo failed" unless 
                     defined $uptime;

print "Uptime: $uptime secs\n";
print "Load: $load1, $load5, $load15\n";
print "$procs processes running\n";

__END__
__C__

#include <sys/sysinfo.h>
#define MO_IV(x) sv_2mortal(newSViv(x))

void sysinfo_as_list() {
   Inline_Stack_Vars;
   struct sysinfo si;

   if(sysinfo (&si)) {
       return;
   }

   Inline_Stack_Reset;
   Inline_Stack_Push(MO_IV(si.uptime));
   Inline_Stack_Push(MO_IV(si.loads[0]));
   Inline_Stack_Push(MO_IV(si.loads[1]));
   Inline_Stack_Push(MO_IV(si.loads[2]));
   Inline_Stack_Push(MO_IV(si.totalram));
   Inline_Stack_Push(MO_IV(si.freeram));
   Inline_Stack_Push(MO_IV(si.sharedram));
   Inline_Stack_Push(MO_IV(si.bufferram));
   Inline_Stack_Push(MO_IV(si.totalswap));
   Inline_Stack_Push(MO_IV(si.freeswap));
   Inline_Stack_Push(MO_IV(si.procs));
   Inline_Stack_Done;
}
