počítání času stráveného na aplikaci

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

nechtěl jsem to dávat do doplňků, ale zveřejnim to tady, třeba se to někomu bude hodit

udělal jsem si malou blbůstku, která mi počítá čas strávený na tvoření aplikace, kolikrát by se člověk divil kolik na tom stráví času :)

počítá s jednoduchou tabulkou ‚prace‘ a dvouma sloupcema ‚celkem‘ ⇒ INT, ‚naposledy‘ ⇒ INT, vložte do ní jeden řádek (třeba ‚celkem‘ = 1, ‚naposledy‘ = 1)

script mám v bootstrapu:

<?php
$sel = dibi::query("SELECT * FROM `prace` LIMIT 0, 1");
$fetch = $sel->fetch();
if((time()-1800) < $fetch['naposledy']) {
    dibi::query("UPDATE `prace` SET `celkem` = `celkem` + ".time()." - `naposledy`");
}
$cas = 'na tomhle webu pracuju '.number_format(($fetch['celkem']/3600),2).' hodin';
dibi::query("UPDATE `prace` SET `naposledy` = ".time());
Debug::fireLog($cas);
?>

vypisuje se mi to ve firebugu v konzoli… původně jsem chtěl aby se mi to ukazovalo v DebugBaru, ale nějak jsem nepřišel na to jak to udělat… třeba aby se v jeho liště zobrazilo jen např. ‚26.6 hod‘, nj ale zkoušel jsem různý způsoby jako consoleDump (neukáže nic, ani chybu), apod… a nějak mi to nejede :)

PS: kdyby se někomu povedlo to hodit do DebugBaru, zlobit se nebudu :)

Editoval SyXcz (3. 5. 2010 14:07)

Mikulas Dite
Člen | 756
+
0
-

Blbůstka, ale hezká : ). Do debug baru to hodíš naprosto triviálně, stačí vytvořit třídu s interface IDebugPanel, jednoduchou ukázku najdeš třeba na https://github.com/…odoPanel.php#L9, ale i to je moc složitý. Vlastně ti stačí tohle:

class FoobarPanel extends Object implements IDebugPanel
{
	/**
	* Renders HTML code for custom tab.
	* @return void
	*/
	function getTab()
	{
		return '<img src="' . /* URI FANCY ICON HERE */ '">' .
		'Foobar (' . $this->getTime() . ')';
	}



	/**
	* Renders HTML code for custom panel.
	* @return void
	*/
	function getPanel()
	{
		return NULL;
	}



	/**
	* Returns panel ID.
	* @return string
	*/
	function getId()
	{
		return __CLASS__;
	}
}
Lopata
Člen | 139
+
0
-

Mikulas Dite napsal(a): …

Začínáš být docela závislý DebugBarman Gur(u|mán), co…? :-D

Mikulas Dite
Člen | 756
+
0
-

Hned po laděnce a formulářích je to nejlepší featura frameworku! Dejte na moje slova; panel je budoucnost.

jasir
Člen | 746
+
0
-

Jojo, panely sou dobrý… :)

SyXcz
Člen | 75
+
0
-

díky za pomoc…

pokud někdo používá, uvedu finálku (kdo ví třeba budou úpravy a třeba časem bude vyskakovací s více možnostma) :)

timerPanel.php v adresáři libs

<?php
class timerPanel extends Object implements IDebugPanel
{
        function getTab()
        {
            $sel = dibi::query("SELECT * FROM `prace` LIMIT 0, 1");
            $fetch = $sel->fetch();
            if((time()-1800) < $fetch['naposledy']) {
                dibi::query("UPDATE `prace` SET `celkem` = `celkem` + ".time()." - `naposledy`");
            }
            dibi::query("UPDATE `prace` SET `naposledy` = ".time());
            $hod = floor($fetch['celkem'] / 3600);
            $min = floor(($fetch['celkem'] % 3600) / 60);
            $sec = ($fetch['celkem'] % 3600) % 60;

            return '.: Timer :: '.$hod.':'.$min.':'.$sec.' :.';
        }

        function getPanel()
        {
                return NULL;
        }

        function getId()
        {
                return __CLASS__;
        }
}
?>

použití v bootstrap.php

<?php
$timer = new timerPanel();
Debug::addPanel($timer);
?>

databáze :: tabulka ‚prace‘, sloupce ‚celkem‘ ⇒ INT, ‚naposledy‘ ⇒ INT; po vytvoření vložte jeden řádek třeba s jedničkama :)

RDPanek
Člen | 189
+
0
-

Ahoj, bohužel mi to nefunguje. místo lištičky mám:
Fatal error: Exception thrown without a stack frame unkown on line 0

Co stím? Díky :-)

Mikulas Dite
Člen | 756
+
0
-

Zavolej si někde fci getPanel a opmot ti to tu chybu vypíše. Asi to bude špatným připojením k db nebo neexistující tabulce/sloupci.

RDPanek
Člen | 189
+
0
-

Zda-li volám fn správně:

$timer = new TimerPanel();
Debug::barDump($timer->getPanel()); // NULL
RDPanek
Člen | 189
+
0
-

Přihlášení k DB je cajk – abych mohl fičuru používat, využil jsem:

<?php
$sel = dibi::query("SELECT * FROM `prace` LIMIT 0, 1");
$fetch = $sel->fetch();
if((time()-1800) < $fetch['naposledy']) {
    dibi::query("UPDATE `prace` SET `celkem` = `celkem` + ".time()." - `naposledy`");
}
$cas = 'na tomhle webu pracuju '.number_format(($fetch['celkem']/3600),2).' hodin';
dibi::query("UPDATE `prace` SET `naposledy` = ".time());
Debug::fireLog($cas);
?>

tohle funguje velmi dobře

RDPanek
Člen | 189
+
0
-

vyjímku mi vyhazuje:

$timer = new TimerPanel();
Debug::addPanel($timer);

když to zakomentuju, tak je vše cajk.
Mikulas Dite
Člen | 756
+
0
-

To bylo úplně jasný. Problém je najít to v tom panelu. Zavolej si ty metody postupně, resp především getTab a getPanel. Případně to můžeš bez debuggeru odkrokovat i pomocí dump+exit;

assassik
Člen | 43
+
0
-

Tady je můj upravný TimerPanel, který nepotřebuje DB, ale časy ukládá do souboru /temp/timerPanel.log.

Počítá jen čas od zahájení projektu.

<?php
class TimerPanel extends Object implements IDebugPanel
{
        function getTab()
        {
			$prodleva = 30;

			$logFile = new SplFileObject( APP_DIR . "/temp/timerPanel.log" , "a+");
			$json = (array) json_decode( $logFile->fgets() );

			$data = array(
				"start" => time(),
				"naposledy" => time(),
			);

			if( isset($json["start"]) ){
				$data["start"] = $json["start"];
			}

			if( !isset($json["naposledy"]) || time()-$prodleva > $json["naposledy"]  ){
				$logFile->ftruncate(0);
				$logFile->fwrite( json_encode($data) );
			}

			$celkem = $data["naposledy"] - $data["start"];

			$hod = floor($celkem  / 3600);
			if($hod < 10) $hod = "0".$hod;

			$min = floor(($celkem % 3600) / 60);
			if($min < 10) $min = "0".$min;

			$sec = ($celkem  % 3600) % 60;
			if($sec < 10) $sec = "0".$sec;

            return '<div style="cursor: pointer;" title="Start on '.date("d.m.Y H:i:s",$data["start"]).'"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADJElEQVR42m2TbUhTYRTH/9d7t0Knbs3EsblNN0eWa5qtLLT3FySiwjKXRaVkaUT0pTeiojBI+1AZgSM1JPpWBH0pguhDCdGbRi+Y1q5z06lzL27qtnvnenahZdiBy3l4nvP873nO+R0Kc62YYUR1BUbjhmy1RksnJcExaGd7erpfchxnJecfZgdTs9bJYvG8lqr9Bw9XWqqpDLkcfDQKsYiBNC0VU5NBPOi8H7vTcrsjFAqdIPFTswWSZQvkzy81NpdqcnSwD43APxEgFyXCoT8wCWVWJkqKlmDYaUe1Ze9rl8u1NS4iCIjE4rYr12/VKFRquEbHscKUj0V6LSIch1gshnliMb73s/j4pRfrVhVjwjOKbeVb20kmtXGB4u0Vlnc7dluoiUAQa0qKhJTjRt4seJFIJHgfyarr/WdsWbMS91rvxm40N5kpmmZaG29a65IlEuTrNNCoFImieH0+wcuk0sTegGMYgclp5KoyYV5mslIanaHvxJnL+rSUZKwlf6dpOhHMsqzgtVptYi8cieDtp68oNZuwr7Kinyo0r+b21TQwyiw5DLlqyNLT4PV6EQgGYevugVSthslkwszMDKLkYwedGHF7UbjYgMsXzvGUsbiEqzpUzxhylNBpVUiXpMDpHMKY2w3bwADy/D4UVFeDohkhA5vDiVEioNeqceXieZ5SanR9h46f1i8rMMBMqh8HZ7bx4TCCTx5DWrEHYBiBje5vfchaKMfRmgP9VBJNtzacvVZnLjLCuCgX2YqsOWhGwyFwXW8wf/1GDA654PEHEJqews7yTVahjSXry99t3raLKluxFPn6HKSnSvA/85M299nshI8ZPOxsi3W2W80CSDQjaqs6cqrGZFoqQKTIzIBSkYmfA4PCRZ0mG47hEYyN+wQq+3/04vTJ+vZIJFybQDklNe35zv3HSvV5BhQtMZA3yghADGGdAsfzCJLeu8Y8sLO/0HT1wmuvZ/wvyn9ESCYt5rJNh5evXkelE3hkhMi4CM9HwYWn8ebVi9izp486uEhkzjD9M86ksHUKlXbDgoyFwjh7PW7Wwf56GY3yc8b5N+4eM5F7clrrAAAAAElF
TkSuQmCC" />'.$hod.':'.$min.':'.$sec.'</div>';
        }

        function getPanel()
        {
                return NULL;
        }

        function getId()
        {
                return __CLASS__;
        }
}
?>

Editoval assassik (18. 5. 2010 19:04)

Filip Procházka
Moderator | 4668
+
0
-

Tvoje verze počítá čas od zahájení projektu :) s dovolením posílám svoji upravenou

https://gist.github.com/406112

//edit: Dobrý nápad :)

Editoval HosipLan (19. 5. 2010 11:11)

Mikulas Dite
Člen | 756
+
0
-

Nechcete to verzovat na githubu? Resp. ještě lépe na gistu?

SyXcz
Člen | 75
+
0
-

mnooo člověk tu chvilku neni a koukam že se to tu celkem popohnulo :) máte pravdu.. bude to lepší takhle přes log soubor… aspoň člověk nebude muset na každym projektu vytvářet tabulky

Bernard Williams
Člen | 207
+
0
-

Nazdárek,

všechny varianty zde uvedené počítají pouze čas od zahájení projektu nebo je i nějaká verze, která ten čas počítá „správně“? V řádech hodinách by stačilo. Počítat od zahájení projektu dost zkresluje.. zvlášť, když děláte na více projektech.

Bernard

h4kuna
Backer | 740
+
0
-

HosipLan napsal(a):
https://gist.github.com/406112

ahoj, používám tvoji verzi a maká to skvěle. Jen si myslím že ukladání do tempu, soubor *.log asi není uplně vhodné, ja jsem si to předělal na složku log když už je pro toto určená, temp mám pro to abych v něm mohl vše bezmyšlenkovitě smazat.

Autorovi myšlenky SyXcz také děkuji.