Commit 009e2908 authored by Davide Aprea's avatar Davide Aprea
Browse files

add resultpage to stress test

parent 0f4738ca
......@@ -88,9 +88,13 @@ class MetaGerSearch extends Controller
$metager->startSearch($timings);
# Versuchen die Ergebnisse der Quicktips zu laden
$quicktipResults = $quicktips->loadResults();
if (!empty($timings)) {
$timings["Loaded Quicktip Results"] = microtime(true) - $time;
if($quicktips !== null) {
$quicktipResults = $quicktips->loadResults();
if (!empty($timings)) {
$timings["Loaded Quicktip Results"] = microtime(true) - $time;
}
} else {
$quicktipResults = [];
}
$metager->waitForMainResults();
......
......@@ -10,106 +10,19 @@ use LaravelLocalization;
use Log;
use View;
class Stresstest extends Controller
class Stresstest extends MetaGerSearch
{
public function index(Metager $metager){
$this->dummySearch($metager);
public function index(Metager $metager)
{
return redirect("admin/stress/search?eingabe=test");
}
private function dummySearch(Metager $metager){
$timings = null;
$timings = ['starttime' => microtime(true)];
$time = microtime(true);
$spamEntries = [];
$spamEntry = null;
if (file_exists(config_path('spam.txt'))) {
$spamEntries = file(config_path('spam.txt'));
}
# If there is no query parameter we redirect to the startpage
$eingabe = "test";
# Mit gelieferte Formulardaten parsen und abspeichern:
$metager->insertDummyFormData();
if (!empty($timings)) {
$timings["insertDummyFormData"] = microtime(true) - $time;
}
# Suche für alle zu verwendenden Suchmaschinen als Job erstellen,
# auf Ergebnisse warten und die Ergebnisse laden
$metager->startSearch($timings);
$metager->waitForMainResults();
if (!empty($timings)) {
$timings["waitForMainResults"] = microtime(true) - $time;
}
$metager->retrieveResults();
if (!empty($timings)) {
$timings["retrieveResults"] = microtime(true) - $time;
}
# Alle Ergebnisse vor der Zusammenführung ranken:
$metager->rankAll();
if (!empty($timings)) {
$timings["rankAll"] = microtime(true) - $time;
}
# Ergebnisse der Suchmaschinen kombinieren:
$metager->prepareResults($timings);
$finished = true;
foreach ($metager->getEngines() as $engine) {
if ($engine->loaded) {
$engine->setNew(false);
$engine->markNew();
}
}
try {
Cache::put("loader_" . $metager->getSearchUid(), [
"metager" => [
"apiAuthorized" => $metager->isApiAuthorized(),
],
"adgoal" => [
"loaded" => $metager->isAdgoalLoaded(),
"adgoalHash" => $metager->getAdgoalHash(),
],
"engines" => $metager->getEngines(),
], 60 * 60);
} catch (\Exception $e) {
Log::error($e->getMessage());
}
if (!empty($timings)) {
$timings["Filled resultloader Cache"] = microtime(true) - $time;
}
# Die Ausgabe erstellen:
//$resultpage = $metager->createView([]);
if (!empty($timings)) {
$timings["createView"] = microtime(true) - $time;
}
if ($timings) {
dd($timings);
}
$registry = \Prometheus\CollectorRegistry::getDefault();
$counter = $registry->getOrRegisterCounter('metager', 'result_counter', 'counts total number of returned results', []);
$counter->incBy(sizeof($metager->getResults()));
$counter = $registry->getOrRegisterCounter('metager', 'query_counter', 'counts total number of search queries', []);
$counter->inc();
// Splitting the response return into multiple parts.
// This might speed up page view time for users with slow network
$responseArray = str_split($resultpage->render(), 1024);
foreach ($responseArray as $responsePart) {
echo($responsePart);
flush();
public function search(Request $request, MetaGer $metager, $timing = false)
{
if(empty($request->input('eingabe'))) {
return redirect("admin/stress/search?eingabe=test");
}
$requestTime = microtime(true) - $time;
\App\PrometheusExporter::Duration($requestTime, "request_time");
$metager->setDummy(true);
parent::search($request, $metager, $timing);
}
}
\ No newline at end of file
......@@ -78,6 +78,7 @@ class MetaGer
protected $redisEngineResult;
protected $redisCurrentResultList;
public $starttime;
protected $dummy = false;
public function __construct($hash = "")
{
......@@ -300,7 +301,7 @@ class MetaGer
if (empty($this->adgoalLoaded)) {
$this->adgoalLoaded = false;
}
if (!$this->apiAuthorized && !$this->adgoalLoaded) {
if (!$this->apiAuthorized && !$this->adgoalLoaded && !$this->dummy) {
if (empty($this->adgoalHash)) {
if (!empty($this->jskey)) {
$js = Redis::connection('cache')->lpop("js" . $this->jskey);
......@@ -1023,69 +1024,6 @@ class MetaGer
* Ende Suchmaschinenerstellung und Ergebniserhalt
*/
public function insertDummyFormData(){
$this->headerPrinted = false;
$this->javascript = false;
$this->jskey = '';
$this->url = 'https://metager.de/meta/meta.ger3';
$this->fullUrl = 'https://metager.de/meta/meta.ger3?eingabe=test';
$this->fokus = 'web';
$this->sumaFile = config_path() . "/stress.json";
if (!file_exists($this->sumaFile)) {
die(trans('metaGer.formdata.cantLoad'));
} else {
$this->sumaFile = json_decode(file_get_contents($this->sumaFile));
}
$this->eingabe = 'test';
$this->q = $this->eingabe;
$this->framed = false;
$this->ip = '127.0.0.1';
$this->useragent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0';
if (isset($_SERVER['HTTP_LANGUAGE'])) {
$this->language = $_SERVER['HTTP_LANGUAGE'];
} else {
$this->language = "";
}
$this->page = 1;
$this->lang = "all";
$this->agent = new Agent();
$this->mobile = $this->agent->isMobile();
$this->sprueche = 'off';
$this->newtab = 'off';
$this->theme = 'default';
$this->resultCount = '20';
if ($this->resultCount <= 0 || $this->resultCount > 200) {
$this->resultCount = 1000;
}
$this->quicktips = false;
$this->queryFilter = [];
$this->verificationId = null;
$this->verificationCount = 0;
$this->apiKey = "";
$this->out = "html";
$this->canCache = false;
$this->shouldLog = false;
$this->fokus = 'web';
$sumaNames = $this->sumaFile->foki->{$this->fokus}->sumas;
$sumas = [];
foreach ($sumaNames as $sumaName) {
$sumas[$sumaName] = $this->sumaFile->sumas->{$sumaName};
}
$this->actuallyCreateSearchEngines($this->enabledSearchengines);
}
public function parseFormData(Request $request, $auth = true)
{
# Sichert, dass der request in UTF-8 formatiert ist
......@@ -1117,9 +1055,9 @@ class MetaGer
$this->fokus = $request->input('focus', 'web');
# Suma-File
if (App::isLocale("en")) {
$this->sumaFile = config_path() . "/sumasEn.json";
$this->sumaFile = config_path() . ($this->dummy ? "/stress.json" : "/sumasEn.json");
} else {
$this->sumaFile = config_path() . "/sumas.json";
$this->sumaFile = config_path() . ($this->dummy ? "/stress.json" : "/sumas.json");
}
if (!file_exists($this->sumaFile)) {
die(trans('metaGer.formdata.cantLoad'));
......@@ -1298,8 +1236,12 @@ class MetaGer
public function createQuicktips()
{
# Die quicktips werden als job erstellt und zur Abarbeitung freigegeben
$quicktips = new \App\Models\Quicktips\Quicktips($this->q, LaravelLocalization::getCurrentLocale(), $this->getTime(), $this->sprueche);
return $quicktips;
if(!$this->dummy) {
$quicktips = new \App\Models\Quicktips\Quicktips($this->q, LaravelLocalization::getCurrentLocale(), $this->getTime(), $this->sprueche);
return $quicktips;
}else {
return null;
}
}
......@@ -2099,4 +2041,9 @@ class MetaGer
{
$this->engines = $engines;
}
public function setDummy($dummy)
{
$this->dummy = $dummy;
}
}
......@@ -193,6 +193,7 @@ Route::group(
});
Route::post('service-desk', 'ServiceDesk@webhook');
Route::get('stress', 'Stresstest@index');
Route::get('stress/search', 'Stresstest@search');
});
Route::get('settings', function () {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment