File:
0.04.24a/server/web/test.graph.php (
View as Code)
1: 2: ob_start();
3: /* -------------------------------------------------------------
4: This file is part of FreeNATS
5:
6: FreeNATS is (C) Copyright 2008 PurplePixie Systems
7:
8: FreeNATS is free software: you can redistribute it and/or modify
9: it under the terms of the GNU General Public License as published by
10: the Free Software Foundation, either version 3 of the License, or
11: (at your option) any later version.
12:
13: FreeNATS is distributed in the hope that it will be useful,
14: but WITHOUT ANY WARRANTY; without even the implied warranty of
15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16: GNU General Public License for more details.
17:
18: You should have received a copy of the GNU General Public License
19: along with FreeNATS. If not, see www.gnu.org/licenses
20:
21: For more information see www.purplepixie.org/freenats
22: -------------------------------------------------------------- */
23:
24: require("include.php");
25: $NATS->Start();
26:
27:
28:
29:
30: function ty($y)
31: {
32: global $height;
33: return $height-$y;
34: }
35:
36: //if (!isset($_REQUEST['testid'])) $_REQUEST['testid']="L26";
37:
38: // width height suid startx finishx
39:
40: if (isset($_REQUEST['width'])) $width=$_REQUEST['width'];
41: else $width=700;
42: if (isset($_REQUEST['height'])) $height=$_REQUEST['height'];
43: else $height=150;
44:
45: // other incoming stuff
46: if (isset($_REQUEST['draw_spike'])) $draw_spike=$_REQUEST['draw_spike'];
47: else $draw_spike=1;
48: if (isset($_REQUEST['draw_track'])) $draw_track=$_REQUEST['draw_track'];
49: else $draw_track=1;
50: if (isset($_REQUEST['draw_under'])) $draw_under=$_REQUEST['draw_under'];
51: else $draw_under=1;
52: if (isset($_REQUEST['draw_under_pass'])) $draw_under=$_REQUEST['draw_under_pass'];
53: else $draw_under_pass=0;
54:
55:
56: // start image
57: $im=@imagecreate($width,$height)
58: or die("Cannot create image");
59:
60: // setup colours
61: $col=array();
62: $col['white']=imagecolorallocate($im,255,255,255);
63: $col['black']=imagecolorallocate($im,0,0,0);
64: $col['red']=imagecolorallocate($im,250,50,50);
65: $col['lightgrey']=imagecolorallocate($im,200,200,200);
66: $col['blue']=imagecolorallocate($im,150,150,255);
67: $col['green']=imagecolorallocate($im,0,200,0);
68: $col['lightgreen']=imagecolorallocate($im,150,250,150);
69: $col['grey']=imagecolorallocate($im,150,150,150);
70: $col['orange']=imagecolorallocate($im,200,200,0);
71:
72: if (isset($_REQUEST['bgcol'])) $c_bg=$col[$_REQUEST['bgcol']];
73: else $c_bg=$col['white'];
74:
75: if (isset($_REQUEST['txtcol'])) $c_txt=$col[$_REQUEST['txtcol']];
76: else $c_txt=$col['black'];
77:
78: if (isset($_REQUEST['axescol'])) $c_axes=$col[$_REQUEST['axescol']];
79: else $c_axes=$col['lightgrey'];
80:
81: if (isset($_REQUEST['trackcol'])) $c_track=$col[$_REQUEST['trackcol']];
82: else $c_track=$col['blue'];
83:
84: // fill background
85: imagefill($im,1,1,$c_bg);
86:
87: function ierror($t)
88: {
89: global $im,$width,$height,$col;
90: header("Content-type: image/png");
91: imagestring($im,2,($width/2)-20,$height/2,"ERROR: ".$t,$col['red']);
92: imagepng($im);
93: imagedestroy($im);
94: exit();
95: }
96:
97: //ierror("Test");
98:
99: $session=$NATS_Session->Check($NATS->DB);
100:
101: if (!$session)
102: {
103: if ($NATS->Cfg->Get("site.graph.public",0)!=1)
104: {
105: ierror("Authorisation Failure");
106: exit();
107: }
108: $key=$NATS->Cfg->Get("site.graph.key","");
109: if (isset($_REQUEST['graphkey'])) $userkey=$_REQUEST['graphkey'];
110: else $userkey="";
111:
112: if ( ($key!="") && ($key!=$userkey) )
113: {
114: ierror("Graph Key Failure");
115: exit();
116: }
117: }
118:
119: /* // old method
120: if ( $NATS->Cfg->Get("site.graph.public",0)!=1 ) // private so must authenticate
121: {
122: if (!$session)
123: {
124: ierror("Authorisation Failure");
125: exit();
126: }
127: if ($NATS_Session->userlevel<1) ierror("User Disabled");
128: }
129: else // public so use site.graph.key if set
130: {
131: $key=$NATS->Cfg->Get("site.graph.key","");
132: if ( ($key!="") && ( (!isset($_REQUEST['graphkey'])) || ($_REQUEST['graphkey']!=$key) ) )
133: { // NO session AND there IS a key AND ( either graphkey is not provided or doesn't match )
134: ierror("Graph Key Failure");
135: exit();
136: }
137: }
138: */
139:
140: if (!isset($_REQUEST['nodeid'])) $nodeid="";
141: else $nodeid=$_REQUEST['nodeid'];
142:
143: if (!isset($_REQUEST['testid'])) ierror("No test ID");
144:
145: $day=date("d");
146: $month=date("m");
147: $year=date("Y");
148:
149: if (isset($_REQUEST['startx'])) $startx=$_REQUEST['startx'];
150: else
151: { // 0:00 today HMS mo da yr
152: $startx=mktime(0,0,0,$month,$day,$year);
153: //$startx=1203451396;
154: }
155:
156: if (isset($_REQUEST['finishx'])) $finishx=$_REQUEST['finishx'];
157: else $finishx=mktime(23,59,59,$month,$day,$year);
158:
159: if ($startx<=0) $startx=time()+$startx;
160: if ($finishx<=0) $finishx=time()+$finishx;
161:
162: //$finishx=1203454996;
163: $periodx=$finishx-$startx;
164: $startt=date("H:i:s d/m/y",$startx);
165: $finisht=date("H:i:s d/m/y",$finishx);
166:
167:
168: // titles and stuff
169: imagestring($im,2,2,2,$startt,$c_txt);
170: // -90 for size 1
171: imagestring($im,2,$width-108,2,$finisht,$c_txt);
172:
173: if (isset($_REQUEST['title'])) $title=$_REQUEST['title'];
174: else $title=$nodeid;
175: $len=strlen($title)*4;
176: imagestring($im,4,($width/2)-$len,2,$title,$c_txt);
177:
178: // offsets and lengths
179: $xoff=50+1;
180: $xlen=$width-$xoff-5;
181:
182: $yoff=1;
183: $ylen=$height-$yoff-20;
184:
185:
186: // v-axes
187: imageline($im,50,ty(1),50,ty($height-20),$c_axes);
188: imageline($im,$width-5,ty(1),$width-5,ty($height-20),$c_axes);
189: // y-axes
190: imageline($im,50,ty(1),$width-5,ty(1),$c_axes);
191: imageline($im,$width-5,ty($height-20),50,ty($height-20),$c_axes);
192: //ierror("hello");
193:
194:
195: // range data
196:
197: // Lowest
198:
199: if (isset($_REQUEST['rangemin'])) $dlow=$_REQUEST['rangemin'];
200: else
201: {
202: $dlow=0;
203: /*
204: $q="SELECT testvalue FROM fnrecord WHERE testid=\"".ss($_REQUEST['testid'])."\"";
205: $q.=" AND recordx>=".ss($startx)." AND recordx<=".ss($finishx)." ";
206: $q.="ORDER BY testvalue ASC LIMIT 0,1"; // lowest
207: $r=$NATS->DB->Query($q);
208: //ierror($q);
209: if (!$row=$NATS->DB->Fetch_Array($r)) ierror("No data for test");
210: $lowest=$row['testvalue'];
211: $dlow=$lowest;
212: if ($dlow>0) $dlow=0;
213: $NATS->DB->Free($r);
214: */
215: }
216:
217:
218: // Highest
219:
220: if (isset($_REQUEST['rangemax'])) $dhigh=$_REQUEST['rangemax'];
221: else
222: {
223: $q="SELECT testvalue FROM fnrecord WHERE testid=\"".ss($_REQUEST['testid'])."\"";
224: $q.=" AND recordx>=".ss($startx)." AND recordx<=".ss($finishx)." ";
225: $q.= "ORDER BY testvalue DESC LIMIT 0,1"; //highest
226:
227: $r=$NATS->DB->Query($q);
228: $row=$NATS->DB->Fetch_Array($r);
229: $highest=$row['testvalue'];
230: $dhigh=$highest;
231: $NATS->DB->Free($r);
232: if (isset($_REQUEST['rangemaxmin']))
233: {
234: if ($dhigh<$_REQUEST['rangemaxmin']) $dhigh=$_REQUEST['rangemaxmin'];
235: }
236: }
237:
238: $drange=$dhigh-$dlow;
239:
240: // calculate scales
241: $xscale=$xlen/$periodx;
242: if ($drange>0) $yscale=$ylen/$drange;
243: else $yscale=1; // doesn't display but no change!
244:
245: function posx($time) // timex
246: {
247: global $xscale,$startx,$xoff;
248: $drawx=$xscale*($time-$startx);
249: $screenx=$drawx+$xoff;
250: return $screenx;
251: }
252:
253: function posy($value)
254: {
255: global $yscale,$dlow,$yoff,$dhigh;
256: if ($value>$dhigh) $value=$dhigh;
257: $drawy=$yscale*($value-$dlow);
258: $screeny=$drawy+$yoff;
259: return $screeny;
260: }
261:
262:
263:
264: // show axes scales
265: imagestring($im,1,2,ty(10),$dlow,$c_txt);
266: imagestring($im,1,2,ty($height-18),$dhigh,$c_txt);
267:
268:
269: if (isset($_REQUEST['units']))
270: {
271: if (strpos($_REQUEST['units'],"/")===false)
272: imagestring($im,1,2,ty($height-28),$_REQUEST['units'],$c_txt);
273:
274:
275: else
276: {
277: $unit_array=explode("/",$_REQUEST['units']);
278: $a=0;
279: foreach($unit_array as $unit_string)
280: {
281: imagestring($im,1,2,ty($height-28-($a*8)),$unit_string,$c_txt);
282: $a++;
283: }
284: }
285: }
286:
287:
288: // get data and draw
289: $q="SELECT testvalue,alertlevel,recordx FROM fnrecord WHERE testid=\"".ss($_REQUEST['testid'])."\" ";
290: $q.="AND recordx>=".ss($startx)." AND recordx<=".ss($finishx)." ORDER BY recordx ASC";
291: //$q.="LIMIT 0,100";
292: $r=$NATS->DB->Query($q);
293: $lastx=0;
294: $lasty=0;
295:
296: $startval=0;
297: $finishval=0;
298:
299: while ($row=mysql_fetch_array($r))
300: {
301: $x=posx($row['recordx']);
302: //$y=posy($row['testvalue']);
303: $val=$row['testvalue'];
304: if ($val<0) $y=posy(0);
305: else $y=posy($val);
306:
307: if ($row['alertlevel']==-1) $c=$col['grey'];
308: else if ($row['alertlevel']==0) $c=$col['lightgreen'];
309: else if ($row['alertlevel']==1) $c=$col['orange'];
310: else if ($row['alertlevel']==2) $c=$col['red'];
311: else $c=$col['black'];
312:
313: // up lines
314: if ($draw_spike==1) imageline($im,$x,ty(0),$x,ty($y),$c);
315:
316:
317:
318: if ($lastx!=0)
319: {
320:
321: // join-the-dots
322: if ($draw_track==1) imageline($im,$lastx,ty($lasty),$x,ty($y),$c_track);
323:
324: // fill -- DOES NOT WORK
325: //if (($draw_fill==1)&&($draw_spike==1)&&($draw_track==1))
326: //imagefill($im,$x-1,ty(1),$c);
327:
328: // bottom line
329: if ($draw_under==1)
330: {
331: if (($row['alertlevel']>0)||
332: (($row['alertlevel']==0)&&($draw_under_pass==1)) )
333: {
334: imageline($im,$lastx,ty(1),$x,ty(1),$c);
335: imageline($im,$lastx,ty(2),$x,ty(2),$c);
336: }
337: }
338: }
339:
340: //imageellipse($im,$x,ty($y),1,1,$c_red);
341:
342: $lastx=$x;
343: $lasty=$y;
344:
345: }
346: mysql_free_result($r);
347:
348:
349:
350: // output image
351: header("Content-type: image/png");
352: imagepng($im);
353: imagedestroy($im);
354: exit(); // just in case
355:
356: ?>
357: