#!/usr/bin/perl -w
###########################################
# Mike Schilli, 2006 (m@perlmeister.com)
###########################################
use strict;
use WatchLAN;
my $reachback = DateTime
  ->now( time_zone => "local" )
  ->subtract( minutes => 60 * 24 );

my $events = WatchLAN::Activity::Manager->
  get_activity(
    query   => [ minute => 
                 { gt => $reachback },
               ],
    sort_by => ['minute'],
);

my %latest = ();

for my $event (@$events) {
  $latest{$event->device_id()} = $event;
}

for my $id (keys %latest) {
    my $event = $latest{$id};
    my $name = $event->device()->name();
    $name ||= "unknown (id=$id)";
    printf "%23s: %s ago\n", $name, 
           time_diff($event->minute());
}

###########################################
sub time_diff {
###########################################
  my ($dt) = @_;

  my $duration = DateTime->now(
    time_zone => "local"
  ) - $dt;

  for (qw(hours minutes seconds)) {
      if(my $n = $duration->in_units($_)) {
          my $unit = $_;
          $unit =~ s/s$// if $n == 1;
          return "$n $unit";
      }
  }
}
