IPfix Analyzer
( changelist)
Popis
Cieľom tohto projektu bolo vytvorit komplexnu triedu "CMultipasik" ktorá sa stará o vykresľovanie vo všobecnosti akychkoľvek hodôt v rôznych skupinách, mierkach a riadkoch obrazovky. Pre spravnu funkčnosť triedy je nutné mať vytvorené okno ncrursov s urcitou šírkou a výškou o čo sa stará trieda "NCursesWin". Trieda vykresľuje prietoky lokalnymi sieťovymi kartami v podobe grafických pásov.
Graficky element
Pred popisom samotných tried je nutné zadefinovať čo je to grafický element. Z tejto definície neskôr vychádzali všetky úvahy potrebné pre vnútornú realizáciu v programe. Každá hodnota sa na obrazovke zobrazuje v podobe grafického elementu:
======]
ktorý je daný:
- hodnota, ktorú zobrazuje
- maximálna zobraziteľná hodnota = rozsah
- grafická dĺžka daná počtom zobraziteľných znakov a je presne zadaná šírkou okna ktoré je vyhradené pre zobrazovanie
- grafický prvok (znak, farba pozadia, farba znaku, usporiadanie znakov ...) akým sa hodnota zobrazuje
Trieda ELEMENT
Trieda
ELEMENT obsahuje všetky hodnoty(referencie) potrebné na presné zadefinovanie grafického elementu popísaneho vyššie. Hodnota, ktorá sa na obrazovke zobrazuje je uložená v premennej
value a počas behu programu sa predpokladá že sa bude meniť. Čim je hodnota vyššia tym je grafický element zobrazený na obrazovke dlhší a naopak. Zmena tejto hodnoty nastáva pri nčítavani hodnôt vo funkcii
load_values. Maximálna zobraziteľná hodnota alebo tiež rozsah je hodnota ktorá sa viaže na viac(skupiny) elementov ktoré majú určité spoločné vlastnosti a preto je uložená v triede
GROUP a v triede
ELEMENT je uložená iba referencia na inštanciu triedy
GROUP ktorá môže byť spoločná pre rôzne elementy. Grafický prvok, ktorým sa hodnota zobrazuje budeme od teraz volať reprezentácia elementu, hodnoty ktoré reprezentujú daný element budú uložené v triede
ROE a trieda
ELEMENT bude taktiež obsahovať iba referenciu na danú inštanciu kedže viac elementov môžu býť reprezentované navonok rovnako.
Trieda ROW
Všetky elementy sú zotriedené do riadkov obrazovky. Riadky sú v pamäti reprezentované pomocou triedy
ROW a obsahujú vektor(jednorozmerné pole) elementov ktoré sa nachádzajú v danom riadku. V riadku sa nemôže nachádzať viac elementov s rovnakym menom a tktiež v okne nie je možné aby sa nachádzalo viac riadkov s rovnakým menom. Sú to ich primarne kľúče pomocou ktorých sa vyhľadávajú.
Trieda ROE
Ako už bolo spomenuté, každý element musí byť reprezentovaný - farbou, znakmi a ich usporiadaním. Na to slúži trieda
ROE ktorá uchováva jednotlivé reprezentácie elementov použité na zobrazovanie. Táto trieda je jednoznačne definovana trojicou hodnôt:
- color_duo - číslo ktoré obsahuje informáciu o farbe popredia a farbe pozadia. Toto číslo je v intervale (0;64>. 64 je maximalny počet farieb zobraziteľných pomocou ncurses. Pre zakódovanie informácie farby popredia a pozadia do jej identifikátora slúži makro s parametrami COLOR_DUO. Pre rozkódovanie danej informácie slúži dvojica makier BC (backgroud color) a FC (foreground color). Vo všeobecnosti platí že: x = COLOR_DUO(BC(x),FC(x))
- foreground_char - znak ktorý slúži na vykresľovanie grafického elementu po celej jeho dĺžke
- finally_char - znak ktorým je grafický element ukončený
Trieda GROUP
Ako už bolo spomenuté elementy sa členia nie len do riadkov ale aj do skupín. Zpravidla môžu aj elementy v rôznych riadkoch patriť do tej istej skupiny a elementy v jednom riadku môžu patriť do rôzných skupín.
Elementy tej istej skupiny majú určité spoločné vlastnosti:
- rozsah - tato hodnota určuje maximálnu zobraziteľnú hodnotu a automaticky sa upravuje tak, aby bolo možné zobraziť aj najvyššiu hodnotu v danej skupine elementov (upravuje sa vzdy na hodnotu maximalnej hodnoty v skupine, nasäť sa už neznižuje)
- posun minima - posúva spodnú hranicu od ktorej sa budú elementy v skupine zobrazovať
- posun maxima - posúva vrchnú hranicu po ktorú sa budú elementy v skupine zobrazovať
Trieda CMultiPasik?
Tato trieda zabezpecuje načítavanie hodnôt a vykreslovanie celeho okna (rozsah, jednotlive riadky...). Celý tento proces prebieha v niekoľkých hlavných krokoch, ktore sa neprestajne opakujú:
- načítanie hodôt - zabezpečuje funkcia load_values a hodnoty potrebne na vykreslenie ziskava pomocou externeho programu iftop ktoré potom uloží do štruktúr podľa toho ako to ma zadefinované
- vykreslenie obrazu - zabezpečuje funkcia update_display a okrem jednotlivých riadkov vykresľuje aj hlavičku okna a rozsah merania. Princíp celeho vykresľovania jednotlivych riadkov spočíva v tom že každý bod obrazovky sa vykreslí iba raz ale predtým sa presne určí farba popredia, farba pozadia a znak ktorý sa má vykresliť.
Class Diagram
Nasledujuci class diagram zobrazuje prepojenie väzbami spomenutých tried
Zaver
Počas tohto semestralneho projektu sa podarilo vytvoriť triedu
CMultipasik ktorá dokáže zobrazovať hodnoty na obrazovke v podobe grafických elementov. Pri tvorbe tejto triedy sme použili návrh z predosleho semestralneho projektu, ktorý sice nebol objektovo orientovaný, ale dokázal poskytnúť dostatočný odrazový mostík pre tento projekt. Pôvodý kód prešiel mnohými úpravami. Jazyk C++ nám oproti jazyka C poskytol mnoho výhod ako je zapúzdrenie do tried, preťažovanie operátorov, STL atd... Oproti povodnému návrhu v jazyku C pribudli aj zmeny ako triedenie elementov do skupín, zobrazovanie elementov v rôzných rozsahoch a ine. V nasledujucom semestri je nutné popracovať na:
- interakcii s užívateľom - odchytavanie a spracovanie kláves
- načítavanie hodôt - vyriešiť načítavanie hodôt pravdepodobne cez zdieľanú pamäť
--
StanislavLiska - 16 Oct 2007