Author: JirkaM Date: 2010-02-25 17:53:36 +0100 (Thu, 25 Feb 2010) New Revision: 1878 Modified: others/dokumentace/technicalGuide/architecture/4webapp.tex Log: * second part of statistics modified 4webapp.tex Modified: others/dokumentace/technicalGuide/architecture/4webapp.tex =================================================================== --- others/dokumentace/technicalGuide/architecture/4webapp.tex 2010-02-25 16:45:06 UTC (rev 1877) +++ others/dokumentace/technicalGuide/architecture/4webapp.tex 2010-02-25 16:53:36 UTC (rev 1878) @@ -219,6 +219,7 @@ \item{Typy grafů}-požadavkem bylo zobrazení tří základních typů grafů, čárový, sloupcový, koláčový. \end{itemize} +\subsection{Výběr nástroje pro generování výstupu} V prvotních fázích projektu jsme zvažovali implementaci vlastního nástroje pomocí jazyka Java, kde bychom si na serveru vygenerovali grafický výstup a u klienta zobrazili pomocí HTML. Vzhledem k pracnosti jsme se však poohlédli po již hotovém řešení. Nejdříve jsme hledali pouze open-source řešení, ale při přijatelných cenách placených projektů jsme do celkového výběru zahrnuli i je. Následující seznam uvádí hlavní nástroje, ze kterých jsme vybírali: @@ -229,6 +230,7 @@ \end{itemize} Hledali jsme samozřejmě v daleko širším spektru produktů, výše uvádíme pouze produkty, které nás nejvíce zaujaly. Naší volbou se stala knihovna Anychart, jejíž grafové výstupy jsme shodnotili jako nejdokonalejší. Kromě toho nabízí také velké množství typů grafů, široké možnosti nastavení samotného grafu prostřednictvím konfiguračního souboru a dobrou interkativnost. +\subsection{Komunikace s Anychart} Anychart fungují jako samostatný soubor Flash, který je vložen do Html stránky. Konfigurace této aplikace probíhá pomocí XML dokumentu, ve kterém se nastavují všechny potřebné atributy. Níže uvádím přehled nejdůležitějších nastavení pro konfigurační soubor: \begin{itemize} \item{chart\_settings}- skupina nastavení určující atributy jako titulek, barvu pozadí, popisky na jednotlivých osách, zobrazení ikon, definici legendy a mnoho dalších nastavení týkajících se celého výstupu. @@ -236,15 +238,42 @@ \item{data}- samotná data pro vygenerování průběhu grafu, případně pro velikost sloupců či částí koláčových grafů. Zde jsou jednotlivé čáry popisovány pomocí tzv. serií, kde pro každou sérii je definován její průběh v závislosti na časové ose. \end{itemize} Tento konfigurační soubor je generován v závislosti na vybraném typu grafu, časovém období a typu zobrazení ( seznam kiosků společnosti, seznam dokumentů na kiosku, seznam kiosků pro daný dokument). +Vygenerování výstupu statistik probíhá v následujících krocích: +\begin{itemize} + \item{Získání dat dle parametrů} - v závislosti na zvolených parametrech jsou z databáze načteny data pro výstup. + \item{Převod dat do konfiguračního souboru} - pomocí třídy AnyChartXMLHandler jsou data z databáze převedena na formát pro vstupní soubor. + \item{Předání dat Flash objektu} - výsledný výstup z předchozího bodu je předán objektu Anychart flash, který zajistí korektní zobrazení. Implementace tohoto objektu nebyla součástí projektu. Při předávání výstupu jsme zvažovali ukládání dat do strukturovaně pojmenovaného souboru, abychom pracně získaná data nemuseli generovat znovu. Cachování výsledků jsme zavrhli z následujících důvodů: + \begin{itemize} + \item Uživatel si nevolí stejná časová období, téměř vždy dochází k tomu, že časové období je jiné. + \item Vygenerovaný výsledek nemusí být vždy aktuální a může se měnit, pokud se zajímáme o data v posledních okamžicích. + \end{itemize} +\end{itemize} +\subsection{Optimalizace a rozvoj} +Data získaná z jednotlivých kiosků se nyní ukládají do jedné tabulky v databázi MySQL. V budoucnu, kdy počet kiosků bude v řádech stovek, může dojít k tomu, že rychlost dotazů na výpis statistik začne klesat. Zrychlení bychom mohli dosáhnout následujícími způsoby: +\begin{itemize} + \item Rozdělit data, např. pro každou společnost, případně kiosek vytvořit samostatnou databázi, nad kterou bych dotazy vykonávali rychleji. + \item Použít jiný typ databáze. MySQL není primárně určeno pro vyhledávání v obsáhlých datech. Např. použitím PostreSQL databáze. +\end{itemize} - %%%%%%%%%%%%%%%%%%%%%%%%%% %% Reporty %%%%%%%%%%%%%%%%%%%%%%%%%% \section{WebServer2 - Reporty} +Reporty slouží uživateli k zobrazení intervalů vyvěšení dokumentů na konkrétním kiosku. Hlavním požadavkem reportů bylo korektní a vizuálně přehledné zobrazení daných intervalů. +\subsection{Výběr vhodného nástroje} +Před začátkem samotné implementace jsme se poukoušeli nalézt podobné nástroje, jak pro možnost použití, tak pro motivaci při tvorbě. +Co nás nejvíce zaujalo, byl produkt ze stejné série jako nástroj Anychart a to produkt AnyGantt. Nabízí stejnou funkcionalitu, jakou jsme požadovali od výstupu reportů, spolu s velkým množstvím dalších funkcí. +Konečným rozhodnutím při analýze ostatních nástrojů bylo vytvořit vlastní jednoduchý a hlavně přehledný výstup pomocí základních HTML prvků, který bude lehce upravitelný dle aktuálních požadavků. +\subsection{Implementace výstupu} +Hlavní problém, který jsme řešili při generování výstupů, bylo jejich korektní zobrazení v případě tisku. Požadovali jsme barevné odlišení jednotlivých intervalů v rámci časové osy, čehož se nám pomocí stylování elementů, resp. nastavení barvy pozadí, nepodařilo dosáhnout, jelikož pro tisk stránky včetně barvy pozadí pomocí prohlížeče je třeba dalšího nastavení, které by uživatele mohlo odradit. Jako řešení jsme zvažovali následující možnosti: +\begin{itemize} + \item{Generovaní obrázku na straně serveru} - obrázek bude vygenerován přímo ve webové aplikaci pomocí knihovny javy na straně serveru a předán stránce jako hotový výstup. + \item{Sestavení intervalů z html elementů} - stránce budou předány parametry pro vykreslení intervalů v rámci časové osy. Tyto intervali budou zobrazeny jako obrázek, kterému je nastavena délka dle délky intervalu. +\end{itemize} +Kvůli požadavku na javascriptovou interakci bylo zvoleno druhé řešení, díky kterému bylo možno označit intervaly a napojit na ně javascriptové chování. %%%%%%%%%%%%%%%%%%%%%%%%%% %% Plánování