diff options
-rw-r--r-- | phpBB/benchmark.php | 300 |
1 files changed, 300 insertions, 0 deletions
diff --git a/phpBB/benchmark.php b/phpBB/benchmark.php new file mode 100644 index 0000000000..674b31d642 --- /dev/null +++ b/phpBB/benchmark.php @@ -0,0 +1,300 @@ +<? +include('extension.inc'); +include('config.'.$phpEx); +include('includes/constants.'.$phpEx); +include('functions/functions.'.$phpEx); +include('includes/db.'.$phpEx); + +srand ((double) microtime() * 1000000); +set_time_limit(20*60); + +// The script expects the ID's in the tables to sequential (1,2,3,4,5), +// so no holes please (1,4,5,8)... +$nr_of_users = nrof(USERS_TABLE); +$nr_of_cats = nrof(CATEGORIES_TABLE); +$nr_of_forums = nrof(FORUMS_TABLE); +$nr_of_posts = nrof(POSTS_TABLE); +$nr_of_topics = nrof(TOPICS_TABLE); // create_topic() will keep this up to date + +$u = $users; + +$starttime = microtime(); + +while($users > 0){ + + $name = "testuser_" . ($nr_of_users+10); + createuser($name); + $users--; +} +if ($forums > 0){ + create_forums($forums); +} +if ($posts > 0){ + filldb($posts); +} + +$endtime = microtime(); + +if ($submit="" || !isset($submit)){ + ?> +Hello, welcome to this little phpBB Benchmarking script :)<p> + +At the moment there are:<br> +<table> +<tr><td align="right"><?=$nr_of_users?></td><td>Users</td></tr> +<tr><td align="right"><?=$nr_of_topics?></td><td>Topics</td></tr> +<tr><td align="right"><?=$nr_of_forums?></td><td>Forums</td></tr> +<tr><td align="right"><?=$nr_of_posts?></td><td>Posts</td></tr> +</table> +<p> +What do you want to create?<p> + +<form method="get" action="<?=$PHP_SELF?>"> +<input type="text" name="users" size="3"> Users<br> +<input type="text" name="forums" size="3"> Forums/categories<br> +<input type="text" name="posts" size="3"> Posts/topics (optional: post size in <input type="text" name="size" size="3"> bytes)<br> +<input type="submit" name="submit"> +</form> + + <? +} else { + + + list ($starttime_msec,$starttime_sec) = explode(" ",$starttime); + list ($endtime_msec,$endtime_sec) = explode(" ",$endtime); + $timetaken_sec = ($endtime_sec+$endtime_msec) - ($starttime_sec+$starttime_msec); + print "<B>TIME TAKEN : ".$timetaken_sec."s</B><BR>\n"; + + $starttime = microtime(); + + $result = $db->sql_query("SELECT * FROM users LIMIT 5,200"); + $rowresult = $db->sql_fetchrowset($result); + + $endtime = microtime(); + + for($i=0;$i<count($rowresult);$i++){ + print $rowresult[$i]['user_id']." : ".$rowresult[$i]['username']."<BR>"; + } + +// while($row = $db->sql_fetchrow()){ +// print $row['user_id']."<BR>"; +// } + + list ($starttime_msec,$starttime_sec) = explode(" ",$starttime); + list ($endtime_msec,$endtime_sec) = explode(" ",$endtime); + $timetaken_sec = ($endtime_sec+$endtime_msec) - ($starttime_sec+$starttime_msec); + print "<B>TIME TAKEN : ".$timetaken_sec."s</B><BR>\n"; + + print "<p>\n<a href=\"$PHP_SELF\">Back to the overview page</a>\n"; +} + +function filldb($newposts){ + global $nr_of_topics; + global $nr_of_forums; + global $nr_of_users; + for($i=0 ; $i<=$newposts; $i++){ + $userid = rand(1,$nr_of_users); + $forum = rand(1,$nr_of_forums); + if (rand(0,20) < 1 || $nr_of_topics == 0){ + // create a new topic 1 in 20 times (or when there are none); + $topic = create_topic($userid, "This is test topic nr. $i", $forum); + } else { + // Otherwise create a reply(posting) somewhere. + $topic = rand(1,$nr_of_topics); + } + create_posting($userid, $topic, $forum); + } +} + + +function create_topic($userid, $subject, $forum){ + global $db; + global $nr_of_topics; + $userdata = get_userdata($username, $db); + $time = time(); + $sql = "INSERT INTO ".TOPICS_TABLE." (topic_title, topic_poster, forum_id, topic_time, topic_notify) VALUES ('$subject', '$userid', '$forum', '$time', 0)"; + if (!$result = $db->sql_query($sql)) { + print "Couldn't create Topic $subject in DB!<br>\n"; + print "This is the sql statement:<br>\n$sql\n<br>\n"; + die; + } else { + print "<br>Topic '$subject' created!<br>\n"; + $nr_of_topics++; + flush(); + return mysql_insert_id($db->db_connect_id); + } +} + +function create_posting($userid, $topic_id, $forum){ + global $db; + $message = generatepost(650); + $time = time(); + $poster_ip = "234234232"; + + $sql = "INSERT INTO ".POSTS_TABLE." (forum_id, topic_id, poster_id, post_time, poster_ip) VALUES ('$forum', '$topic_id', '$userid', '$time', '$poster_ip')"; + if (!$result = $db->sql_query($sql)) { + print "Couldn't create post in $forum!<br>\n"; + print "This is the sql statement:<br>\n$sql\n<br>\n"; + die; + } else { + + $post_id = mysql_insert_id($db->db_connect_id); + $sql = "INSERT INTO ".POSTS_TEXT_TABLE." (post_id, post_text) VALUES ('$post_id', '$message')"; + if (!$result = $db->sql_query($sql)) { + print "Couldn't create post text in $forum!<br>\n"; + print "This is the sql statement:<br>\n$sql\n<br>\n"; + die; + } + print "$forum "; + return 0; + } +} + +function create_forums($totalforums){ + global $db; + global $nr_of_cats; + $j=0; + for($i=0 ; $i<$totalforums; $i++){ + if (rand(0,5) <= 2 || $nr_of_cats == 0){ + // create a new cat at random times or when there are no cats yet. + $j++; + $catid = create_cat("Category $j"); + } else { + // Otherwise create a forum in one of the cats. + $catid = rand(0,$nr_of_cats); + } + $forum = "Test forum number $i"; + create_forum($catid, $forum); + } +} + +function create_cat($category){ + global $db; + global $nr_of_cats; + // At the moment cat_order is always one, oh well.. + echo $sql = "INSERT INTO ".CATEGORIES_TABLE." (cat_title, cat_order) VALUES ('$category', '1')"; + if (!$result = $db->sql_query($sql)) { + print "Couldn't create category \"$category\"!<br>\n"; + die; + } else { + print "Category \"$category\" created!<br>\n"; + $nr_of_cats++; + return mysql_insert_id($db->db_connect_id); + } +} + +function create_forum($catid, $forum){ + global $db; + global $nr_of_forums; + + $sql = "INSERT INTO ".FORUMS_TABLE." (forum_name, forum_desc, forum_access, cat_id, forum_type) VALUES ('$forum', 'This is a forum created for the benchmark', '2', '$catid', '0')"; + if (!$result = $db->sql_query($sql)) { + print "Couldn't create forum \"$forum\"!<br>\n"; + die; + } else { + print "Forum \"$forum\" created!<br>\n"; + $nr_of_forums++; + $forum_id = mysql_insert_id($db->db_connect_id); + // Sorry, no error checking. We just assume that if the forum can be + // created the moderator can be assigned too :) + $sql = "INSERT INTO forum_mods (forum_id, user_id) VALUES ('$forum_id', '1')"; + $result = $db->sql_query($sql); + return $forum_id; + } +} + + +function generatepost($size=850){ + // Returns a string with a length between $size and $size*0.2 + $size = rand(0.2*$size, $size); + $text = "Step 1: Untar the soure into the directory phpBB will run from. Seeing as you +are reading this file you have probably gotten that far. (Or if you are on a +different machine then your webserver FTP the resulting phpBB dir over to where +it will run from on the server. ie /www/yourdomain.com/phpBB) + +Step 2: Edit config.php and change the following values: + +The url fields my work for you if you're running phpBB from a domain +like this: http://www.phpbb.com/phpBB + +However if you access phpBB like this: http://www.domain.com/~you/phpBB you +will have to change these values. + +Also, config.php MUST be writeable by the webserver or the install will fail. +To set this on UNIX systems you can use chmod +ie: chmod 777 config.php (after the install if finsished set it back to 755 +via chmod 755 config.php so it can't be written by anyone again.)"; + $textsize = strlen($text); + $currentsize = 0; + // Add whole $text multiple times + while($currentsize < $size && $size-$currentsize <= $textsize){ + $message .= $text; + $currentsize += $textsize; + } + // Add the remainder number of chars and return it. + $message .= substr($text, 0, $size-$currentsize); + + // WARNING!! THIS IS NOT GOOD, THESE FUNCTIONS WILL ADD CHARACTERS!!! + return (nl2br(addslashes($message))); +} + + +function nrof($table){ + global $db; + $sql = "SELECT count(*) AS counted FROM $table"; + $result = $db->sql_query($sql); + $topics = $db->sql_fetchrow($result); + return $topics[counted]; +} + + +function createuser($name){ + global $db; + global $nr_of_users; + $username = $name; + $regdate = time(); + $email = $username . "@phpbb.com"; + $icq = "29317129"; + $passwd = md5("test"); + $occ = ""; + $intrest = ""; + $from = ""; + $website = "http://www.phpBB.com/"; + $sig = "To Bla, or Not to Bla"; + $aim = ""; + $sqlviewemail = "1"; + $yim = ""; + $msnm = ""; + + $userdata = get_userdata($username, $db); + if($userdata["username"]) { + print "Username '$username' has been already used...<br>\n"; + return 1; + } + + $sql = "INSERT INTO ".USERS_TABLE." (username, user_regdate, user_email, user_icq, user_password, user_occ, user_intrest, user_from, user_website, user_sig, user_aim, user_viewemail, user_yim, user_msnm) VALUES ('$username', '$regdate', '$email', '$icq', '$passwd', '$occ', '$intrest', '$from', '$website', '$sig', '$aim', '$sqlviewemail', '$yim', '$msnm')"; + + if (!$result = $db->sql_query($sql)) { + print "Couldn't create user $username in DB!<br>\n"; + print "This is the sql statement:<br>\n$sql\n<br>\n"; + return 1; + } else { +// print "User $username created!<br>\n"; + $nr_of_users++; + // flush(); + return 0; + } +} + +function get_userdata($username, $db) { + $sql = "SELECT * FROM ".USERS_TABLE." WHERE username = '$username' AND user_level != -1"; + if(!$result = $db->sql_query($sql)) + $userdata = array("error" => "1"); + if(!$myrow = $db->sql_fetchrow($result)) + $userdata = array("error" => "1"); + + return($myrow); +} + + +?>
\ No newline at end of file |