#!/usr/bin/perl
# (C) Erich Focht 2006

use strict;

die if($#ARGV != 2);

my $nclients = $ARGV[0];
my $monitorhost = $ARGV[1];
my $monitorport = $ARGV[2];


my $delay = 10;

my $pid;
my @pids;
for (my $i=0; $i < $nclients; $i++) {
  FORK:
    if ($pid = fork) {
	# parent
	push @pids, $pid;
    } elsif (defined $pid) {
	# child
	my $n1=int($$/256);
	my $n2=$$-256*$n1;
	my $mac = "00.00.00.00.".sprintf("%02x.%02x",$n1,$n2);
	my $ip = "10.10.".sprintf("%02d.%02d",$n1,$n2);
	my $host = "host$$";
	my $nsteps = 3 * 60 / $delay;
	for (my $i = 0; $i < $nsteps; $i++) {
	    my $time = $i * $delay;
	    my $progress = $i * 100 / $nsteps;
	    my $msg="mac=$mac:ip=$ip:host=$host:cpu=i686:ncpus=4:kernel=2.6.19:mem=256000:os=imagename:tmpfs=100000:time=$time";
	    system("echo $msg:status=$progress | nc $monitorhost $monitorport");
	    system("echo $msg:speed=10 | nc $monitorhost $monitorport");
	    sleep $delay;
	}
    }
}

wait;
exit 0;
