#!/usr/bin/env perl

# Copyright (C) 2007  Joshua Hoblitt
# 
# $Id: nebdiskd,v 1.1 2007-02-23 01:10:57 jhoblitt Exp $

use strict;
use warnings FATAL => qw( all );

use vars qw( $VERSION );
$VERSION = '0.02';

use Net::Server::Daemonize qw(daemonize);
use Sys::Statistics::Linux::DiskUsage;
use DBI;
use Nebulous::Server::SQL;

use Getopt::Long qw( GetOptions :config auto_help auto_version );
use Pod::Usage qw( pod2usage );

my ($debug, $db, $dbuser, $dbpass);

$db     = $ENV{'NEB_DB'} unless $db;
$dbuser = $ENV{'NEB_USER'} unless $dbuser;
$dbpass = $ENV{'NEB_PASS'} unless $dbpass;

our $POLL_INTERVAL = 5;

GetOptions(
    'debug|d'   => \$debug,
    'db=s'      => \$db,
    'user=s'    => \$dbuser,
    'pass=s'    => \$dbpass,
) || pod2usage( 2 );

pod2usage( -msg => "Unknown option: @ARGV", -exitval => 2 ) if @ARGV;
pod2usage( -msg => "Required options: --db --user --pass", -exitval => 2 )
    unless $db && $dbuser && $dbpass;

daemonize(
    'jhoblitt', # User
    'wheel',    # Group
    undef       # PID file
) unless $debug;

my $sql = Nebulous::Server::SQL->new;

my $dbh = DBI->connect(
    "DBI:mysql:database=$db:host=localhost",
    $dbuser,
    $dbpass,
    {
        RaiseError => 1,
        PrintError => 0,
        AutoCommit => 0,
    },
);

$dbh->do( $sql->set_transaction_model );
$dbh->commit;

my $lxs   = Sys::Statistics::Linux::DiskUsage->new;

while (1) {
    my $query = $dbh->prepare_cached("INSERT INTO mount VALUES(?, ?, ?)");
    $dbh->do("DELETE FROM mount");

    my $stats = $lxs->get;
    foreach my $dev (keys %$stats) {
        my $mnt = $stats->{$dev};
        my %mount;
        $query->execute(@$mnt{qw( mountpoint total usage )});
    }

    $dbh->commit;

    sleep $POLL_INTERVAL;
}
