All pastes #719909 Raw Edit

Miscellany

public text v1 · immutable
#719909 ·published 2007-09-29 19:21 UTC
rendered paste body
#!/usr/local/bin/perl -w

	use CGI qw(:standard);
	use GD::Graph::bars;
	use strict;
	use Time::HiRes;
         use Time::HiRes qw( usleep ualarm gettimeofday tv_interval nanosleep
                                      clock_gettime clock_getres clock );
	my $graph = GD::Graph::bars->new(2000, 600);
	my $format = $graph->export_format;
	print header("image/$format");

	my $count = 20;
	my $arr = [[[]]];
	my $i;
	my $j;
	my $rnd;
	my $t;
	my @tmp;
	my @h;


	my @cpu = ([[],[]], [[],[]], [[],[]], [[],[]], [[],[]]); # nCPU -> count[] -> ...

	my @process = (0, 0, 0); # { start CPUn, howmuch, begin, ... }

	for ($i = 0; $i < $count; ++$i) {	
		$h[$i] = $i;
		for ($j = 0; $j < 3; ++$j) {
			@process = (0, 0, 0);
			$process[0] = $j;
			$process[1] = rand;
			$process[2] = scalar (gettimeofday);
			push @{ $cpu[$j][0] }, [ @process ];
		}
	}

repeat:
		if (defined ($cpu[0][0][0]) and ($cpu[0][0][0][1] + $cpu[0][0][0][2] < gettimeofday)) {
				push @{ $cpu[0][1][0] }, $cpu[0][0][0][1];
				push @{ $cpu[0][1][1] }, (gettimeofday - $cpu[0][0][0][2]);
				$cpu[0][0][0][1] = rand;
				$cpu[0][0][0][2] = scalar (gettimeofday);
				@tmp = (0, 0, 0);
				$tmp[0] = $cpu[0][0][0][0];
				$tmp[1] = $cpu[0][0][0][1];
				$tmp[2] = $cpu[0][0][0][2];
				shift @{$cpu[0][0]};
				push @{ $cpu[3][0] }, [ @tmp ];
		}

		if (defined ($cpu[1][0][0]) and ($cpu[1][0][0][1] + $cpu[1][0][0][2] < gettimeofday)) {
				push @{ $cpu[1][1][0] }, $cpu[1][0][0][1];
				push @{ $cpu[1][1][1] }, gettimeofday - $cpu[1][0][0][2];
				$cpu[1][0][0][1] = rand;
				$cpu[1][0][0][2] = scalar (gettimeofday);
				@tmp = (0, 0, 0);
				$tmp[0] = $cpu[1][0][0][0];
				$tmp[1] = $cpu[1][0][0][1];
				$tmp[2] = $cpu[1][0][0][2];
				shift @{$cpu[1][0]};
				push @{ $cpu[3][0] }, [ @tmp ];
		}
			
		if (defined ($cpu[2][0][0]) and ($cpu[2][0][0][1] + $cpu[2][0][0][2] < gettimeofday)) {
#			        print "CPU#2\t", $cpu[2][0][0][1], "\t", gettimeofday - $cpu[2][0][0][2], "\n";
				push @{ $cpu[2][1][0] }, $cpu[2][0][0][1];
				push @{ $cpu[2][1][1] }, gettimeofday - $cpu[2][0][0][2];
				$cpu[2][0][0][1] = rand;
				$cpu[2][0][0][2] = scalar (gettimeofday);
				@tmp = (0, 0, 0);
				$tmp[0] = $cpu[2][0][0][0];
				$tmp[1] = $cpu[2][0][0][1];
				$tmp[2] = $cpu[2][0][0][2];
				shift @{$cpu[2][0]};
				push @{ $cpu[4][0] }, [ @tmp ];
		}

		if (defined ($cpu[3][0][0]) and ($cpu[3][0][0][1] + $cpu[3][0][0][2] < gettimeofday)) {
				push @{ $cpu[3][1][0] }, $cpu[3][0][0][1];
				push @{ $cpu[3][1][1] }, gettimeofday - $cpu[3][0][0][2];
				$cpu[3][0][0][1] = rand;
				$cpu[3][0][0][2] = scalar (gettimeofday);
				@tmp = (0, 0, 0);
				$tmp[0] = $cpu[3][0][0][0];
				$tmp[1] = $cpu[3][0][0][1];
				$tmp[2] = $cpu[3][0][0][2];
				shift @{$cpu[3][0]};
				$rnd = rand;
				if ($rnd >= 0 and $rnd < 0.2) {
				        push @{ $cpu[0][0] }, [ @tmp ];
                                }
				if ($rnd >= 0.2 and $rnd < 1.0) {
				        push @{ $cpu[4][0] }, [ @tmp ];
                                }
		}

		if (defined ($cpu[4][0][0]) and ($cpu[4][0][0][1] + $cpu[4][0][0][2] < gettimeofday)) {
#			        print "CPU#4\t", $cpu[4][0][0][1], "\t", gettimeofday - $cpu[4][0][0][2], "\n";
				push @{ $cpu[4][1][0] }, $cpu[4][0][0][1];
				push @{ $cpu[4][1][1] }, gettimeofday - $cpu[4][0][0][2];
				$cpu[4][0][0][1] = rand;
				$cpu[4][0][0][2] = scalar (gettimeofday);
				@tmp = (0, 0, 0);
				$tmp[0] = $cpu[4][0][0][0];
				$tmp[1] = $cpu[4][0][0][1];
				$tmp[2] = $cpu[4][0][0][2];
				shift @{$cpu[4][0]};
				$rnd = rand;
				if ($rnd >= 0 and $rnd < 0.1) {
					push @{ $cpu[2][0] }, [ @tmp ];
				}
		}

		goto repeat if (
			defined $cpu[0][0][0] ||
			defined $cpu[1][0][0] ||
			defined $cpu[2][0][0] ||
			defined $cpu[3][0][0] ||
			defined $cpu[4][0][0]
		);


        for ($i = $count * 2; $i > 0; --$i) {
                defined($cpu[0][1][0][$j]) or $cpu[0][1][0][$j] = 0;
	        defined($cpu[0][1][1][$j]) or $cpu[0][1][1][$j] = 0;
	        defined($cpu[1][1][0][$j]) or $cpu[1][1][0][$j] = 0;
	        defined($cpu[1][1][1][$j]) or $cpu[1][1][1][$j] = 0;
	        defined($cpu[2][1][0][$j]) or $cpu[2][1][0][$j] = 0;
	        defined($cpu[2][1][1][$j]) or $cpu[2][1][1][$j] = 0;
	        defined($cpu[3][1][0][$j]) or $cpu[3][1][0][$j] = 0;
	        defined($cpu[3][1][1][$j]) or $cpu[3][1][1][$j] = 0;
	        defined($cpu[4][1][0][$j]) or $cpu[4][1][0][$j] = 0;
	        defined($cpu[4][1][1][$j]) or $cpu[4][1][1][$j] = 0;
	}
#	for ($i = 0; $i < $count; ++$i) {
#repeat:
#		for ($j = 0; ; ++$j) {
#			defined($arr[$i][$j + 1]) or last;
#		}
#		if ($arr[$i][$j] == 1) {
#			$arr[$i][$j + 1] = 4;
#			goto repeat;
#		}
#		if ($arr[$i][$j] == 2) {
#			$arr[$i][$j + 1] = 4;
#			goto repeat;
#		}
#		if ($arr[$i][$j] == 3) {
#			$arr[$i][$j + 1] = 5;
#			goto repeat;
#		}
#		if ($arr[$i][$j] == 4) {
#			$rnd_rslt = rand;
#			$arr[$i][$j + 1] = 1
#				if ($rnd_rslt >= 0 and $rnd_rslt < 0.2);
#			$arr[$i][$j + 1] = 5
#				if ($rnd_rslt >= 0.2 and $rnd_rslt < 1.0);
#			goto repeat;
#		}
#		if ($arr[$i][$j] == 5) {
#			$rnd_rslt = rand;
#			$arr[$i][$j + 1] = 3
#				if ($rnd_rslt >= 0 and $rnd_rslt < 0.1);
#			$arr[$i][$j + 1] = 6
#				if ($rnd_rslt >= 0.1 and $rnd_rslt < 1.0);
#			goto repeat;
#		}
#	}

#	for ($i = 0; $i < $count; ++$i) {
#		$r0[$i] = 0;
#		$r1[$i] = 0;
#		$r2[$i] = 0;
#		for ($j = 0; ; ++$j) {
##			print "$arr[$i][$j] ";
#
#			($i - 0) / 3 == int(($i - 0) / 3)
#				and $r0[($i - 0) / 3] += 1
#					if defined $arr[$i][$j];
#			($i - 1) / 3 == int(($i - 1) / 3)
#				and $r1[($i - 1) / 3] += 1
#					if defined $arr[$i][$j];
#			
#			($i - 2) / 3 == int(($i - 2) / 3)
#				and $r2[($i - 2) / 3] += 1
#					if defined $arr[$i][$j];
#			defined($arr[$i][$j + 1]) or last;
#		}
##	print "\n";
#	}
#	for ($i = 0; $i < $count; ++$i)  {
#		print "r0[$i]=$r0[$i]\n" if defined $r0[$i];
#		print "r1[$i]=$r1[$i]\n" if defined $r1[$i];
#		print "r2[$i]=$r2[$i]\n" if defined $r2[$i];
#	}


	my @data = (
		[ @h ],
		[ @{$cpu[0][1][0]} ],
		[ @{$cpu[0][1][1]} ],
		[ @{$cpu[1][1][0]} ],
		[ @{$cpu[1][1][1]} ],
		[ @{$cpu[2][1][0]} ],
		[ @{$cpu[2][1][1]} ],
		[ @{$cpu[3][1][0]} ],
		[ @{$cpu[3][1][1]} ],
		[ @{$cpu[4][1][0]} ],
		[ @{$cpu[4][1][1]} ]
	);
	
	$graph->set(
		x_label           => "Count",
		y_label           => '',
		title             => 'Repository Dynamic',
		y_max_value       => 3,
		y_min_value	  => 0,
		y_tick_number     => 10,
		y_label_skip      => 1,
		x_ticks		  => 1,
#		correct_width     => 5
		dclrs		  => [ qw(lblue dblue lred dred lgreen dgreen lpurple dpurple gray dgray) ]
	) or die $graph->error;

	my $gd = $graph->plot(\@data) or die $graph->error;
	binmode STDOUT;
     	print $graph->plot(\@data)->$format();