Experimentální DebugPanel – RequestsPanel

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
jasir
Člen | 746
+
0
-

Vytvořil jsem experimentální panel pro DebugBar, který zobrazuje
data mezi requesty, tzn. zobrazuje všechny redirecty/forwardy v rámci aplikace.
Zatím to je ve fázi nápadu, ale dávám to sem, protože už teď mi to přijde docela užitečné.

Použití:

zaregistrovat panel – musí být v metodě startup BasePresenteru, v bootstrap.php to nebude fungovat

<?php
use \Extras\Debug\RequestsPanel;

class BasePresenter extends Presenter {
	public function startup() {
		parent:startup()
		RequestsPanel::register();
	}
}
?>

v rámci aplikace můžete do panelu dumpovat:

<?php
RequestsPanel::dump($presenter->getIdentity(), 'Identity'); //label můžete vynechat
?>

Dobré na tom je, že je pěkně vidět flow aplikace a při přesměrování neunikne
dump informace.
Defaultně se vypisují HttpRequest, PresenterRequest a PresenterResponse.

Panel si ukládá potřebná data do session.

https://github.com/…equestsPanel

Edit: 19.4.2010 – Upraven popis registrace panelu, musí proběhnout v BasePresenteru

Edit: 11.10.2010 – Změna registrace panelu, používají se namespaces

Editoval jasir (11. 10. 2010 16:01)

Honza Kuchař
Člen | 1662
+
0
-

určitě :)

despiq
Člen | 320
+
0
-

tohle je taky luxusni

Honza Kuchař
Člen | 1662
+
0
-

Do extras s tím! Vytvoř tam na to novou sekci „Panely pro ladící lištu nástrojů“ do popisku nějaký odkaz na to co to je debugbar. :)

jasir
Člen | 746
+
0
-

Rád to tam dám, teď ale vůbec není čas, snad koncem týdne. Zkoušel jste to někdo? Chodí to bez problémů?

pekelnik
Člen | 462
+
0
-

Zkoušel jsem to ale nepodařilo se mi to rozchodit… reps. v panelu se nic nozbrazovalo

Mikulas Dite
Člen | 756
+
0
-

Mě to taky nefunguje (asi je to stejný problém) – boří to foreach ($logs as ... ) v šabloně, protože logs je NULL. Session beží, takže kvůli tomu to snad nezlobí.

jasir
Člen | 746
+
0
-

Problém nastává pokud se panel registruje v bootstrapu, protože se potřebuje navěsit na onShutdown presenteru a presenter v bootstrapu ještě neexistuje. Panel se totiž potřebuje
dostat k presenterResponse (tu vyhodí Presenter::run).

Já panely registruji v BasePresenter::startup, problém se u mě neprojevil.

Bohužel k PresenterResponse se v současné verzi Nette dostat nedá, nikde se neukládá a žádný callback ho nepošle ani není volán před $presenter->run s již vytvořeným presenterem.

Jediným možným v současné chvíli řešením je tedy registrovat panel v metodě startup BasePresenteru

Editoval jasir (19. 4. 2010 16:51)

dakota
Člen | 148
+
0
-

Vyskušal som RequestPanel. Problem nastava pri použití forwardu. Ak je panel registrovaný v startupe BasePresenteru dojde pri forwarde k viacnasobnej registrácii panelu do DebugBaru (tiež sa viackrát zobrazuje).

Pridaním udalosti onResponse do životného cyklu aplikácie https://forum.nette.org/…lu-aplikacie by sa dalo registrovať panel v bootstrape (potom treba upraviť aj kod RequestPanelu).

Inak užitočný panel. Možno by sa dalo doplniť zobrazenie SQL prikazov ktoré sa vykonali pri jednotlivých requestoch a hlavne pred redirectom, ktoré dibi v DebugBare nezobrazuje.

Editoval dakota (11. 10. 2010 8:15)

jasir
Člen | 746
+
0
-

Vícenásobná registrace – fixnu to. Pro onResponse jsem plus jedničkoval… :-)

dakota
Člen | 148
+
0
-

Tiež som si všimol, že v režime PRODUCTION dochadza k zbytočnému logovaniu requestov, pričom sa hromadia. Nasledne ak sa zapne režim DEVELOPMENT dojde k vypisaniu nahromadených requestov (môže isť o veľký počet).

V produkčnom režime by bolo vhodne vypnuť logovanie requestov.

jasir
Člen | 746
+
0
-

fixnul jsem to dvojité registrování a přidal namespaces…

bojovyletoun
Člen | 667
+
0
-

v posledních verzích nette se nerozbalují šipky. (nebo je to doctype htm>?)

do bar.requests.panel.phtml přidat(2 výskyty:
<a class=„nette-toggler“
přidat atribut rel=next

OT: jak je tam preg replace callback, tak Ony se kešují?proč?kam? jak často?
trvalo dost dlouho, než jsem přišel proč na localhostu to jde dávno, a na sevru se rozbaluje jen první úroveň?

jasir
Člen | 746
+
0
-

Jestli chceš, pošli pull requests, teď na to nemám moc čas.

Jinak nemohu si pomoci, ale tvému OT jako fakt nerozumím, prostě nemluvit řečí tvého kmene.

dakota
Člen | 148
+
0
-

bojovyletoun napsal(a):

v posledních verzích nette se nerozbalují šipky. (nebo je to doctype htm>?)

Môžeš v RequestsPanel.php

$entry['dumps']['HttpRequest'] = Debug::dump($httpRequest, TRUE);
$entry['dumps']['PresenterRequest'] = Debug::dump($request, TRUE);
$entry['dumps']['PresenterResponse'] = Debug::dump($response, TRUE);

nahradiť

$entry['dumps']['HttpRequest'] = $httpRequest;
$entry['dumps']['PresenterRequest'] = $request;
$entry['dumps']['PresenterResponse'] = $response;

a v šablone prepísať na

<?php foreach ($entry['dumps'] as $key => $dump): ?>
<tr>
	<td><strong><?php if (!is_numeric($key)) echo $key;?></strong></td>
	<td><?php echo DebugHelpers::clickableDump($dump) ?></td>
</tr>
<?php endforeach ?>

DebugHelpers::clickableDump – je priamo v Nette.

Edit:

Tiež stačí doplniť ako si uviedol rel=‚next‘ na <a href=‚#‘ class=‚nette-toggler‘ rel=‚next‘>

Editoval dakota (16. 11. 2010 11:51)

jasir
Člen | 746
+
0
-

Dumpované objekty se ale pak ukládají mezi requesty do session, takže by všechny musely být serializovatelné, což nelze zaručit. Proto se ukládá textový dump, nikoliv samotný objekt.

clickableDump jsem ale neznal, (novinka?), podívám se na to.

jasir
Člen | 746
+
0
-

fixed

dakota
Člen | 148
+
0
-

jasir napsal(a):
clickableDump jsem ale neznal, (novinka?), podívám se na to.

clickableDump je nové, ale v súčasnej podobe to rozbalí dumpovaný objekt (pole) ak to obsahuje menej ako 7 prvkov

bojovyletoun
Člen | 667
+
0
-

taky jsem neznal clickable dump..

Ot=
Prostě jsem tam přidal rel=„next“,aby to chodilo.
na localhostu OK= Abbyss web server, php 5.3.3

Nahráno na php5.cz – php 5.3.3. dotbeb0+ Apache2. Tam mi nešly rozkliknout (tohle slovo nenávidím, rozkliknout se dá tak leda myš, když na ni silou kliknete) vnitřní prvky (http,present request+response), ale vnější ano. Protože vnější výpis (a jeho rel=next) byl normálně zapsanve skriptu, zatímco vnitřní byl v callbacku. Výstup z callbacku se vůbec neměnil(žádné rel=next nepřibylo). (až po změně názvu callbacku).

Už je to srouzimelné v řeči tvého kmenu?

Editoval bojovyletoun (16. 11. 2010 21:32)

jasir
Člen | 746
+
0
-

pridal jsem tam to rel=„next“ snad to chodi

stefi023
Člen | 71
+
0
-

Ahoj,

pri delsim pouzivani tohoto panelu jsem zjistil takovou neprijemnost (jinak je samo super) – zapomnel jsem to na produkcnim serveru odebrat (i kdyz s vypnutym debugovanim), ale pri jakemkoliv nacteni stranky mi to do session ulozi ca 15kB, coz je u me celkem problem, pac mam napr aplikaci kde jsou uzivatele neustale prihlaseni a stranka se jim sama refreshuje – cili za den dokaze session narust klidne i na 15 – 20MB, coz pak samotnou aplikaci dosti zdrzuje.

Je na to nejaka rada? Napr nastavit pouzivane namespace nejakou expiraci ci tak?

Diky

jasir
Člen | 746
+
0
-

No a když to na produkci nebudeš registrovat, tak to bude v pohodě ne?

stefi023
Člen | 71
+
0
-

:) hehe, takovou odpoved jsem vlastne i cekal :) proc taky mit tohle v produkcnim rezimu, ze?

jasir
Člen | 746
+
0
-

Přesně tak :) Na produkci opravdu nepatří :)