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: