[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r15113 - gauger/web
From: |
gnunet |
Subject: |
[GNUnet-SVN] r15113 - gauger/web |
Date: |
Fri, 29 Apr 2011 05:26:29 +0200 |
Author: bartpolot
Date: 2011-04-29 05:26:29 +0200 (Fri, 29 Apr 2011)
New Revision: 15113
Modified:
gauger/web/io.php
gauger/web/run_test.sh
Log:
Added finally working, more elgant, efficient POST handler
Modified: gauger/web/io.php
===================================================================
--- gauger/web/io.php 2011-04-28 22:27:57 UTC (rev 15112)
+++ gauger/web/io.php 2011-04-29 03:26:29 UTC (rev 15113)
@@ -157,7 +157,7 @@
return 0;
}
fseek($f, -1, SEEK_CUR);
- while(($b = fread($f, 1)) != "\n") {
+ while(($b = fgetc($f)) != "\n") {
fseek($f, -2, SEEK_CUR);
if(ftell($f) == 0) return 0;
}
@@ -170,6 +170,17 @@
return line_beginning($f);
}
+function fpeek($f) {
+ line_beginning($f);
+ $b = fgets($f, 512);
+ previous_line($f);
+ return $b;
+}
+
+function get_line($f) {
+ return explode(' ', fpeek($f));
+}
+
function check_permissions($path, $type = 'file') {
if(file_exists($path)) {
$f = 'is_'.$type;
@@ -192,46 +203,35 @@
}
function find_position($f, $size, $rev) {
- $pos = $gap = $size/2;
- $pos2 = 0;
+ $pos = $gap = (int)($size/2);
+ $lastpos = 0;
fseek($f, $pos, SEEK_SET);
- line_beginning($f);
-// echo "Size: $size\n";
- while ($gap > 0) { // max log2(size) steps
-// echo "GAP: $gap POS: " . ftell($f) . "\n";
- $gap = $gap > 1 ? (int)(($gap+1)/2) : 0;
- $lastpos = $pos;
-
+ while ($gap > 0.5) { // max log2(size) steps
+ $gap /= 2;
$pos = ftell($f);
- $buffer = fgets($f, 512);
- $l = explode(' ', $buffer);
+ $l = get_line($f);
- $pos2 = ftell($f);
- $buffer2 = fgets($f, 512);
- $l2 = explode(' ', $buffer2);
-
- if((int)$l[0] > (int)$rev) {
-// echo "rew\n";
- if($pos == 0) {
- $pos2 = $pos;
- break;
+ if((int)$rev < (int)$l[0]) {
+ if(ftell($f) == 0) {
+ return 0;
}
- fseek($f, max($pos - $gap, 0), SEEK_SET);
- line_beginning($f);
- } else if((int)$l2[0] < (int)$rev && $pos2 < $size) {
-// echo "fwd\n";
- fseek($f, min($pos + $gap, $size), SEEK_SET);
- fgets($f, 512); //skip half-line
+ fseek($f, $pos - $gap, SEEK_SET);
+ } else if((int)$rev > (int)$l[0]) {
+ fgets($f, 512);
if(ftell($f) == $size) {
- previous_line($f);
+ return $size;
}
+ $l = get_line($f);
+ if((int)$rev <= (int)$l[0]) {
+ break;
+ }
+ fseek($f, min($pos + $gap, $size-1), SEEK_SET);
} else {
-// echo "ok $buffer | $buffer2\n";
break;
}
}
- return $pos2;
+ return ftell($f);
}
function add_data_to_file($filename, $rev, $data) {
@@ -254,33 +254,28 @@
$f = @fopen("$filename", 'r+');
if ($f === false) return false;
$size = filesize($filename);
- $sum = $sum2 = $c = 0;
fseek($f, $pos, SEEK_SET);
- $r = explode(' ', fgets($f, 512));
- while($r[0] == $rev) {
+ $r = get_line($f);
+ while($r[0] == $rev && ftell($f) != 0) {
previous_line($f);
- previous_line($f);
- if (ftell($f) == 0) break;
- $r = explode(' ', fgets($f, 512));
+ $r = get_line($f);
}
+ if($r[0] != $rev) {
+ fgets($f, 512);
+ }
$vals = array();
- $r = explode(' ', fgets($f, 512));
- if($r[0] != $rev) { // corner case: lines 1 to n are $rev but line 0 is not
- $r = explode(' ', fgets($f, 512));
- }
- while($r[0] == $rev && ftell($f) != $size) {
+ $r = get_line($f);
+ while($r[0] == $rev) {
$vals[] = $r[1];
- $c++;
- $r = explode(' ', fgets($f, 512));
+ fgets($f, 512);
+ if(ftell($f) == $size) break;
+ $r = get_line($f);
}
- $avg = 0;
- foreach($vals as $val) {
- $avg += $val;
- }
- $avg /= $c;
+ $c = count($vals);
+ $avg = array_sum($vals) / $c;
$stddev = 0;
foreach($vals as $val) {
- $stddev += ($avg - $val) * ($avg - $val);
+ $stddev += pow($avg - $val, 2);
}
$stddev = sqrt($stddev/$c);
return array($avg, $stddev);
@@ -289,10 +284,22 @@
function write_data_to_summary($filename, $rev, $data) {
$f = @fopen("$filename.dat", 'r+');
if ($f === false) return false;
- $size = filesize($filename);
+ $size = filesize("$filename.dat");
$pos = find_position($f, $size, $rev);
fseek($f, $pos, SEEK_SET);
- $r = explode(' ', fgets());
+ $r = get_line($f);
+ if($r[0] == $rev) {
+ fgets($f, 512);
+ $rest = ftell($f) < $size ? fread($f, $size - ftell($f)) : "";
+ } else if($r[0] > $rev) {
+ $rest = $pos < $size ? fread($f, $size - $pos) : "";
+ } else {
+ $rest = "";
+ }
+ fseek($f, $pos, SEEK_SET);
+ fwrite($f, "$rev " . $data[0] . ' ' . $data[1] . "\n");
+ fwrite($f, $rest);
+ ftruncate($f, ftell($f));
fclose($f);
return true;
}
@@ -314,10 +321,10 @@
}
$data = recalculate_data($datadir, $rev, $pos);
print_r($data);
- //$res = write_data_to_summary($datadir,$rev, $data);
-// if ($res === false) {
-// header('HTTP/1.1 500 Internal Server Error');
-// die("cannot add data to $datadir.dat");
-// }
- die("OK ($pos)");
+ $res = write_data_to_summary($datadir, $rev, $data);
+ if ($res === false) {
+ header('HTTP/1.1 500 Internal Server Error');
+ die("cannot add data to $datadir.dat");
+ }
+ die("OK");
}
Modified: gauger/web/run_test.sh
===================================================================
--- gauger/web/run_test.sh 2011-04-28 22:27:57 UTC (rev 15112)
+++ gauger/web/run_test.sh 2011-04-29 03:26:29 UTC (rev 15113)
@@ -13,7 +13,13 @@
rm -f *~ 2>&1 > /dev/null;
-for i in test_data*; do
+if [ -n "$1" ]; then
+ DEST="test_data$1"
+else
+ DEST="test_data*"
+fi
+
+for i in $DEST; do
N=${i##test_data}
echo -n "Starting test $N... ";
if [ ! -f test_result$N ]; then
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r15113 - gauger/web,
gnunet <=