The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use ZipTie::Client;
use XML::Simple;
use Data::Dumper;

my $crawl = "false";
if (@ARGV gt 1 and $ARGV[0] eq '-c')
{
    shift(@ARGV);
    $crawl = "true";
}

die("You must specify at least one device!\n") unless (@ARGV);

my $client = ZipTie::Client->new(username => 'admin', password => 'password', host => 'localhost:8080', );

my %address = (key => 'addresses', value => \@ARGV);
my %crawl = (key => 'crawl', value => $crawl);

my %param_map = (entry => [\%address, \%crawl]);

my %job = (description => 'Perl initiated discovery.',
           jobGroup => 'Run now',
           jobName => 'Perl Discovery',
           jobType => 'Discover Devices',
           jobParameters => \%param_map);

my $execution = $client->scheduler()->runNow(jobData => \%job);
print("Scheduled discovery with execution ID: $execution->{id}\n");

my $event_provider = $client->events();
$event_provider->subscribe(queue => 'discovery');
while (1)
{
   my @events = $event_provider->poll();
   foreach my $event (@events)
   {
      my $xml = XMLin($event->{text});
      
      my $isActive = $xml->{entry}->{IsActive}->{content};
      last if ($isActive eq 'false');

      my $analyzed = $xml->{entry}->{AddressesAnalyzed}->{content};
      my $found = $xml->{entry}->{RespondedToSnmp}->{content};
      my $queue = $xml->{entry}->{QueueSize}->{content};
      print STDERR "Discovered $found, analyzed $analyzed, $queue in queue. \r";
   }
}
print STDERR "\n";