#! /usr/bin/perl -w

use strict;
use BSD::Sysctl 'sysctl';

my $max = sysctl('kern.maxfiles');
my $open = BSD::Sysctl->new('kern.openfiles');

my $max_open = $open->get();

while (1) {
    my $nr = $open->get();
    printf "%04d-%02d-%02d %02d:%02d:%02d %5d %5.1f%% %s\n",
        sub {$_[5]+1900, $_[4]+1, reverse(@_[0..3])}->(localtime),
        $nr,
        ($nr/$max)*100,
        do {
            if ($max_open < $nr) {
                $max_open = $nr;
                '***';
            }
            else {
                '';
            }
        },
    ;
    sleep 60;
}
