Parcourir la source

Ubiquity update for Swoole and Raw Fortunes template (#4981)

* reintroduce template for Raw + add spe controllers for Swoole

* Update SwooleDb.php

* Update SwooleFortunes.php

* move intialization in services
jcheron il y a 6 ans
Parent
commit
24f110e44b

+ 0 - 17
frameworks/PHP/ubiquity/.ubiquity/_react.php

@@ -1,17 +0,0 @@
-#!/usr/bin/env php
-<?php
-// react.php
-
-if (! defined ( 'DS' )) {
-	define ( 'DS', DIRECTORY_SEPARATOR );
-	define ( 'ROOT', __DIR__ . \DS .'..'.\DS. 'app' . \DS );
-}
-$config=include ROOT.'config/config.php';
-$sConfig= include __DIR__.\DS.'react-config.php';
-$address=$sConfig['host'].':'.$sConfig['port'];
-$config ["siteUrl"] = 'http://'.$address;
-require ROOT . './../vendor/autoload.php';
-require ROOT.'config/services.php';
-$reactServer=new \Ubiquity\servers\react\ReactServer();
-$reactServer->init($config, __DIR__);
-$reactServer->run($address);

+ 0 - 5
frameworks/PHP/ubiquity/.ubiquity/react-config.php

@@ -1,5 +0,0 @@
-<?php
-return array(
-	"host" => "0.0.0.0",
-	"port" => 8080
-);

+ 5 - 1
frameworks/PHP/ubiquity/README.md

@@ -8,7 +8,7 @@ Ubiquity is a full-stack php framework, These tests involve:
 Tests are available with NginX server and Swoole platform.
 
 ## Test Type Implementation Source Code
-The tests are separated into 6 controllers:
+The tests are separated into 8 controllers:
 - `Json` for JSON response
   * [JSON](app/controllers/Json.php)
 - `Db` for database access with ORM
@@ -24,6 +24,10 @@ The tests are separated into 6 controllers:
   * [Raw](app/controllers/Raw.php)
 - `RawFortunes` without ORM and without template engine
   * [FORTUNES](app/controllers/RawFortunes.php)
+- `SwooleDb` for database access with ORM (Swoole)
+  * [DB](app/controllers/SwooleDb.php)
+- `SwooleFortunes` for using the internal template engine (Swoole)
+  * [FORTUNES](app/controllers/SwooleFortunes.php)
 
 ## Important Libraries
 The tests were run with:

+ 2 - 0
frameworks/PHP/ubiquity/app/config/services.php

@@ -1,2 +1,4 @@
 <?php
 \Ubiquity\cache\CacheManager::startProd($config);
+\Ubiquity\controllers\Startup::$templateEngine = new \Ubiquity\views\engine\micro\MicroTemplateEngine();
+\Ubiquity\orm\DAO::setModelsDatabases([\models\Fortune::class=>'default',\models\World::class=>'default']);

+ 3 - 5
frameworks/PHP/ubiquity/app/controllers/Db.php

@@ -1,19 +1,17 @@
 <?php
 namespace controllers;
 
-use Ubiquity\controllers\Controller;
 use Ubiquity\orm\DAO;
 use models\World;
-use Ubiquity\controllers\Startup;
-use Ubiquity\utils\http\UResponse;
 
 /**
  * Bench controller.
  */
-class Db extends Controller {
+class Db extends \Ubiquity\controllers\Controller {
 
 	public function initialize() {
-		UResponse::setContentType('application/json');
+		\header('Content-type: application/json');
+		\Ubiquity\cache\CacheManager::startProd(\Ubiquity\controllers\Startup::$config);
 		DAO::setModelDatabase(World::class);
 	}
 	

+ 5 - 6
frameworks/PHP/ubiquity/app/controllers/Fortunes.php

@@ -1,23 +1,22 @@
 <?php
 namespace controllers;
 
-use Ubiquity\controllers\Controller;
-use Ubiquity\controllers\Startup;
 use Ubiquity\orm\DAO;
-use Ubiquity\views\engine\micro\MicroTemplateEngine;
 use models\Fortune;
+use Ubiquity\controllers\Startup;
 
-class Fortunes extends Controller {
+class Fortunes extends \Ubiquity\controllers\Controller {
 
 	public function initialize() {
-		Startup::$templateEngine = new MicroTemplateEngine();
+		\Ubiquity\cache\CacheManager::startProd(Startup::$config);
+		Startup::$templateEngine = new \Ubiquity\views\engine\micro\MicroTemplateEngine();
 		DAO::setModelDatabase(Fortune::class);
 	}
 
 	public function index() {
 		$fortunes = DAO::getAll(Fortune::class, '', false);
 		$fortunes[] = (new Fortune())->setId(0)->setMessage('Additional fortune added at request time.');
-		usort($fortunes, function ($left, $right) {
+		\usort($fortunes, function ($left, $right) {
 			return $left->message <=> $right->message;
 		});
 		$this->loadView('Fortunes/index.php', [

+ 2 - 5
frameworks/PHP/ubiquity/app/controllers/Json.php

@@ -1,16 +1,13 @@
 <?php
 namespace controllers;
 
-use Ubiquity\controllers\Controller;
-use Ubiquity\utils\http\UResponse;
-
 /**
  * Json controller.
  */
-class Json extends Controller {
+class Json extends \Ubiquity\controllers\Controller {
 
 	public function initialize() {
-		UResponse::setContentType('application/json');
+		\Ubiquity\utils\http\UResponse::setContentType('application/json');
 	}
 
 	public function index() {

+ 2 - 5
frameworks/PHP/ubiquity/app/controllers/Plaintext.php

@@ -1,16 +1,13 @@
 <?php
 namespace controllers;
 
-use Ubiquity\controllers\Controller;
-use Ubiquity\utils\http\UResponse;
-
 /**
  * Plaintext controller.
  **/
-class Plaintext extends Controller{
+class Plaintext extends \Ubiquity\controllers\Controller {
 	
 	public function initialize(){
-		UResponse::setContentType('text/plain; charset=utf-8');
+		\Ubiquity\utils\http\UResponse::setContentType('text/plain; charset=utf-8');
 	}
 	public function index() {
 		echo 'Hello, World!';

+ 2 - 2
frameworks/PHP/ubiquity/app/controllers/Raw.php

@@ -2,7 +2,7 @@
 namespace controllers;
 
 /**
- * Bench controller.
+ * Raw Bench controller.
  */
 class Raw extends \Ubiquity\controllers\Controller {
 	protected $db;
@@ -30,7 +30,7 @@ class Raw extends \Ubiquity\controllers\Controller {
 		$queries = \min(\max($queries, 1), 500);
 		for ($i = 0; $i < $queries; ++ $i) {
 			$world = $this->getRandomWorld(\mt_rand(1, 10000));
-			$this->db->prepareAndExecuteUpdate("UPDATE World SET randomNumber = ? WHERE id = ?",[$world['randomNumber'] = \mt_rand(1, 10000),$world['id']]);
+			$this->db->prepareAndExecuteUpdate('UPDATE World SET randomNumber = ? WHERE id = ?',[$world['randomNumber'] = \mt_rand(1, 10000),$world['id']]);
 			$worlds[] = $world;
 		}
 		echo \json_encode($worlds);

+ 7 - 9
frameworks/PHP/ubiquity/app/controllers/RawFortunes.php

@@ -3,19 +3,17 @@ namespace controllers;
 
 class RawFortunes extends \Ubiquity\controllers\Controller {
 	
+	public function initialize() {
+		\Ubiquity\controllers\Startup::$templateEngine = new \Ubiquity\views\engine\micro\MicroTemplateEngine();
+	}
+	
 	public function index() {
 		$fortunes = \Ubiquity\db\Database::start()->fetchAll('SELECT id,message FROM Fortune',\PDO::FETCH_KEY_PAIR);
 		$fortunes[0] = 'Additional fortune added at request time.';
 		\asort($fortunes);
-		?>
-		<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>
-		<?php
-		foreach ($fortunes as $id => $fortune) :
-		?>
-		<tr><td><?=$id?></td><td><?=\htmlspecialchars($fortune, ENT_QUOTES, 'UTF-8')?></td></tr>
-		<?php
-		endforeach
-		?></table></body></html><?php
+		$this->loadView('Fortunes/raw-index.php', [
+			'fortunes' => $fortunes
+		]);
 	}
 }
 

+ 41 - 0
frameworks/PHP/ubiquity/app/controllers/SwooleDb.php

@@ -0,0 +1,41 @@
+<?php
+namespace controllers;
+
+use Ubiquity\orm\DAO;
+use models\World;
+
+/**
+ * Bench controller.
+ */
+class SwooleDb extends \Ubiquity\controllers\Controller {
+
+	public function initialize() {
+		\Ubiquity\utils\http\UResponse::setContentType('application/json');
+	}
+	
+	public function index() {
+		$world = DAO::getById(World::class, \mt_rand(1, 10000), false);
+		echo \json_encode($world->_rest);
+	}
+	
+	public function query($queries = 1) {
+		$worlds = [];
+		$queries = \min(\max($queries, 1), 500);
+		for ($i = 0; $i < $queries; ++ $i) {
+			$worlds[] = (DAO::getById(World::class, \mt_rand(1, 10000), false))->_rest;
+		}
+		echo \json_encode($worlds);
+	}
+	
+	public function update($queries = 1) {
+		$worlds = [];
+		$queries = \min(\max($queries, 1), 500);
+		for ($i = 0; $i < $queries; ++ $i) {
+			$world = DAO::getById(World::class, \mt_rand(1, 10000), false);
+			$world->randomNumber = \mt_rand(1, 10000);
+			DAO::update($world);
+			$worlds[] = $world->_rest;
+		}
+		echo \json_encode($worlds);
+	}
+}

+ 19 - 0
frameworks/PHP/ubiquity/app/controllers/SwooleFortunes.php

@@ -0,0 +1,19 @@
+<?php
+namespace controllers;
+
+use models\Fortune;
+
+class SwooleFortunes extends \Ubiquity\controllers\Controller {
+
+	public function index() {
+		$fortunes = \Ubiquity\orm\DAO::getAll(Fortune::class, '', false);
+		$fortunes[] = (new Fortune())->setId(0)->setMessage('Additional fortune added at request time.');
+		\usort($fortunes, function ($left, $right) {
+			return $left->message <=> $right->message;
+		});
+		$this->loadView('Fortunes/index.php', [
+			'fortunes' => $fortunes
+		]);
+	}
+}
+

+ 4 - 0
frameworks/PHP/ubiquity/app/views/Fortunes/raw-index.php

@@ -0,0 +1,4 @@
+<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>
+<?php foreach ($fortunes as $id=>$message) : ?>
+<tr><td><?= $id ?></td><td><?= \htmlentities($message) ?></td></tr>
+<?php endforeach ?></table></body></html>

+ 4 - 4
frameworks/PHP/ubiquity/benchmark_config.json

@@ -49,10 +49,10 @@
       "swoole": {
         "json_url": "/Json",
         "plaintext_url": "/Plaintext",
-        "db_url": "/Db",
-        "update_url": "/Db/update/",
-        "query_url": "/Db/query/",
-        "fortune_url": "/Fortunes",
+        "db_url": "/SwooleDb",
+        "update_url": "/SwooleDb/update/",
+        "query_url": "/SwooleDb/query/",
+        "fortune_url": "/SwooleFortunes",
         "port": 8080,
         "approach": "Realistic",
         "classification": "Fullstack",

+ 0 - 1
frameworks/PHP/ubiquity/index.php

@@ -5,5 +5,4 @@ define('DS', DIRECTORY_SEPARATOR);
 define('ROOT', __DIR__ . DS . 'app' . DS);
 $config = include_once ROOT . 'config/config.php';
 require_once ROOT . './../vendor/autoload.php';
-require_once ROOT . 'config/services.php';
 \Ubiquity\controllers\Startup::run($config);