ACPapi používateľská príručka

Funkcia aplikačného rozhrania

Aplikačné rozhranie pre obsluhu protokolu ACP (ACPapi) slúži na uľahčenie prác programátorov pri tvorbe aplikácií, ktoré sú závislé na reálno-časových údajoch sieťovej prevádzky. Jej hlavnou funkciou je obsluhovanie protokolu ACP, ktorá umožňuje komunikáciu medzi Kolektorom a Analyzérom, pričom sa už o implementačné detaily prebiehania tejto komunikácie programátor nemusí starať. ACPapi je implementované v jazyku Java.

Celý proces získavania dát pomocou ACPapi sa dá znázorniť nasledovne:

ANALYZÉR < = (ACPapi) = > KOLKEKTOR < = EXPORTÉR < = SIEŤ

Aplikačné rozhranie tiež poskytuje výhodu ľahkej implementácie protokolu ACP v iných projektoch.

Súpis obsahu dodávky

Program je dodávaný na jednom inštalačnom CD médiu, ktoré obsahuje nasledujúce súčasti:

  • zdrojové súbory aplikačného rozhrania
  • súbor ACPapi vo formáte Java archive (jar), ktorý predstavuje aplikačné rozhranie
  • knižnice potrebné pre prácu s aplikačným rozhraním
  • dokumentáciu zloženú z:
    • bakalárskej práce (vo formáte PDF)
    • systémovej príručky (PDF)
    • tejto používateľskej príručky (PDF)
    • príručky špecifikácie protokolu ACP (PDF)
    • systémovej dokumentácie tried - javadoc vo formáte HTML

Inštalácia aplikačného rozhrania

Požiadavky na technické prostriedky

ACPapi spĺňa svoj účel až v spojení s nejakou aplikáciou, a preto, je ťažké predpokladať jeho technické požiadavky. Pre spoľahlivý beh samotného aplikačného rozhrania sa vyžaduje nasledovná hardvérová konfigurácia:

  • procesor s architektúrou i386
  • 128 MB operačnej pamäte (jej veľkosť závisí od množstva a rýchlosti spracovania prenesených dát)
  • 40 MB voľného miesta na pevnom disku
  • grafická karta novej generácie s minimálne 64MB pamäťou
  • sieťová karta 100Mbit/s

Požiadavky na technické prostriedky sa líšia v závislosti od množstva súčasne bežiacich meraní, počtu spojení s Kolektormi, zložitosti nastavených filtračných kritérií a spôsobe prijímania dát prostredníctvom ACPapi. Monitorovanie rozsiahlejšej siete (napr. sieť poskytovateľa komunikačných služieb) si vyžaduje podstatne väčšie hardvérové nároky (viď odôvodnenie v bakalárskej práci).

Požiadavky na programové prostriedky

  • ľubovoľný operačný systém s podporou Java Virtual Machine (JVM) (Windows XP/Server 2003/Vista, Linux alebo Solaris)
  • Java Runtime Environment (JRE) verzie 1.6.0 a vyššej
  • knižnica log4j-1.2.9.jar alebo vyššej (umožňuje zobrazenie log výstupov)

Závislosti aplikačného rozhrania

Aplikačné rozhranie umožňuje zrýchlené vyhodnocovanie dát sieťovej prevádzky, a preto bude implementáciou najvyššej vrstvy architektúry BasicMeter. Z toho vyplývajú jeho závislosti na moduloch, ktoré pracujú na prvej a druhej vrstvy spomínanej architektúry. Tieto moduly predstavujú:

  • Kolektor verzie 3.1 (JXColl 3.1)
  • Exportér (my\_beem)

Vlastná inštalácia

Aplikačné rozhranie si nevyžaduje inštaláciu ani preklad. Slúži na preportovanie protokolu ACP do aplikácií, ktorých funkčnosť je závislé na reálno-časových údajov. Z toho dôvodu jej samostatné použitie a spustenie je nemožné. Svoj účel spĺňa až v spojení výslednou aplikáciu, v ktorej budú použite funkcie poskytované ACPapim. Sprístupnenie funkcií aplikačného rozhrania je možné nakopírovaním súborov ACPapi.jar a log4j-1.2.9.jar dodávané na inštalačnom médiu na pevný disk (najlepšie do adresára aplikácie, v ktorej bude implementované) a pri preklade aplikácie následným nastavením parametrov classpath na tieto knižnice.

Použitie aplikačného rozhrania

Po nastavení referencií na knižnicu ACPapi a importovaní tried aplikačného rozhrania, jeho použitie spočíva vo volaní metód, ktoré sprostredkuje.

Popis dialógu s používateľom

Dialóg s používateľom závisí na návrhu a implementačných detailoch aplikácie v ktorej aplikačné rozhranie bude použité. Z toho dôvodu spôsob a forma dialógu sa prenechá na vývojárov alebo systémových programátorov spomínaných aplikácií. Aplikačné rozhranie je však možné použiť aj v konzolových, aj vo webových aplikácií, a zároveň v aplikáciach s grafickým rozhraním.

Popis správ pre systémového programátora

Počas behu aplikačného rozhrania sa vypisujú rôzne hlásenia od chybových až po informačné. Ich typ a popis je uvedený v nasledujúcej tabuľke. Každá úroveň zahŕňa v sebe aj úrovne na nižšom stupni.

Typ hlásenia Popis
DEBUG zobrazujú sa kompletné výpisy celého diania v programe
INFO program informuje o svojej činnosti a akcii, INFO ktorú práve vykonáva
WARN vypíšu sa informácie o upozorneniach programu na možné chyby alebo zlú interpretáciu vstupných dát
ERROR sú vypísané hlásenia chýb majúcich vplyv na dáta
FATAL hlásenia, ktoré sú pre beh programu smrteľné a zvyčajne znamenajú nezotaviteľnú chybu programu

Chybové hlásenia

Počas používania aplikačného rozhrania môže dojsť k neočakávaným chybám, ktoré sú uvedené nasledujúcej tabuľke:

Chybové hlásenie Situácia Riešenie
Wrong login or password. Authentication failed. Unknown message received. Nepodarilo sa pripojiť na Kolektor. Overiť autentifikačné údaje, a parametre pripojenia na Kolektor.
Not connected to collector. Počas posielania riadiacich správ sa spojenie s Kolektorom nenašlo Pravdepodobne niektorá strana prerušila spojenie. Treba sa znova pripojiť na Kolektor.
Not connected to collector. Počas posielania riadiacich správ sa spojenie s Kolektorom nenašlo Pravdepodobne niektorá strana prerušila spojenie. Treba sa znova pripojiť na Kolektor.
This message was not expected. Unknown reply message received. Chybové hlásenia ktoré sa môžu vyskytnúť pri čítaní odpovedí na riadiace správy Znovu poslať žiadosti prostredníctvom riadiacich správ.
Invalid source/destination IP address. Nesprávny formát zdrojovej/cieľovej IP adresy. Adresa musí byť zadaná v tvare A.B.C.D \ n. Parameter n nie je povinný.
Invalid port number. Invalid protocol number. Nesprávny formát zápisu zdrojových/cieľových portov alebo protokolu. Jednotlivé hodnoty musia byť oddelené čiarkami, hranice intervalov pomlčkou.
Invalid port range. Invalid protocol range. Nesprávny formát zápisu intervalu zdrojových/cieľových portov alebo protokolu. Jednotlivé hodnoty musia byť oddelené čiarkami, hranice intervalov pomlčkou.
Upozornenia
Cannot send unpause while transfer is not paused... Cannot send transfer type while transfer is paused... Template rejected! Filter rejected! Pause rejected! Unpause rejected! Unknown Transfer Type! V prípade odmietnutí žiadostí sa objavujú tieto upozornenia. Overiť správnosť a včasnosť žiadostí a znovu poslať.

Príklad použitia

V príklade použitia bude uvedený spôsob nadviazania spojenia a prijímanie údajov prostredníctvom metód aplikačného rozhrania. V príklade nie je uvedené zachytenie výnimiek.

Importovanie potrebných balíkov z aplikačného rozhrania:

import sk.tuke.cnl.bm.Filter;
import sk.tuke.cnl.bm.InvalidFilterRuleException;
import sk.tuke.cnl.bm.ACPapi.ACP;
import sk.tuke.cnl.bm.ACPapi.ACPException;
import sk.tuke.cnl.bm.ACPIPFIXTemplate;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger; 

Vytvorenie objektov, potrebných pre prácu s metódami aplikačného rozhrania:

// nastavenie šablóny, posielajú sa iba ich identifikátory
int[] fields = {ACPIPFIXTemplate.sourceIPv4Address, ACPIPFIXTemplate.destinationIPv4Address};
//vytvorenie objektu Filter
Filter filter = new Filter();
//nastavenie filtračných kritérií
filter.ACPCreateFilter("127.0.0.1","192.168.1.1", "192.168.1.2", "2345", "8080", "80");
//vytvorenie objektu ACP, ktorým sprístupníme jeho metódy
ACP acp = new ACP();
//nadviazanie spojenia s Kolektorom
acp.connectToCollector("127.0.0.1", 2138, "bm", "bm");
//poslanie šablóny
acp.sendTemplate(fields);
//poslanie filtračných kritérií
acp.sendFilter(filter.createSimpleFilter());
//nastavenie typu prenosu na -> po jednom
acp.sendTransferType(2);

Prihlasovacie údaje na Kolektor závisia od nastaveniach v configuračnom súboru, ktorý je s nim podávaní. Jeho štandardné nastavenia sú:

  • IP adresa alebo host, kde je Kolektor spustený
  • číslo portu - 2138
  • prihlasovacie meno - bm
  • heslo - bm

Každá z týchto hodnôt je ľubovolne nastaviteľná, o ktorom sa čítateľ može dozvedieť viac v príručkach patriace k programu JXColl, ktoré sú súčasťami bakalárskej práce.

Prijímanie údajov:

Nasledujúci úsek zdrojového kódu slúži ako návrhový vzor pre získavanie dát prostredníctvom protokolu ACP.

int temp = 0; // premenná na kontrolu počtu zvyšných hodnôt aktuálneho paketu
int respondMessageType;    // premenná pre id prichádzajúcej správy
log.info("Starting to receive data.");
while (!acp.isFinished()) {   // začiatok cyklu, kontrola stavu
    if (!acp.isPaused() || acp.getIsReceiving() == true) {//kontrola pozastavenie, 
                  //prijatia každej hodnoty z aktuálneho paketu
        respondMessageType = acp.getDatInStr().readInt(); //načítanie prijatej správy
        log.debug("Received Message type:" + respondMessageType);
        switch (respondMessageType) {
             case COL_DATA_MSG:      // správa s id 0 / nasledovať bude údaj(e)
                if (acp.getTransferType() == 1) { // typu dátového prenosu po n-ticiach
               acp.isReceiving(true);// zabezpečenie prijatia každej hodnoty z aktuálneho paketu
                    for (int k = 0; k < acp.getFieldsToReadACP().length; k++) { 
                        byte[] buff = new byte[60];
                        int c = acp.getDatInStr().read(buff); // načítanie dát
log.debug(ACPIPFIXTemplate.getnamebyID(acp.getFieldsToReadACP()[k])+":"+new String(buff,0,c));
                        acp.getDatOutStr().writeInt(5);        //potvrdenie prijatia dát
                    }
                    acp.isReceiving(false);
                }  else if (acp.getTransferType() == 2) { // typu dátového prenosu po jednom
                   temp++;
                acp.isReceiving(true);//zabezpečenie prijatia každej hodnoty z aktuálneho paketu
                    byte[] buff = new byte[60];
                    int c = acp.getDatInStr().read(buff); // načítanie dát
                    log.debug("Data received : " + new String(buff, 0, c));
                    acp.getDatOutStr().writeInt(5); //potvrdenie prijatia dát
                    if (temp == acp.getFieldsToReadACP().length) { // kontrola počtu zvyšných 
                           //hodnôt aktuálneho paketu
                        temp=0;
                        acp.isReceiving(false);
                    }
                }
                break;
            case COL_ANSWER_MSG:   // správa s id 1 / nasledovať bude údaj(e)
                acp.readCollectorAnswers(); //spracovanie prijatých odpovedí na riadiace správy
                break;
            default:         //neočakávaná udalosť
           throw new ACPException("Unknown message type received (" + respondMessageType + ").");
        } //switch
    } else {
        log.info("Paused ... sleeping X)");    // stav pozastavenia prenosu
        sleep(1000);
    } //if-else
} //while

-- Main.adrian_pekar - 19 May 2009

Topic revision: r1 - 19 May 2009 - 14:57:14 - adrian_5fpekar
 
This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback