8 my $dbh = DBI->connect("dbi:Pg:dbname=snmpfetch;host=violet.tg05.gathering.org", "snmpfetch", "removed")
9 or die "Couldn't connect to database";
11 my $cam = $cgi->param('cam');
12 if (!defined($cam) || ($cam ne "1" && $cam ne "2")) {
16 GD::Image->trueColor(1);
17 my $imgfile = LWP::Simple::get(($cam == 1) ? 'http://tgcam.jodal.no/techserver.php' : 'http://tgcam.jodal.no/crewcam.php')
19 my $gd = GD::Image->newFromJpegData($imgfile)
25 2.295433895, -3.779680538, 1041.484066,
26 0.2246879859, 6.923972919, -1575.662172,
27 -0.0004822922595, 0.01151624710, -1.684908753
31 3.656223906, -6.265111699, 863.9199590,
32 -5.954616242, 51.56856164, -9307.725196,
33 -0.006634136987, 0.04963057393, -7.875733154
38 my $q = $dbh->prepare('select * from switches natural left join
39 ( select switch,sum(bytes_in)/count(*) as
40 bytes_in,sum(bytes_out)/count(*) as bytes_out from get_datarate() group
41 by switch ) t1 where ip<>\'127.0.0.1\' and sysname like \'e%-%sw\'');
45 while (my $ref = $q->fetchrow_hashref()) {
46 if (defined($ref->{'bytes_in'})) {
48 my $traffic = 4.0 * $ref->{'bytes_in'} + $ref->{'bytes_out'}; # average and convert to bits (should be about the same in practice)
50 my $max = 20_000_000.0; # 10mbit
51 my $min = 100_000.0; # 100kbit
52 if ($traffic >= $min) {
53 $intensity = 2.0 * (log($traffic / $min) / log(10)) / (log($max / $min) / log(10));
54 $intensity = 2.0 if ($intensity > 2.0);
57 $sc{$ref->{'sysname'}} = get_color($intensity);
65 my $nx = $coeffs[0] * $x + $coeffs[1] * $y + $coeffs[2] * $z;
66 my $ny = $coeffs[3] * $x + $coeffs[4] * $y + $coeffs[5] * $z;
67 my $nz = $coeffs[6] * $x + $coeffs[7] * $y + $coeffs[8] * $z;
69 my $kx = $nx / $nz + (($cam == 2) ? 700 : 0);
70 my $ky = $ny / $nz + (($cam == 2) ? -15 : 0);
72 if ($kx >= 0 && $kx < 640 && $ky >= 0 && $ky < 476) {
73 my $col = int($kx / 213) + 1;
74 my $row = int($ky / 32) * 2 + 5;
76 my $gnf = $sc{"e$row-${col}sw"};
78 my ($ra, $ga, $ba) = $gd->rgb($gd->getPixel($x, $y));
79 my ($rb, $gb, $bb) = $gd->rgb($gnf);
83 my $r = $ra * (1.0 - $f) + $rb * $f;
84 my $g = $ga * (1.0 - $f) + $gb * $f;
85 my $b = $ba * (1.0 - $f) + $bb * $f;
87 $gd->setPixel($x, $y, $gd->colorAllocate($r, $g, $b));
90 if ($kx >= 680 && $kx < 1280 && $ky >= 0 && $ky < 476) {
91 my $col = int(($kx - 680) / 213) + 4;
92 my $row = int($ky / 32) * 2 + 5;
94 my $gnf = $sc{"e$row-${col}sw"};
96 my ($ra, $ga, $ba) = $gd->rgb($gd->getPixel($x, $y));
97 my ($rb, $gb, $bb) = $gd->rgb($gnf);
101 my $r = $ra * (1.0 - $f) + $rb * $f;
102 my $g = $ga * (1.0 - $f) + $gb * $f;
103 my $b = $ba * (1.0 - $f) + $bb * $f;
105 $gd->setPixel($x, $y, $gd->colorAllocate($r, $g, $b));
108 if ($kx >= 0 && $kx < 640 && $ky >= 510 && $ky < 1050) {
109 my $col = int($kx / 213) + 1;
110 my $row = int($ky / 32) * 2 + 5;
112 my $gnf = $sc{"e$row-${col}sw"};
114 my ($ra, $ga, $ba) = $gd->rgb($gd->getPixel($x, $y));
115 my ($rb, $gb, $bb) = $gd->rgb($gnf);
119 my $r = $ra * (1.0 - $f) + $rb * $f;
120 my $g = $ga * (1.0 - $f) + $gb * $f;
121 my $b = $ba * (1.0 - $f) + $bb * $f;
123 $gd->setPixel($x, $y, $gd->colorAllocate($r, $g, $b));
126 if ($kx >= 680 && $kx < 1280 && $ky >= 510 && $ky < 1050) {
127 my $col = int(($kx - 680) / 213) + 4;
128 my $row = int($ky / 32) * 2 + 5;
130 my $gnf = $sc{"e$row-${col}sw"};
132 my ($ra, $ga, $ba) = $gd->rgb($gd->getPixel($x, $y));
133 my ($rb, $gb, $bb) = $gd->rgb($gnf);
137 my $r = $ra * (1.0 - $f) + $rb * $f;
138 my $g = $ga * (1.0 - $f) + $gb * $f;
139 my $b = $ba * (1.0 - $f) + $bb * $f;
141 $gd->setPixel($x, $y, $gd->colorAllocate($r, $g, $b));
148 print CGI::header(-type=>'image/png', -refresh=>'10; http://nms.tg05.gathering.org/overlay.pl?cam=' . $cam);
152 my $intensity = shift;
153 my $gamma = 1.0/1.90;
154 if ($intensity > 1.0) {
155 return $gd->colorAllocate(255.0, 255.0 * ((2.0 - $intensity) ** $gamma), 0);
157 return $gd->colorAllocate(255.0 * ($intensity ** $gamma), 255, 0);