Changeset 28


Ignore:
Timestamp:
Feb 13, 2008, 1:59:20 PM (16 years ago)
Author:
george
Message:

Upraveno: Změna kódování stránek na UTF-8.
Přidáno: Verze 3.1 v sekci vývoje.
Přidáno: Odkaz pod grafem na vybraný časový úsek.
Opraveno: Zobrazování desetinných míst u čísel bez jednotek.
Opraveno: Zobrazování textů Min, Avg, Max v grafu.

Files:
1 added
1 deleted
11 edited

Legend:

Unmodified
Added
Removed
  • Readme.txt

    r24 r28  
     1Webové statistiky
     2=================
     3
     4Je potøeba zkopírovat soubor config.sample.php jako config.php a upravit v nìm nastavení.
    15Ve složce SQL jsou uloženy definice tabulek measure (struktura i ukázkové data) a tabulky data, kterou je potøeba vytvoøit pro jednotlivá mìøení.
    2 Ve složce measure_scripts je soubor traffic.php, který zajišuje získávání informací o rùzných velièinách v poèítaèi.
     6Ve složce measure_scripts je ukázkový soubor monitor.sample.php, který zajišuje získávání informací o rùzných velièinách v poèítaèi.
    37 
     8Verze 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
     16Verze 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 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.
     20    * Pøidáno automatické zaokrouhlení zobrazovaných hodnot a zobrazení pøedpon jednotek.
     21    * Doplnìny další skripty pro zjišování informací o systému a plnìní databáze.
     22    * Nastavení sdruženo do souboru config.php.
     23    * Rùzné opravy
     24
     25Verze 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
     30Verze 2.1 (24.3.2007)
     31
     32    * rùzné opravy
     33
     34Verze 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    * použití 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ï režim 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í uložen v tabulce
     45
     46Verze 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 všechna mìøení, každé mìøení jako jeden sloupec, každou minutu nový øádek
     50    * zobrazování prùmìru a maxima
     51    * seznam mìøení uložen v poli
     52
    453Kontakt: robie@centrum.cz
  • add.php

    r8 r28  
    1111    AddValue($Measure, $Value);
    1212    echo('Hodnota '.$Value.' uložena');
    13   } else echo('Nemáte oprávnìní k aktualizaci zadané velièiny!<br>Vaše 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>Vaše adresa: '.gethostbyaddr($_SERVER['REMOTE_ADDR']).'('.$_SERVER['REMOTE_ADDR'].')');
     14} else echo('Nebyly zadány potřebné parametry');
    1515
    1616?>
  • admin.php

    r14 r28  
    2626  global $Database;
    2727  $Table = array(
    28     'Header' => array('Název velièiny', 'Operace'),
     28    'Header' => array('Název veličiny', 'Operace'),
    2929    'Rows' => array(),
    3030  );
     
    3333  while($Measure = $Result->fetch_array())
    3434  {
    35     array_push($Table['Rows'], array($Measure['Description'], MakeLink('?Operation=Edit&amp;MeasureId='.$Measure['Id'], 'Editovat').' '.MakeLink('?Operation=Delete&amp;MeasureId='.$Measure['Id'], 'Odstranit').' '.MakeLink('?Operation=RebuildCache&amp;MeasureId='.$Measure['Id'], 'Pøestavìt cache')));
     35    array_push($Table['Rows'], array($Measure['Description'], MakeLink('?Operation=Edit&amp;MeasureId='.$Measure['Id'], 'Editovat').' '.MakeLink('?Operation=Delete&amp;MeasureId='.$Measure['Id'], 'Odstranit').' '.MakeLink('?Operation=RebuildCache&amp;MeasureId='.$Measure['Id'], 'Přestavět cache')));
    3636  }
    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');
    3838  return($Output);
    3939}
     
    5858{
    5959  global $Database;
    60   echo("Vytvaøím novou cache...<br>");
     60  echo("Vytvařím novou cache...<br>");
    6161  $DbResult = $Database->select('measure', '*', 'Id='.addslashes($_GET['MeasureId']));
    6262  $Measure = $DbResult->fetch_array();
    6363
    6464  RebuildMeasureCache($Measure); 
    65   echo('Dokonèeno<br>');         
     65  echo('Dokončeno<br>');         
    6666}
    6767
  • classes.php

    r13 r28  
    44  'Measure' => array(
    55    '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'),
    88    'Unit' =>           array('Type' => 'String', 'Caption' => 'Jednotka', 'Default' => ''),
    99    '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'),
    1313    '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'),
    1616  ),
    1717);
  • config.sample.php

    r13 r28  
    11<?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.
    24
    35$Config = array(
     
    810    'Database' => 'statistic',
    911    'Prefix' => '',
    10     'Charset' => 'latin2',
     12    'Charset' => 'utf8',
    1113  ),
    1214  'AddNewValueUrl' => 'http://localhost/dev/statistic/add.php',
     
    1416  'Web' => array(
    1517    'Title' => 'Statistika',
    16     'Charset' => 'iso-8859-2',
     18    'Charset' => 'utf-8',
     19    'AdminEmail' => 'admin@domain',
     20    'ShowError' => 0,
     21    'ErrorLogFile' => 'php_script_error.log',   
    1722  ),
    1823  'DivisionCount' => 500,
     
    3136    'Period' => 'day',
    3237    'TimeSpecify' => 0,
     38    'Differential' => 0,
    3339  ),
    3440);
  • development/index.php

    r24 r28  
    11<?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>
     2include('../global.php');
     3
     4$Config['Web']['Title'] = 'Statistika - vývoj';
     5
     6  $Content = '<div class="Title">Vývoj systému:</div>
    107  <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>
    129
    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>
    1512
    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>
    1722  Verze 3.0 (14.12.2007)<br>
    1823  <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>
    2530  </ul>
    2631  Verze 2.2 (30.6.2007)<br>
    2732  <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>
    2934  <li>opraveno vykreslování poslední hodnoty v grafu</li>
    3035  </ul>
    3136  Verze 2.1 (24.3.2007)<br>
    3237  <ul>
    33   <li>rùzné opravy</li>
     38  <li>různé opravy</li>
    3439  </ul>
    3540  Verze 2.0 (16.3.2007)<br>
    3641  <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>
    4651  </ul>
    4752  Verze 1.0 (25.11.2004)<br>
    4853  <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>
    5358  </ul>
    5459  <br>
    5560<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>
     61Program v Delphi 7, který periodicky každou minutu plní různé údaje do statistiky.
     62Plně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.
     63K přistupu přes HTTP používá program HTTP komponentu z balíku Indy.<br>
    5964  <p class="p1"><a href="ServerStat.zip">ServerStat.zip</a></p>
    60     ');
    61 echo('</body></html>');
     65    ';
     66ShowPage($Content);
     67
    6268?>
  • error.php

    r1 r28  
    22
    33// 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ì
     4include_once('config.php');
    85
    96//error_reporting(0);                                   // Vypni interní obsluhu chyb
    107
    11 function obsluha_chyb($errno,$errmsg,$filename,$linenum,$vars)
     8function obsluha_chyb($errno, $errmsg, $filename, $linenum, $vars)
    129{
    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(
    1614    1 => "Error",
    1715    2 => "Warning",
     
    2826  $user_errors = E_ALL;  //E_ERROR | E_WARNING | E_PARSE;
    2927 
    30   if($user_errors & $errno)
     28  if(($user_errors & $errno))
    3129  {
    32           $err = '# '.$dt.' : '.$errmsg."\n";
     30    $err = '# '.$dt.' : '.$errmsg." on line ".$linenum."\n";
    3331    $Backtrace = debug_backtrace();
    3432    array_shift($Backtrace);
    3533    //array_shift($Backtrace);
     34    //print_r($Backtrace);
    3635    foreach($Backtrace as $Item)
    3736    {
    3837      $err .= ' '.$Item['file'].'('.$Item['line'].")\t".$Item['function'];
    3938      $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']))
    4141      foreach($Item['args'] as $Arg)
    4242      {
     
    4444        else $arguments .= "'".$Arg."',";
    4545      }
    46       if(strlen($arguments)>0) $err .= '('.substr($arguments,0,-1).")";
     46      if(strlen($arguments) > 0) $err .= '('.substr($arguments,0,-1).")";
    4747      $err .= "\n";
    48       
     48     
    4949    }
    5050    $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>');
    5761    if((E_ERROR | E_PARSE) & $errno) die();
    5862  }// else echo($errmsg.'<br>');
  • global.php

    r13 r28  
    1111$Database->Prefix = $Config['Database']['Prefix'];
    1212$Database->charset($Config['Database']['Charset']);
     13
     14// SQL injection hack protection
     15foreach($_POST as $Index => $Item) $_POST[$Index] = addslashes($Item);
     16foreach($_GET as $Index => $Item) $_GET[$Index] = addslashes($Item);
    1317
    1418function ShowPage($Content)
     
    5761  $Class = $Classes[$ClassName];
    5862  $Table = array(
    59     'Header' => array('Položka', 'Hodnota'),
     63    'Header' => array('Položka', 'Hodnota'),
    6064    'Rows' => array(),
    6165  );
     
    8185    array_push($Table['Rows'], array($Item['Caption'], $Edit));
    8286  }
    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');
    8488  return($Output);
    8589}
  • graph.php

    r23 r28  
    55  else $Debug = 0;
    66 
    7 if(!array_key_exists('From',$_GET)) die('Musíte zadat èas poèátku');
     7if(!array_key_exists('From',$_GET)) die('Musíte zadat čas počátku');
    88$StartTime = addslashes($_GET['From']);
    9 if(!array_key_exists('To',$_GET)) die('Musíte zadat èas konce');
     9if(!array_key_exists('To',$_GET)) die('Musíte zadat čas konce');
    1010$EndTime = addslashes($_GET['To']);
    1111if($EndTime < $StartTime) $EndTime = $StartTime + 60;
    1212$TimeDifference = $EndTime - $StartTime;
    13 if(!array_key_exists('Measure',$_GET)) die('Musíte zadat mìøenou velièinu');
     13if(!array_key_exists('Measure',$_GET)) die('Musíte zadat měřenou veličinu');
    1414$MeasureId = addslashes($_GET['Measure']);
    1515if(!array_key_exists('Width', $_GET)) $Width = $DefaultWidth;
     
    1717if(!array_key_exists('Height', $_GET)) $Height = $DefaultHeight;
    1818else $Height = addslashes($_GET['Height']);
     19if(!array_key_exists('Differential', $_GET)) $Differential = $Config['DefaultVariables']['Differential'];
     20else $Differential = addslashes($_GET['Differential']);
    1921$VerticalLinesCount = round($Height / ($FontSize + 4));
    2022
     
    4143foreach($Points as $Index => $Item)
    4244{
    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'];
    4648  if($Points[$Index]['avg'] > $MaxValue) $MaxValue = $Points[$Index]['avg'];
    4749  if($Points[$Index]['avg'] < $MinValue) $MinValue = $Points[$Index]['avg'];
     
    5052  $AvgValue = $AvgValue + $Points[$Index]['avg'];
    5153}
    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'];
    5557
    5658// Generate polygon and recalculate y values to fit graph height
     
    126128  //imagestring($Image, 10, 40, 50, $TimeShift, $Black);
    127129 
    128   // Zobraz mìøítko Y
     130  // Zobraz měřítko Y
    129131  $VerticalLinesDistance = $Height / $VerticalLinesCount;
    130132  for($I=1; $I<=$VerticalLinesCount; $I++)
     
    136138
    137139  $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
    151142  $LastTextEnd = 0;
    152143  for($Time = $StartTime; $Time < $EndTime; $Time += $MajorTimeMarks)
     
    178169  $GenerationTime = floor((GetMicrotime() - $StopWatchStart) * 1000  ) / 1000;
    179170
    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);
    183186  //imagestring($Image, 2, 70, 20, 'Vygenerováno za '.$GenerationTime.' sekund', $Black);
    184187  //imagestring($Image, 2, 50, 30, 'Level: '.$Level, $Black);
    185188
    186   imagettftext($Image, $FontSize, 0, 70, 14, $Black, $FontFile, to_utf8($Measure['Description']));
     189  imagettftext($Image, $FontSize, 0, 70, 14, $Black, $FontFile, $Measure['Description']);
    187190  imagerectangle($Image, 0, 0, $Width - 1, $Height - 1, $Black);   // Frame border
    188191  imagepng($Image);
  • index.php

    r14 r28  
    6262
    6363      $Output .= ' <form style="display: inline;" action="?Operation=SetTimeNow&amp;Time='.$Time.'" method="post">';
    64       $Output .= '<input type="submit" value="Aktuální èas">';     
     64      $Output .= '<input type="submit" value="Aktuální čas">';     
    6565      $Output .= '</form>';
    6666     
     
    6868}
    6969
    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');
    7272
    7373$GrafTimeRanges = array(
     
    8585  ),
    8686  'month' => array(
    87     'caption' => 'Mìsíc',
     87    'caption' => 'Měsíc',
    8888    'period' => 3600*24*30,
    8989  ),
     
    111111  $_SESSION['TimeStart'] = $_SESSION['TimeEnd'] - $GrafTimeRanges[$_SESSION['Period']]['period'];
    112112}
    113 
    114113
    115114$Output = '<div class="Title">Statistiky</div>';
     
    142141 
    143142    }
    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>';
    152144    // Show graf time range menu
    153145    if($_SESSION['TimeSpecify'] == 0)
     
    157149        $Output .= '<a href="?Period='.$Index.'">'.$Item['caption'].'</a>&nbsp;';
    158150      $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>'; 
    160152    } else {
    161153      $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>';
    163155      $Output .= '<tr><td>Konec:</td><td>'.EditTime('TimeEnd').'</td></tr>';
    164156      $Output .= '</table>';
     
    168160
    169161$Output .= '<strong>Graf:</strong><br>';
    170 $Output .= '<img alt="Graf" src="graph.php?Measure='.$_SESSION['Measure'].'&amp;From='.$_SESSION['TimeStart'].'&amp;To='.$_SESSION['TimeEnd'].'&amp;Width=750&amp;Height=200" width="750" height="214"><br>';
     162$Output .= '<img alt="Graf" src="graph.php?Measure='.$_SESSION['Measure'].'&amp;From='.$_SESSION['TimeStart'].'&amp;To='.$_SESSION['TimeEnd'].'&amp;Width=750&amp;Height=200&amp;Differential='.$_SESSION['Differential'].'" width="750" height="200"><br>';
     163$Output .= '<a href="?Measure='.$_SESSION['Measure'].'&amp;TimeStart='.$_SESSION['TimeStart'].'&amp;TimeEnd='.$_SESSION['TimeEnd'].'&amp;TimeSpecify=1&amp;Differential='.$_SESSION['Differential'].'">Odkaz na vybraný graf</a><br>';
    171164//print_r(GetValues($Measure, $TimeStart, $TimeEnd));
    172165 
     
    174167
    175168$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>';
     170if(array_key_exists('Debug', $_GET)) $Output .= '<th>Počet položek</th><th>Čas vykonání</th>';
    178171$Output .= '</tr>';
    179172$Database->select_db('measure');
     
    203196  if($Measure['Info'] == '') $Measure['Info'] = '&nbsp;';
    204197  $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'].'&amp;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>';
    206199  if(array_key_exists('Debug', $_GET)) $Output .= '<td>'.$RowCount.'</td><td>'.$GenerationTime.'</td>';
    207200  $Output .= '</tr>';
    208201}
    209202$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>';
    211204//echo(time());
    212205//print_r(gd_info());
    213 $Output .= '<br><div style="font-size: small;">Kontakt: robie@centrum.cz</div>';
    214206$Output .= '</body></html>';
    215207//print_r($_SESSION);
     
    217209ShowPage($Output);
    218210
     211//echo(AddPrefixMultipliers('-0.000000071112345', 'B'));
    219212
    220213?>
  • stat_functions.php

    r16 r28  
    2222);
    2323
     24function 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
    2438function AddPrefixMultipliers($Value, $Unit, $Digits = 4)
    2539{
    2640  global $PrefixMultipliers;
    27   if($Unit == '') return($Value);
     41
     42  if($Unit == '') return(TruncateDigits($Value, $Digits));
    2843  $I = 8;
    2944  if($Value > 0) $II = 1;
     
    3449 
    3550  // 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);
    4552   
    4653  return($Value.' '.$PrefixMultipliers[$I][0].$Unit);
     
    94101    if($Measure['Continuity'] == 0) $Measure['ContinuityEnabled'] = 0;  // non continuous
    95102      else $Measure['ContinuityEnabled'] = 2;    // continuous graph 
    96   } else die('Mìøená velièina nenalezena');
     103  } else die('M��enďż˝ veliďż˝ina nenalezena');
    97104  return($Measure);
    98105}
     
    182189function ComputeOneValue($LeftTime, $RightTime, $Values, $Measure, $Level)
    183190{
    184   global $ValueTypes;
     191  global $ValueTypes, $Differential;
    185192 
    186193  $NewValue = array('min' => +1000000000000000000, 'avg' => 0, 'max' => -1000000000000000000);
     
    207214      if($ValueType == 'avg')
    208215      {
    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          }
    212225      }
    213226      else if($ValueType == 'max')
     
    219232        else
    220233        {
    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          }
    223241        }
    224242      }
     
    232250        else
    233251        {
    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          }
    236259        }
    237260      }
     
    241264  }
    242265  //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  } 
    244270  return($NewValue);
    245271  //echo($NewValue['avg'].'<br>');
Note: See TracChangeset for help on using the changeset viewer.