File: 0.00.0a/web/test.graph.php (View as Code)

1: 2: ob_start(); 3: require("include.php"); 4: $NATS->Start(); 5: if (!$NATS_Session->Check($NATS->DB)) 6: { 7: header("Location: ./?login_msg=Invalid+Or+Expired+Session"); 8: exit(); 9: } 10: if ($NATS_Session->userlevel<1) UL_Error("View Test History"); 11: 12: 13: function ty($y) 14: { 15: global $height; 16: return $height-$y; 17: } 18: 19: 20: // width height suid startx finishx 21: 22: if (isset($_REQUEST['width'])) $width=$_REQUEST['width']; 23: else $width=600; 24: if (isset($_REQUEST['height'])) $width=$_REQUEST['height']; 25: else $height=200; 26: // start image 27: $im=@imagecreate($width,$height) 28: or die("Cannot create image"); 29: 30: function ierror($t) 31: { 32: global $im,$width,$height,$c_red; 33: header("Content-type: image/png"); 34: imagestring($im,2,($width/2)-20,$height/2,"ERROR: ".$t,$c_red); 35: imagepng($im); 36: imagedestroy($im); 37: exit(); 38: } 39: 40: 41: if (!isset($_REQUEST['nodeid'])) ierror("No node ID"); 42: else $nodeid=$_REQUEST['nodeid']; 43: 44: $day=date("d"); 45: $month=date("m"); 46: $year=date("Y"); 47: 48: if (isset($_REQUEST['startx'])) $startx=$_REQUEST['startx']; 49: else 50: { // 0:00 today HMS mo da yr 51: $startx=mktime(0,0,0,$month,$day,$year); 52: //$startx=1203451396; 53: } 54: 55: if (isset($_REQUEST['finishx'])) $finishx=$_REQUEST['finishx']; 56: else $finishx=mktime(23,59,59,$month,$day,$year); 57: //$finishx=1203454996; 58: $periodx=$finishx-$startx; 59: $startt=date("H:i:s d/m/y",$startx); 60: $finisht=date("H:i:s d/m/y",$finishx); 61: 62: 63: 64: // setup colours 65: $c_white=imagecolorallocate($im,255,255,255); 66: $c_black=imagecolorallocate($im,0,0,0); 67: $c_red=imagecolorallocate($im,250,50,50); 68: $c_axes=imagecolorallocate($im,200,200,200); 69: $c_blue=imagecolorallocate($im,50,50,255); 70: $c_green=imagecolorallocate($im,0,200,0); 71: $c_orange=imagecolorallocate($im,200,200,0); 72: 73: $c_bg=$c_white; 74: $c_txt=$c_black; 75: 76: // fill background 77: imagefill($im,1,1,$c_bg); 78: 79: // titles and stuff 80: imagestring($im,1,2,2,$startt,$c_txt); 81: imagestring($im,1,$width-90,2,$finisht,$c_txt); 82: imagestring($im,2,($width/2)-30,0,$nodeid,$c_txt); 83: 84: // v-axes 85: imageline($im,50,ty(1),50,ty($height-20),$c_axes); 86: imageline($im,$width-5,ty(1),$width-5,ty($height-20),$c_axes); 87: // y-axes 88: imageline($im,50,ty(1),$width-5,ty(1),$c_axes); 89: imageline($im,$width-5,ty($height-20),50,ty($height-20),$c_axes); 90: $xoff=50+1; 91: $xlen=$width-$xoff-5; 92: 93: $yoff=1; 94: $ylen=$height-20; 95: 96: // range data 97: $q="SELECT testvalue FROM fnrecord WHERE testid=\"".ss($_REQUEST['testid'])."\" ORDER BY testvalue ASC LIMIT 0,1"; // lowest 98: $r=$NATS->DB->Query($q); 99: if (!$row=$NATS->DB->Fetch_Array($r)) ierror("No data for test"); 100: $lowest=$row['testvalue']; 101: $dlow=$lowest; 102: if ($dlow>0) $dlow=0; 103: $NATS->DB->Free($r); 104: 105: $q="SELECT testvalue FROM fnrecord WHERE testid=\"".ss($_REQUEST['testid'])."\" ORDER BY testvalue DESC LIMIT 0,1"; //highest 106: $r=$NATS->DB->Query($q); 107: $row=$NATS->DB->Fetch_Array($r); 108: $highest=$row['testvalue']; 109: $dhigh=$highest; 110: $NATS->DB->Free($r); 111: 112: $drange=$dhigh-$dlow; 113: 114: // calculate scales 115: $xscale=$xlen/$periodx; 116: if ($drange>0) $yscale=$ylen/$drange; 117: else $yscale=1; // doesn't display but no change! 118: 119: function posx($time) // timex 120: { 121: global $xscale,$startx,$xoff; 122: $drawx=$xscale*($time-$startx); 123: $screenx=$drawx+$xoff; 124: return $screenx; 125: } 126: 127: function posy($value) // stock value 128: { 129: global $yscale,$dlow,$yoff; 130: $drawy=$yscale*($value-$dlow); 131: $screeny=$drawy+$yoff; 132: return $screeny; 133: } 134: 135: 136: 137: // show axes scales 138: imagestring($im,1,2,ty(10),$dlow,$c_txt); 139: imagestring($im,1,2,ty($height-18),$dhigh,$c_txt); 140: 141: 142: 143: // get data and draw 144: $q="SELECT testvalue,alertlevel,recordx FROM fnrecord WHERE testid=\"".ss($_REQUEST['testid'])."\" "; 145: $q.="AND recordx>=".$startx." AND recordx<=".$finishx; 146: //$q.="LIMIT 0,100"; 147: $r=$NATS->DB->Query($q); 148: $lastx=0; 149: $lasty=0; 150: 151: $startval=0; 152: $finishval=0; 153: 154: while ($row=mysql_fetch_array($r)) 155: { 156: $x=posx($row['recordx']); 157: $y=posy($row['testvalue']); 158: 159: 160: if ($lastx!=0) 161: { 162: if ($row['alertlevel']==-1) $c=$c_black; 163: else if ($row['alertlevel']==0) $c=$c_green; 164: else if ($row['alertlevel']==1) $c=$c_orange; 165: else if ($row['alertlevel']==2) $c=$c_red; 166: else $c=$c_black; 167: imageline($im,$lastx,ty($lasty),$x,ty($y),$c); 168: } 169: 170: //imageellipse($im,$x,ty($y),1,1,$c_red); 171: 172: $lastx=$x; 173: $lasty=$y; 174: 175: } 176: mysql_free_result($r); 177: 178: 179: 180: // output image 181: header("Content-type: image/png"); 182: imagepng($im); 183: imagedestroy($im); 184: exit(); // just in case 185: 186: ?> 187: