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

my $h = sysinfo_as_hashref();

print "Uptime: $h->{uptime} secs\n";
print "Load: $h->{load1}, $h->{load5}, " .
      "$h->{load15}\n";
print "$h->{procs} processes running\n";

__END__
__C__

#include <sys/sysinfo.h>

HV *sysinfo_as_hashref() {
    Inline_Stack_Vars;
    struct sysinfo si;
    HV *hash;

    hash = (HV*) sv_2mortal((SV*)newHV());

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

    hv_store(hash, "uptime", 6, 
             newSViv(si.uptime), 0);
    hv_store(hash, "load1",  5, 
             newSViv(si.loads[0]), 0);
    hv_store(hash, "load5",  5, 
             newSViv(si.loads[1]), 0);
    hv_store(hash, "load15", 6, 
             newSViv(si.loads[2]), 0);
    hv_store(hash, "procs",  5, 
             newSViv(si.procs), 0);

    return hash;    
}
