Changeset 28
- Timestamp:
- Feb 13, 2008, 1:59:20 PM (17 years ago)
- Files:
-
- 1 added
- 1 deleted
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
Readme.txt
r24 r28 1 Webové statistiky 2 ================= 3 4 Je potøeba zkopírovat soubor config.sample.php jako config.php a upravit v nìm nastavení. 1 5 Ve sloce SQL jsou uloeny definice tabulek measure (struktura i ukázkové data) a tabulky data, kterou je potøeba vytvoøit pro jednotlivá mìøení. 2 Ve sloce measure_scripts je soubor traffic.php, který zajiuje získávání informací o rùzných velièinách v poèítaèi.6 Ve sloce measure_scripts je ukázkový soubor monitor.sample.php, který zajiuje získávání informací o rùzných velièinách v poèítaèi. 3 7 8 Verze 3.1 (13.2.2008) 9 10 * Upraveny skripty pro plnìní dat. 11 * Pøidán odkaz pod grafem odkazující staticky na vybraný èasový úsek. 12 * Opraveno zobrazování desetinných míst u èísel bez jednotek 13 * Upravena poloha zobrazování celkové informace Min, Avg, Max. 14 * Rùzné mení opravy 15 16 Verze 3.0 (14.12.2007) 17 18 * Pøepsán pøístup k databázi MySQL pøes tøídu mysqli 19 * Data mìøení byly pro zvýení rychlosti rozdìleny do jednotlivých tabulek avak stále je moné mít v jedné datové tabulce více mìøení. Rozdìlení dat do více tabulek také umonilo mít uloená data s rùznou pøesnosti pro jednolivé mìøení. Pùvodnì pouze INT, nyní vechny dalí èíselné typy jako TINYINT, SMALLINT, INT, BIGINT a FLOAT. 20 * Pøidáno automatické zaokrouhlení zobrazovaných hodnot a zobrazení pøedpon jednotek. 21 * Doplnìny dalí skripty pro zjiování informací o systému a plnìní databáze. 22 * Nastavení sdrueno do souboru config.php. 23 * Rùzné opravy 24 25 Verze 2.2 (30.6.2007) 26 27 * opraveno vykreslování grafu pøed celkovým zaèátkem a po celkovém konci mìøení 28 * opraveno vykreslování poslední hodnoty v grafu 29 30 Verze 2.1 (24.3.2007) 31 32 * rùzné opravy 33 34 Verze 2.0 (16.3.2007) 35 36 * dynamické zobrazování èasové osy, výbìr bìných úsekù nebo pøesného intervalu dle poèáteèního a koneèného èasu 37 * pouití TrueType fontù 38 * mìnitelné rozmìry generovaného obrázku 39 * automatická redukce naèítaných dat pro delí èasového mìøítka 40 * automatická redukce po sobì se opakujících stejných do jedné, redukce nulových a málo promìnných odmìrù 41 * v úsecích, kde se nemìøilo buï reim automatická interpolace hodnot nebo nulový údaj 42 * Záznam a zobrazení grafù minima, prùmìru a maxima 43 * zápis nových hodnot pøes webové HTTP, kontrola podle adres poèítaèù 44 * seznam mìøení uloen v tabulce 45 46 Verze 1.0 (25.11.2004) 47 48 * statické zobrazování èasové osy v rozsahu hodina, den, týden, mìsíc, rok a více rokù 49 * jednotná tabulka pro vechna mìøení, kadé mìøení jako jeden sloupec, kadou minutu nový øádek 50 * zobrazování prùmìru a maxima 51 * seznam mìøení uloen v poli 52 4 53 Kontakt: robie@centrum.cz -
add.php
r8 r28 11 11 AddValue($Measure, $Value); 12 12 echo('Hodnota '.$Value.' uloena'); 13 } else echo('Nemáte oprávn ìní k aktualizaci zadané velièiny!<br>Vae adresa: '.gethostbyaddr($_SERVER['REMOTE_ADDR']).'('.$_SERVER['REMOTE_ADDR'].')');14 } else echo('Nebyly zadány pot øebné parametry');13 } else echo('Nemáte oprávnění k aktualizaci zadané veličiny!<br>Vae adresa: '.gethostbyaddr($_SERVER['REMOTE_ADDR']).'('.$_SERVER['REMOTE_ADDR'].')'); 14 } else echo('Nebyly zadány potřebné parametry'); 15 15 16 16 ?> -
admin.php
r14 r28 26 26 global $Database; 27 27 $Table = array( 28 'Header' => array('Název veli èiny', 'Operace'),28 'Header' => array('Název veličiny', 'Operace'), 29 29 'Rows' => array(), 30 30 ); … … 33 33 while($Measure = $Result->fetch_array()) 34 34 { 35 array_push($Table['Rows'], array($Measure['Description'], MakeLink('?Operation=Edit&MeasureId='.$Measure['Id'], 'Editovat').' '.MakeLink('?Operation=Delete&MeasureId='.$Measure['Id'], 'Odstranit').' '.MakeLink('?Operation=RebuildCache&MeasureId='.$Measure['Id'], 'P øestavìt cache')));35 array_push($Table['Rows'], array($Measure['Description'], MakeLink('?Operation=Edit&MeasureId='.$Measure['Id'], 'Editovat').' '.MakeLink('?Operation=Delete&MeasureId='.$Measure['Id'], 'Odstranit').' '.MakeLink('?Operation=RebuildCache&MeasureId='.$Measure['Id'], 'Přestavět cache'))); 36 36 } 37 $Output = '<h3>Seznam m ìøení</h3>'.Table($Table).MakeLink('?Operation=Add', 'Pøidat');37 $Output = '<h3>Seznam měření</h3>'.Table($Table).MakeLink('?Operation=Add', 'Přidat'); 38 38 return($Output); 39 39 } … … 58 58 { 59 59 global $Database; 60 echo("Vytva øím novou cache...<br>");60 echo("Vytvařím novou cache...<br>"); 61 61 $DbResult = $Database->select('measure', '*', 'Id='.addslashes($_GET['MeasureId'])); 62 62 $Measure = $DbResult->fetch_array(); 63 63 64 64 RebuildMeasureCache($Measure); 65 echo('Dokon èeno<br>');65 echo('Dokončeno<br>'); 66 66 } 67 67 -
classes.php
r13 r28 4 4 'Measure' => array( 5 5 'Name' => array('Type' => 'String', 'Caption' => 'Zkratka', 'Default' => 'measure'), 6 'Title' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => 'M ìøení'),7 'Description' => array('Type' => 'String', 'Caption' => 'Popis', 'Default' => 'M ìøení velièiny'),6 'Title' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => 'Měření'), 7 'Description' => array('Type' => 'String', 'Caption' => 'Popis', 'Default' => 'Měření veličiny'), 8 8 'Unit' => array('Type' => 'String', 'Caption' => 'Jednotka', 'Default' => ''), 9 9 'Continuity' => array('Type' => 'Boolean', 'Caption' => 'Spojitost', 'Default' => '0'), 10 'Period' => array('Type' => 'Integer', 'Caption' => 'Perioda m ìøení', 'Default' => '60'),11 'PermissionAdd' => array('Type' => 'String', 'Caption' => 'Oprávn ìní k mìøení', 'Default' => 'localhost.localdomain'),12 'PermissionView' => array('Type' => 'String', 'Caption' => 'Oprávn ìní k prohlíení', 'Default' => 'all'),10 'Period' => array('Type' => 'Integer', 'Caption' => 'Perioda měření', 'Default' => '60'), 11 'PermissionAdd' => array('Type' => 'String', 'Caption' => 'Oprávnění k měření', 'Default' => 'localhost.localdomain'), 12 'PermissionView' => array('Type' => 'String', 'Caption' => 'Oprávnění k prohlížení', 'Default' => 'all'), 13 13 'Enabled' => array('Type' => 'Boolean', 'Caption' => 'Povolení', 'Default' => '1'), 14 'DataType' => array('Type' => 'String', 'Caption' => 'Typ datových polo ek', 'Default' => 'int'),15 'DataTable' => array('Type' => 'String', 'Caption' => 'Tabulka m ìøených dat', 'Default' => 'data'),14 'DataType' => array('Type' => 'String', 'Caption' => 'Typ datových položek', 'Default' => 'int'), 15 'DataTable' => array('Type' => 'String', 'Caption' => 'Tabulka měřených dat', 'Default' => 'data'), 16 16 ), 17 17 ); -
config.sample.php
r13 r28 1 1 <?php 2 3 // Toto je ukázkový konfigurační soubor. Zkopírujte si jej jako config.php do stejné složky a upravte podle potřeby. 2 4 3 5 $Config = array( … … 8 10 'Database' => 'statistic', 9 11 'Prefix' => '', 10 'Charset' => ' latin2',12 'Charset' => 'utf8', 11 13 ), 12 14 'AddNewValueUrl' => 'http://localhost/dev/statistic/add.php', … … 14 16 'Web' => array( 15 17 'Title' => 'Statistika', 16 'Charset' => 'iso-8859-2', 18 'Charset' => 'utf-8', 19 'AdminEmail' => 'admin@domain', 20 'ShowError' => 0, 21 'ErrorLogFile' => 'php_script_error.log', 17 22 ), 18 23 'DivisionCount' => 500, … … 31 36 'Period' => 'day', 32 37 'TimeSpecify' => 0, 38 'Differential' => 0, 33 39 ), 34 40 ); -
development/index.php
r24 r28 1 1 <?php 2 echo('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 3 <html><head> 4 <meta http-equiv="Content-Language" content="cs"> 5 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> 6 <title>Statistika - vývoj</title> 7 <LINK REL="StyleSheet" HREF="../style.css" TYPE="text/css" MEDIA="all"> 8 </head><body style="font-family: sans-serif;">'); 9 echo('<div class="Title">Vývoj systému:</div> 2 include('../global.php'); 3 4 $Config['Web']['Title'] = 'Statistika - vývoj'; 5 6 $Content = '<div class="Title">Vývoj systému:</div> 10 7 <h3 class="Title">Informace k vývoji</h3> 11 <p class="p1">Vítejte na stránce obsahují informace a materiály k systému uchování a grafického zobrazování m ìøených velièin.</p>8 <p class="p1">Vítejte na stránce obsahují informace a materiály k systému uchování a grafického zobrazování měřených veličin.</p> 12 9 13 <h3 class="Title">Zdrojové kódy poslední verze ke sta ¾ení</h3>14 <p class="p1"><a href="statistic-3. 0.zip">statistic-3.0.zip</a></p>10 <h3 class="Title">Zdrojové kódy poslední verze ke stažení</h3> 11 <p class="p1"><a href="statistic-3.1.zip">statistic-3.1.zip</a></p> 15 12 16 <h3 class="Title">Zmìny v systému</h3><br> 13 <h3 class="Title">Změny v systému</h3><br> 14 Verze 3.1 (13.2.2008)<br> 15 <ul> 16 <li>Upraveny skripty pro plnění dat.</li> 17 <li>Přidán odkaz pod grafem odkazující staticky na vybraný časový úsek.</li> 18 <li>Opraveno zobrazování desetinných míst u čísel bez jednotek</li> 19 <li>Upravena poloha zobrazování celkové informace Min, Avg, Max.</li> 20 <li>Různé menší opravy</li> 21 </ul> 17 22 Verze 3.0 (14.12.2007)<br> 18 23 <ul> 19 <li>P øepsán pøístup k databázi MySQL pøes tøídu mysqli</li>20 <li>Data m ìøení byly pro zvý¹ení rychlosti rozdìleny do jednotlivých tabulek av¹ak stále je mo¾né mít v jedné datové tabulce více mìøení. Rozdìlení dat do více tabulek také umo¾nilo mít ulo¾ená data s rùznou pøesnosti pro jednolivé mìøení. Pùvodnì pouze INT, nyní v¹echny dal¹í èíselné typy jako TINYINT, SMALLINT, INT, BIGINT a FLOAT.</li>21 <li>P øidáno automatické zaokrouhlení zobrazovaných hodnot a zobrazení pøedpon jednotek.</li>22 <li>Dopln ìny dal¹í skripty pro zji¹»ování informací o systému a plnìní databáze.</li>23 <li>Nastavení sdru ¾eno do souboru config.php.</li>24 <li>R ùzné opravy</li>24 <li>Přepsán přístup k databázi MySQL přes třídu mysqli</li> 25 <li>Data měření byly pro zvýšení rychlosti rozděleny do jednotlivých tabulek avšak stále je možné mít v jedné datové tabulce více měření. Rozdělení dat do více tabulek také umožnilo mít uložená data s různou přesnosti pro jednolivé měření. Původně pouze INT, nyní všechny další číselné typy jako TINYINT, SMALLINT, INT, BIGINT a FLOAT.</li> 26 <li>Přidáno automatické zaokrouhlení zobrazovaných hodnot a zobrazení předpon jednotek.</li> 27 <li>Doplněny další skripty pro zjišťování informací o systému a plnění databáze.</li> 28 <li>Nastavení sdruženo do souboru config.php.</li> 29 <li>Různé opravy</li> 25 30 </ul> 26 31 Verze 2.2 (30.6.2007)<br> 27 32 <ul> 28 <li>opraveno vykreslování grafu p øed celkovým zaèátkem a po celkovém konci mìøení</li>33 <li>opraveno vykreslování grafu před celkovým začátkem a po celkovém konci měření</li> 29 34 <li>opraveno vykreslování poslední hodnoty v grafu</li> 30 35 </ul> 31 36 Verze 2.1 (24.3.2007)<br> 32 37 <ul> 33 <li>r ùzné opravy</li>38 <li>různé opravy</li> 34 39 </ul> 35 40 Verze 2.0 (16.3.2007)<br> 36 41 <ul> 37 <li>dynamické zobrazování èasové osy, výbìr bì¾ných úsekù nebo pøesného intervalu dle poèáteèního a koneèného èasu</li>38 <li>pou ¾ití TrueType fontù</li>39 <li>m ìnitelné rozmìry generovaného obrázku</li>40 <li>automatická redukce na èítaných dat pro del¹í èasového mìøítka</li>41 <li>automatická redukce po sob ì se opakujících stejných do jedné, redukce nulových a málo promìnných odmìrù</li>42 <li>v úsecích, kde se nem ìøilo buï re¾im automatická interpolace hodnot nebo nulový údaj</li>43 <li>Záznam a zobrazení graf ù minima, prùmìru a maxima</li>44 <li>zápis nových hodnot p øes webové HTTP, kontrola podle adres poèítaèù</li>45 <li>seznam m ìøení ulo¾en v tabulce</li>42 <li>dynamické zobrazování časové osy, výběr běžných úseků nebo přesného intervalu dle počátečního a konečného času</li> 43 <li>použití TrueType fontů</li> 44 <li>měnitelné rozměry generovaného obrázku</li> 45 <li>automatická redukce načítaných dat pro delší časového měřítka</li> 46 <li>automatická redukce po sobě se opakujících stejných do jedné, redukce nulových a málo proměnných odměrů</li> 47 <li>v úsecích, kde se neměřilo buď režim automatická interpolace hodnot nebo nulový údaj</li> 48 <li>Záznam a zobrazení grafů minima, průměru a maxima</li> 49 <li>zápis nových hodnot přes webové HTTP, kontrola podle adres počítačů</li> 50 <li>seznam měření uložen v tabulce</li> 46 51 </ul> 47 52 Verze 1.0 (25.11.2004)<br> 48 53 <ul> 49 <li>statické zobrazování èasové osy v rozsahu hodina, den, týden, mìsíc, rok a více rokù</li>50 <li>jednotná tabulka pro v ¹echna mìøení, ka¾dé mìøení jako jeden sloupec, ka¾dou minutu nový øádek</li>51 <li>zobrazování pr ùmìru a maxima</li>52 <li>seznam m ìøení ulo¾en v poli</li>54 <li>statické zobrazování časové osy v rozsahu hodina, den, týden, měsíc, rok a více roků</li> 55 <li>jednotná tabulka pro všechna měření, každé měření jako jeden sloupec, každou minutu nový řádek</li> 56 <li>zobrazování průměru a maxima</li> 57 <li>seznam měření uložen v poli</li> 53 58 </ul> 54 59 <br> 55 60 <h3 class="Title">ServerStat</h3> 56 Program v Delphi 7, který periodicky ka ¾dou minutu plní rùzné údaje do statistiky.57 Pln ìní probíhá pøes HTTP odkaz a skript add.php?MeasureId=n&Value=x, kde n je identifikaèní èíslo mìøené velièiny v databázi a x je zmìøená hodnota.58 K p øistupu pøes HTTP pou¾ívá program HTTP komponentu z balíku Indy.<br>61 Program v Delphi 7, který periodicky každou minutu plní různé údaje do statistiky. 62 Plnění probíhá přes HTTP odkaz a skript add.php?MeasureId=n&Value=x, kde n je identifikační číslo měřené veličiny v databázi a x je změřená hodnota. 63 K přistupu přes HTTP používá program HTTP komponentu z balíku Indy.<br> 59 64 <p class="p1"><a href="ServerStat.zip">ServerStat.zip</a></p> 60 '); 61 echo('</body></html>'); 65 '; 66 ShowPage($Content); 67 62 68 ?> -
error.php
r1 r28 2 2 3 3 // Obsluha chyb v1.1.1 // 4 5 $Error_Email = 'robie@centrum.cz'; // Adresa, kam budou chyby odesílány 6 $Error_Subject = 'Chybové hlá¹ení'; // Název zpráv o chybách 7 $Error_ShowDetails = 1; // Zobrazit detajly o chybì 4 include_once('config.php'); 8 5 9 6 //error_reporting(0); // Vypni interní obsluhu chyb 10 7 11 function obsluha_chyb($errno, $errmsg,$filename,$linenum,$vars)8 function obsluha_chyb($errno, $errmsg, $filename, $linenum, $vars) 12 9 { 13 global $Error_ShowDetails; 14 $dt = date("Y-m-d H:i:s"); // èasové razítko polo¾ky 15 $errortype = array ( 10 global $Config; 11 12 $dt = date("Y-m-d H:i:s"); // časové razítko položky 13 $errortype = array( 16 14 1 => "Error", 17 15 2 => "Warning", … … 28 26 $user_errors = E_ALL; //E_ERROR | E_WARNING | E_PARSE; 29 27 30 if( $user_errors & $errno)28 if(($user_errors & $errno)) 31 29 { 32 $err = '# '.$dt.' : '.$errmsg."\n";30 $err = '# '.$dt.' : '.$errmsg." on line ".$linenum."\n"; 33 31 $Backtrace = debug_backtrace(); 34 32 array_shift($Backtrace); 35 33 //array_shift($Backtrace); 34 //print_r($Backtrace); 36 35 foreach($Backtrace as $Item) 37 36 { 38 37 $err .= ' '.$Item['file'].'('.$Item['line'].")\t".$Item['function']; 39 38 $arguments = ''; 40 if(array_key_exists('args', $Item) and is_array($Item['args'])) 39 if(array_key_exists('args',$Item)) 40 if(is_array($Item['args'])) 41 41 foreach($Item['args'] as $Arg) 42 42 { … … 44 44 else $arguments .= "'".$Arg."',"; 45 45 } 46 if(strlen($arguments) >0) $err .= '('.substr($arguments,0,-1).")";46 if(strlen($arguments) > 0) $err .= '('.substr($arguments,0,-1).")"; 47 47 $err .= "\n"; 48 48 49 49 } 50 50 $err .= "\n"; 51 //echo('Uvnitø'.$errno); 52 error_log($err,3,'error.log'); // Ulo¾ do chybového protokolu 53 //$err = "Datum: ".$dt."\nHlá¹ení: ".$errmsg."\nSkript: ".$filename."\nØádek: ".$linenum; 54 //mail($Error_Email,$Error_Subject,$err); // Po¹li mi zprávu (pokud je to kritická chyba) 55 echo('Do¹lo k vnitøní chybì!<br> O chybì byl uvìdomnìn správce webu a chybu brzy odstraní.<br><br>'); 56 if($Error_ShowDetails==1) echo('<pre>'.$err.'</pre><br>'); // V pøípadì ladìní chybu i zobraz 51 //echo('Uvnitř'.$errno); 52 error_log($err, 3, $Config['Web']['ErrorLogFile']); // Ulož do chybového protokolu 53 //$err = "Datum: ".$dt."\nHlášení: ".$errmsg."\nSkript: ".$filename."\nŘádek: ".$linenum; 54 // mail($Config['Web']['AdminEmail'], $Config['Web']['Title'].' - Chybové hlášení', $err); // Pošli mi zprávu (pokud je to kritická chyba) 55 echo('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head>'."\n". 56 '<meta http-equiv="Content-Language" content="cs">'."\n". 57 '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"></head><body>'."\n". 58 'Došlo k vnitřní chybě!<br> O chybě byl uvědoměn správce webu a chybu brzy odstraní.<br><br>'); 59 if($Config['Web']['ShowError'] == 1) echo('<pre>'.$err.'</pre><br>'); // V případě ladění chybu i zobraz 60 echo('</body></html>'); 57 61 if((E_ERROR | E_PARSE) & $errno) die(); 58 62 }// else echo($errmsg.'<br>'); -
global.php
r13 r28 11 11 $Database->Prefix = $Config['Database']['Prefix']; 12 12 $Database->charset($Config['Database']['Charset']); 13 14 // SQL injection hack protection 15 foreach($_POST as $Index => $Item) $_POST[$Index] = addslashes($Item); 16 foreach($_GET as $Index => $Item) $_GET[$Index] = addslashes($Item); 13 17 14 18 function ShowPage($Content) … … 57 61 $Class = $Classes[$ClassName]; 58 62 $Table = array( 59 'Header' => array('Polo ka', 'Hodnota'),63 'Header' => array('Položka', 'Hodnota'), 60 64 'Rows' => array(), 61 65 ); … … 81 85 array_push($Table['Rows'], array($Item['Caption'], $Edit)); 82 86 } 83 $Output = '<h3>Tabulka '.$ClassName.'</h3>'.Table($Table).MakeLink('?Operation=Add2', 'P øidat');87 $Output = '<h3>Tabulka '.$ClassName.'</h3>'.Table($Table).MakeLink('?Operation=Add2', 'Přidat'); 84 88 return($Output); 85 89 } -
graph.php
r23 r28 5 5 else $Debug = 0; 6 6 7 if(!array_key_exists('From',$_GET)) die('Musíte zadat èas poèátku');7 if(!array_key_exists('From',$_GET)) die('Musíte zadat čas počátku'); 8 8 $StartTime = addslashes($_GET['From']); 9 if(!array_key_exists('To',$_GET)) die('Musíte zadat èas konce');9 if(!array_key_exists('To',$_GET)) die('Musíte zadat čas konce'); 10 10 $EndTime = addslashes($_GET['To']); 11 11 if($EndTime < $StartTime) $EndTime = $StartTime + 60; 12 12 $TimeDifference = $EndTime - $StartTime; 13 if(!array_key_exists('Measure',$_GET)) die('Musíte zadat m ìøenou velièinu');13 if(!array_key_exists('Measure',$_GET)) die('Musíte zadat měřenou veličinu'); 14 14 $MeasureId = addslashes($_GET['Measure']); 15 15 if(!array_key_exists('Width', $_GET)) $Width = $DefaultWidth; … … 17 17 if(!array_key_exists('Height', $_GET)) $Height = $DefaultHeight; 18 18 else $Height = addslashes($_GET['Height']); 19 if(!array_key_exists('Differential', $_GET)) $Differential = $Config['DefaultVariables']['Differential']; 20 else $Differential = addslashes($_GET['Differential']); 19 21 $VerticalLinesCount = round($Height / ($FontSize + 4)); 20 22 … … 41 43 foreach($Points as $Index => $Item) 42 44 { 43 $Points[$Index]['min'] = $Points[$Index]['min'] / $Measure['Divider'];44 $Points[$Index]['avg'] = $Points[$Index]['avg'] / $Measure['Divider'];45 $Points[$Index]['max'] = $Points[$Index]['max'] / $Measure['Divider'];45 //$Points[$Index]['min'] = $Points[$Index]['min'] / $Measure['Divider']; 46 //$Points[$Index]['avg'] = $Points[$Index]['avg'] / $Measure['Divider']; 47 //$Points[$Index]['max'] = $Points[$Index]['max'] / $Measure['Divider']; 46 48 if($Points[$Index]['avg'] > $MaxValue) $MaxValue = $Points[$Index]['avg']; 47 49 if($Points[$Index]['avg'] < $MinValue) $MinValue = $Points[$Index]['avg']; … … 50 52 $AvgValue = $AvgValue + $Points[$Index]['avg']; 51 53 } 52 $MinValue = round($MinValue * $Measure['Divider']) / $Measure['Divider'];53 $MaxValue = round($MaxValue * $Measure['Divider']) / $Measure['Divider'];54 $AvgValue = round($AvgValue / count($Points)* $Measure['Divider']) / $Measure['Divider'];54 //$MinValue = round($MinValue * $Measure['Divider']) / $Measure['Divider']; 55 //$MaxValue = round($MaxValue * $Measure['Divider']) / $Measure['Divider']; 56 $AvgValue = $AvgValue / count($Points); //round( * $Measure['Divider']) / $Measure['Divider']; 55 57 56 58 // Generate polygon and recalculate y values to fit graph height … … 126 128 //imagestring($Image, 10, 40, 50, $TimeShift, $Black); 127 129 128 // Zobraz m ìøítko Y130 // Zobraz měřítko Y 129 131 $VerticalLinesDistance = $Height / $VerticalLinesCount; 130 132 for($I=1; $I<=$VerticalLinesCount; $I++) … … 136 138 137 139 $TimeShift = AlignTime($StartTime, $MinorTimeMarks) - $StartTime; 138 139 /* 140 if(($MinorTimeMarks / $TimeRange * $Width) > 3) 141 for($Time = $StartTime; $Time < $EndTime; $Time += $MinorTimeMarks) 142 { 143 $X = round(($Time - $StartTime + $TimeShift) / $TimeRange * $Width) % $Width; 144 for($Y=0; $Y < $Height; $Y = $Y + 3) imagesetpixel($Image, $X, $Y, $Gray); 145 //imageline($Image, 30, $Y, $Width-1, $Y, IMG_COLOR_STYLED); 146 //imagestring($Image, 2, 2, $Y - 6, round(($I * $VerticalLinesDistance + $MinValue)*$Measure['divider']) / $Measure['divider'], $Black); 147 } 148 */ 149 150 // Zobraz mìøítko X 140 141 // Zobraz měřítko X 151 142 $LastTextEnd = 0; 152 143 for($Time = $StartTime; $Time < $EndTime; $Time += $MajorTimeMarks) … … 178 169 $GenerationTime = floor((GetMicrotime() - $StopWatchStart) * 1000 ) / 1000; 179 170 180 imagettftext($Image, $FontSize, 0, $Width-94, 14, $Red, $FontFile, "Max. ".AddPrefixMultipliers($MaxValue, $Measure['Unit'])); 181 imagettftext($Image, $FontSize, 0, $Width-194, 14, $Green, $FontFile, "Avg. ".AddPrefixMultipliers($AvgValue, $Measure['Unit'])); 182 imagettftext($Image, $FontSize, 0, $Width-294, 14, $Blue, $FontFile, "Min. ".AddPrefixMultipliers($MinValue, $Measure['Unit'])); 171 $Left = $Width - 10; 172 $Text = " Max. ".AddPrefixMultipliers($MaxValue, $Measure['Unit']); 173 $BoundingBox = imagettfbbox($FontSize, 0, $FontFile, $Text); 174 $Left -= ($BoundingBox[2] - $BoundingBox[0]); 175 imagettftext($Image, $FontSize, 0, $Left, 14, $Red, $FontFile, $Text); 176 177 $Text = " Avg. ".AddPrefixMultipliers($AvgValue, $Measure['Unit']); 178 $BoundingBox = imagettfbbox($FontSize, 0, $FontFile, $Text); 179 $Left -= ($BoundingBox[2] - $BoundingBox[0]); 180 imagettftext($Image, $FontSize, 0, $Left, 14, $Green, $FontFile, $Text); 181 182 $Text = " Min. ".AddPrefixMultipliers($MinValue, $Measure['Unit']); 183 $BoundingBox = imagettfbbox($FontSize, 0, $FontFile, $Text); 184 $Left -= ($BoundingBox[2] - $BoundingBox[0]); 185 imagettftext($Image, $FontSize, 0, $Left, 14, $Blue, $FontFile, $Text); 183 186 //imagestring($Image, 2, 70, 20, 'Vygenerováno za '.$GenerationTime.' sekund', $Black); 184 187 //imagestring($Image, 2, 50, 30, 'Level: '.$Level, $Black); 185 188 186 imagettftext($Image, $FontSize, 0, 70, 14, $Black, $FontFile, to_utf8($Measure['Description']));189 imagettftext($Image, $FontSize, 0, 70, 14, $Black, $FontFile, $Measure['Description']); 187 190 imagerectangle($Image, 0, 0, $Width - 1, $Height - 1, $Black); // Frame border 188 191 imagepng($Image); -
index.php
r14 r28 62 62 63 63 $Output .= ' <form style="display: inline;" action="?Operation=SetTimeNow&Time='.$Time.'" method="post">'; 64 $Output .= '<input type="submit" value="Aktuální èas">';64 $Output .= '<input type="submit" value="Aktuální čas">'; 65 65 $Output .= '</form>'; 66 66 … … 68 68 } 69 69 70 $Months = array('', 'Leden', 'Únor', 'B øezen', 'Duben', 'Kvìten', 'Èerven', 'Èervenec', 'Srpen', 'Záøí',71 ' Øíjen', 'Listopad', 'Prosinec');70 $Months = array('', 'Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen', 'Červenec', 'Srpen', 'Září', 71 'Říjen', 'Listopad', 'Prosinec'); 72 72 73 73 $GrafTimeRanges = array( … … 85 85 ), 86 86 'month' => array( 87 'caption' => 'M ìsíc',87 'caption' => 'Měsíc', 88 88 'period' => 3600*24*30, 89 89 ), … … 111 111 $_SESSION['TimeStart'] = $_SESSION['TimeEnd'] - $GrafTimeRanges[$_SESSION['Period']]['period']; 112 112 } 113 114 113 115 114 $Output = '<div class="Title">Statistiky</div>'; … … 142 141 143 142 } 144 /* 145 echo('<strong>Mìøené velièiny:</strong><br>'); 146 DB_Select('stat_measure', '*', 'enabled=1 ORDER BY description'); 147 while($Row = DB_Row()) 148 echo('<a href="?Measure='.$Row['id'].'">'.$Row['description'].'</a> '); 149 echo('<br><br>'); 150 */ 151 $Output .= '<strong>Èasový úsek:</strong><br>'; 143 $Output .= '<strong>Časový úsek:</strong><br>'; 152 144 // Show graf time range menu 153 145 if($_SESSION['TimeSpecify'] == 0) … … 157 149 $Output .= '<a href="?Period='.$Index.'">'.$Item['caption'].'</a> '; 158 150 $Output .= '<br>'; 159 $Output .= '<a href="?TimeSpecify=1">P øesnìj¹í nastavení...</a><br>';151 $Output .= '<a href="?TimeSpecify=1">Přesnější nastavení...</a><br>'; 160 152 } else { 161 153 $Output .= '<table cellspacing="0" cellpadding="2" border="0">'; 162 $Output .= '<tr><td>Po èátek:</td><td>'.EditTime('TimeStart').'</td></tr>';154 $Output .= '<tr><td>Počátek:</td><td>'.EditTime('TimeStart').'</td></tr>'; 163 155 $Output .= '<tr><td>Konec:</td><td>'.EditTime('TimeEnd').'</td></tr>'; 164 156 $Output .= '</table>'; … … 168 160 169 161 $Output .= '<strong>Graf:</strong><br>'; 170 $Output .= '<img alt="Graf" src="graph.php?Measure='.$_SESSION['Measure'].'&From='.$_SESSION['TimeStart'].'&To='.$_SESSION['TimeEnd'].'&Width=750&Height=200" width="750" height="214"><br>'; 162 $Output .= '<img alt="Graf" src="graph.php?Measure='.$_SESSION['Measure'].'&From='.$_SESSION['TimeStart'].'&To='.$_SESSION['TimeEnd'].'&Width=750&Height=200&Differential='.$_SESSION['Differential'].'" width="750" height="200"><br>'; 163 $Output .= '<a href="?Measure='.$_SESSION['Measure'].'&TimeStart='.$_SESSION['TimeStart'].'&TimeEnd='.$_SESSION['TimeEnd'].'&TimeSpecify=1&Differential='.$_SESSION['Differential'].'">Odkaz na vybraný graf</a><br>'; 171 164 //print_r(GetValues($Measure, $TimeStart, $TimeEnd)); 172 165 … … 174 167 175 168 $Output .= '<table border="1" cellspacing="0" cellpadding="2" style="font-size: small;">'; 176 $Output .= '<tr><th>M ìøená velièina</th><th>Poslední hodnota</th><th>Èas posledního mìøení</th><th>Interpolace</th><th>Poznámky</th>';177 if(array_key_exists('Debug', $_GET)) $Output .= '<th>Po èet polo¾ek</th><th>Èas vykonání</th>';169 $Output .= '<tr><th>Měřená veličina</th><th>Poslední hodnota</th><th>Čas posledního měření</th><th>Interpolace</th><th>Poznámky</th>'; 170 if(array_key_exists('Debug', $_GET)) $Output .= '<th>Počet položek</th><th>Čas vykonání</th>'; 178 171 $Output .= '</tr>'; 179 172 $Database->select_db('measure'); … … 203 196 if($Measure['Info'] == '') $Measure['Info'] = ' '; 204 197 $GenerationTime = floor((GetMicrotime() - $StopWatchStart) * 1000 ) / 1000; 205 $Output .= '<tr><td><a href="?Measure='.$Measure['Id'].' ">'.$Measure['Description'].'</a></td><td align="center">'.$LastMeasureValue.'</td><td align="center">'.$LastMeasureTime.'</td><td align="center">'.$Interpolate.'</td><td>'.$Measure['Info'].'</td>';198 $Output .= '<tr><td><a href="?Measure='.$Measure['Id'].'&Differential=0">'.$Measure['Description'].'</a></td><td align="center">'.$LastMeasureValue.'</td><td align="center">'.$LastMeasureTime.'</td><td align="center">'.$Interpolate.'</td><td>'.$Measure['Info'].'</td>'; 206 199 if(array_key_exists('Debug', $_GET)) $Output .= '<td>'.$RowCount.'</td><td>'.$GenerationTime.'</td>'; 207 200 $Output .= '</tr>'; 208 201 } 209 202 $Output .= '</table>'; 210 $Output .= '<br><a href=" development/">Sekce vývoje systému</a>';203 $Output .= '<br><a href="http://game.zdechov.net/statistic/development/">Sekce vývoje systému</a>'; 211 204 //echo(time()); 212 205 //print_r(gd_info()); 213 $Output .= '<br><div style="font-size: small;">Kontakt: robie@centrum.cz</div>';214 206 $Output .= '</body></html>'; 215 207 //print_r($_SESSION); … … 217 209 ShowPage($Output); 218 210 211 //echo(AddPrefixMultipliers('-0.000000071112345', 'B')); 219 212 220 213 ?> -
stat_functions.php
r16 r28 22 22 ); 23 23 24 function TruncateDigits($Value, $Digits = 4) 25 { 26 for($II = 2; $II > -1; $II--) 27 { 28 if($Value >= pow(10, $II)) 29 { 30 if($Digits < ($II + 1)) $RealDigits = $II + 1; else $RealDigits = $Digits; 31 $Value = round($Value / pow(10, $II - $RealDigits + 1)) * pow(10, $II - $RealDigits + 1); 32 break; 33 } 34 } 35 return($Value); 36 } 37 24 38 function AddPrefixMultipliers($Value, $Unit, $Digits = 4) 25 39 { 26 40 global $PrefixMultipliers; 27 if($Unit == '') return($Value); 41 42 if($Unit == '') return(TruncateDigits($Value, $Digits)); 28 43 $I = 8; 29 44 if($Value > 0) $II = 1; … … 34 49 35 50 // Truncate digits count 36 for($II=2; $II > -1; $II--) 37 { 38 if($Value >= pow(10, $II)) 39 { 40 if($Digits < ($II + 1)) $RealDigits = $II + 1; else $RealDigits = $Digits; 41 $Value = round($Value / pow(10, $II - $RealDigits + 1)) * pow(10, $II - $RealDigits + 1); 42 break; 43 } 44 } 51 $Value = TruncateDigits($Value, $Digits); 45 52 46 53 return($Value.' '.$PrefixMultipliers[$I][0].$Unit); … … 94 101 if($Measure['Continuity'] == 0) $Measure['ContinuityEnabled'] = 0; // non continuous 95 102 else $Measure['ContinuityEnabled'] = 2; // continuous graph 96 } else die('M ìøená velièina nenalezena');103 } else die('M��enďż˝ veliďż˝ina nenalezena'); 97 104 return($Measure); 98 105 } … … 182 189 function ComputeOneValue($LeftTime, $RightTime, $Values, $Measure, $Level) 183 190 { 184 global $ValueTypes ;191 global $ValueTypes, $Differential; 185 192 186 193 $NewValue = array('min' => +1000000000000000000, 'avg' => 0, 'max' => -1000000000000000000); … … 207 214 if($ValueType == 'avg') 208 215 { 209 if($Values[$I+1]['continuity'] == $Measure['ContinuityEnabled']) ; 210 else $NewValue[$ValueType] = $NewValue[$ValueType] + ($Values[$I+1]['time'] - $Values[$I]['time']) * 211 (($Values[$I+1][$ValueType] - $Values[$I][$ValueType]) / 2 + $Values[$I][$ValueType]); 216 if($Values[$I+1]['continuity'] == $Measure['ContinuityEnabled']); 217 else if($Differential == 0) 218 { 219 $NewValue[$ValueType] = $NewValue[$ValueType] + ($Values[$I+1]['time'] - $Values[$I]['time']) * 220 (($Values[$I+1][$ValueType] - $Values[$I][$ValueType]) / 2 + $Values[$I][$ValueType]); 221 } else { 222 $NewValue[$ValueType] = $NewValue[$ValueType] + ($Values[$I+1]['time'] - $Values[$I]['time']) * 223 (($Values[$I+1][$ValueType] - $Values[$I][$ValueType]) / 2); 224 } 212 225 } 213 226 else if($ValueType == 'max') … … 219 232 else 220 233 { 221 //if($Values[$I][$ValueType] > $NewValue[$ValueType]) $NewValue[$ValueType] = $Values[$I][$ValueType]; 222 if($Values[$I+1][$ValueType] > $NewValue[$ValueType]) $NewValue[$ValueType] = $Values[$I+1][$ValueType]; 234 if($Differential == 0) 235 { 236 if($Values[$I+1][$ValueType] > $NewValue[$ValueType]) $NewValue[$ValueType] = $Values[$I+1][$ValueType]; 237 } else { 238 $Difference = $Values[$I+1][$ValueType] - $Values[$I][$ValueType]; 239 if($Difference > $NewValue[$ValueType]) $NewValue[$ValueType] = $Difference; 240 } 223 241 } 224 242 } … … 232 250 else 233 251 { 234 //if($Values[$I][$ValueType] < $NewValue[$ValueType]) $NewValue[$ValueType] = $Values[$I][$ValueType]; 235 if($Values[$I+1][$ValueType] < $NewValue[$ValueType]) $NewValue[$ValueType] = $Values[$I+1][$ValueType]; 252 if($Differential == 0) 253 { 254 if($Values[$I+1][$ValueType] < $NewValue[$ValueType]) $NewValue[$ValueType] = $Values[$I+1][$ValueType]; 255 } else { 256 $Difference = $Values[$I+1][$ValueType] - $Values[$I][$ValueType]; 257 if($Difference < $NewValue[$ValueType]) $NewValue[$ValueType] = $Difference; 258 } 236 259 } 237 260 } … … 241 264 } 242 265 //if(($RightTime - $LeftTime) > 0) 243 if($Measure['Cumulative'] == 0) $NewValue['avg'] = $NewValue['avg'] / ($RightTime - $LeftTime); 266 if($Measure['Cumulative'] == 0) 267 { 268 $NewValue['avg'] = $NewValue['avg'] / ($RightTime - $LeftTime); 269 } 244 270 return($NewValue); 245 271 //echo($NewValue['avg'].'<br>');
Note:
See TracChangeset
for help on using the changeset viewer.