10 my $dbh = nms::db_connect();
12 my $cam = $cgi->param('cam');
13 if (!defined($cam) || ($cam ne "1" && $cam ne "2")) {
17 GD::Image->trueColor(1);
18 my $imgfile = LWP::Simple::get(($cam == 1) ? 'http://tgcam.jodal.no/techserver.php' : 'http://tgcam.jodal.no/crewcam.php')
20 my $gd = GD::Image->newFromJpegData($imgfile)
26 2.295433895, -3.779680538, 1041.484066,
27 0.2246879859, 6.923972919, -1575.662172,
28 -0.0004822922595, 0.01151624710, -1.684908753
32 3.656223906, -6.265111699, 863.9199590,
33 -5.954616242, 51.56856164, -9307.725196,
34 -0.006634136987, 0.04963057393, -7.875733154
39 my $q = $dbh->prepare('select * from switches natural left join
40 ( select switch,sum(bytes_in)/count(*) as
41 bytes_in,sum(bytes_out)/count(*) as bytes_out from get_datarate() group
42 by switch ) t1 where ip<>\'127.0.0.1\' and sysname like \'e%-%sw\'');
46 while (my $ref = $q->fetchrow_hashref()) {
47 if (defined($ref->{'bytes_in'})) {
49 my $traffic = 4.0 * $ref->{'bytes_in'} + $ref->{'bytes_out'}; # average and convert to bits (should be about the same in practice)
51 my $max = 20_000_000.0; # 10mbit
52 my $min = 100_000.0; # 100kbit
53 if ($traffic >= $min) {
54 $intensity = 2.0 * (log($traffic / $min) / log(10)) / (log($max / $min) / log(10));
55 $intensity = 2.0 if ($intensity > 2.0);
58 $sc{$ref->{'sysname'}} = get_color($intensity);
66 my $nx = $coeffs[0] * $x + $coeffs[1] * $y + $coeffs[2] * $z;
67 my $ny = $coeffs[3] * $x + $coeffs[4] * $y + $coeffs[5] * $z;
68 my $nz = $coeffs[6] * $x + $coeffs[7] * $y + $coeffs[8] * $z;
70 my $kx = $nx / $nz + (($cam == 2) ? 700 : 0);
71 my $ky = $ny / $nz + (($cam == 2) ? -15 : 0);
73 if ($kx >= 0 && $kx < 640 && $ky >= 0 && $ky < 476) {
74 my $col = int($kx / 213) + 1;
75 my $row = int($ky / 32) * 2 + 5;
77 my $gnf = $sc{"e$row-${col}sw"};
79 my ($ra, $ga, $ba) = $gd->rgb($gd->getPixel($x, $y));
80 my ($rb, $gb, $bb) = $gd->rgb($gnf);
84 my $r = $ra * (1.0 - $f) + $rb * $f;
85 my $g = $ga * (1.0 - $f) + $gb * $f;
86 my $b = $ba * (1.0 - $f) + $bb * $f;
88 $gd->setPixel($x, $y, $gd->colorAllocate($r, $g, $b));
91 if ($kx >= 680 && $kx < 1280 && $ky >= 0 && $ky < 476) {
92 my $col = int(($kx - 680) / 213) + 4;
93 my $row = int($ky / 32) * 2 + 5;
95 my $gnf = $sc{"e$row-${col}sw"};
97 my ($ra, $ga, $ba) = $gd->rgb($gd->getPixel($x, $y));
98 my ($rb, $gb, $bb) = $gd->rgb($gnf);
102 my $r = $ra * (1.0 - $f) + $rb * $f;
103 my $g = $ga * (1.0 - $f) + $gb * $f;
104 my $b = $ba * (1.0 - $f) + $bb * $f;
106 $gd->setPixel($x, $y, $gd->colorAllocate($r, $g, $b));
109 if ($kx >= 0 && $kx < 640 && $ky >= 510 && $ky < 1050) {
110 my $col = int($kx / 213) + 1;
111 my $row = int($ky / 32) * 2 + 5;
113 my $gnf = $sc{"e$row-${col}sw"};
115 my ($ra, $ga, $ba) = $gd->rgb($gd->getPixel($x, $y));
116 my ($rb, $gb, $bb) = $gd->rgb($gnf);
120 my $r = $ra * (1.0 - $f) + $rb * $f;
121 my $g = $ga * (1.0 - $f) + $gb * $f;
122 my $b = $ba * (1.0 - $f) + $bb * $f;
124 $gd->setPixel($x, $y, $gd->colorAllocate($r, $g, $b));
127 if ($kx >= 680 && $kx < 1280 && $ky >= 510 && $ky < 1050) {
128 my $col = int(($kx - 680) / 213) + 4;
129 my $row = int($ky / 32) * 2 + 5;
131 my $gnf = $sc{"e$row-${col}sw"};
133 my ($ra, $ga, $ba) = $gd->rgb($gd->getPixel($x, $y));
134 my ($rb, $gb, $bb) = $gd->rgb($gnf);
138 my $r = $ra * (1.0 - $f) + $rb * $f;
139 my $g = $ga * (1.0 - $f) + $gb * $f;
140 my $b = $ba * (1.0 - $f) + $bb * $f;
142 $gd->setPixel($x, $y, $gd->colorAllocate($r, $g, $b));
149 print CGI::header(-type=>'image/png', -refresh=>'10; http://nms.tg07.gathering.org/overlay.pl?cam=' . $cam);
153 my $intensity = shift;
154 my $gamma = 1.0/1.90;
155 if ($intensity > 1.0) {
156 return $gd->colorAllocate(255.0, 255.0 * ((2.0 - $intensity) ** $gamma), 0);
158 return $gd->colorAllocate(255.0 * ($intensity ** $gamma), 255, 0);