#!/usr/bin/perl -w ########################################### # Mike Schilli, 2006 (m@perlmeister.com) # angepasst 2009, by roli ########################################### use strict; use WatchLAN; #use Data::Dumper; my $reachback = DateTime->now( time_zone => "local" ) ->subtract( minutes => 60 * 24 ); my $events = WatchLAN::Activity::Manager->get_activity( with_objects => [ 'device', 'ip_address' ], query => [ minute => { gt => $reachback }, ], sort_by => ['minute'], ); #print Dumper @$events; 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)"; if($name =~ m/unknown \(id=/){ my $mac = $event->device()->mac_address(); my $ip = $event->ip_address()->string(); printf "%23s: %s ago \t MAC=$mac IP=$ip\n", $name, time_diff($event->minute()); } else{ 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"; } } }