počítání času stráveného na aplikaci
- SyXcz
- Člen | 75
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
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__;
}
}
- Mikulas Dite
- Člen | 756
Hned po laděnce a formulářích je to nejlepší featura frameworku! Dejte na moje slova; panel je budoucnost.
- SyXcz
- Člen | 75
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 :)
- Mikulas Dite
- Člen | 756
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
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
- Mikulas Dite
- Člen | 756
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
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
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)
- Bernard Williams
- Člen | 207
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
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.