Università degli Studi di Napoli Federico II Facoltà di Scienze MM.FF.NN. Corso di Laurea in Informatica Tesi Sperimentale di Laurea Triennale Realizzazione di un sistema per la storicizzazione dei dati di un database Round-Robin Relatori Candidato Prof. Guido Russo Dr. Domenico Del Prete Pasquale Catalano Matricola: 566/2323 Anno accademico 2009/2010 Desidero ringraziare... il Prof Guido Russo per avermi consentito di svolgere questo lavoro di tesi, e per la sua piena disponibilità, tutti i miei colleghi che ho conosciuto durante il percorso di studio e tutte le persone a me care, che hanno creduto in me. Indice generale Introduzione....................................................................................................................................1 1 Data Center Atlas.........................................................................................................................3 1.1 Struttura Del Data Center..........................................................................................................3 1.2 Il Tier2-Napoli...........................................................................................................................6 1.2.1 Apparati del Data Center............................................................................................6 2 Studio, Esempio, Critica sui sistemi esistenti............................................................................8 2.1 SSB Site Status Board................................................................................................................8 2.2 Critica Portale SSB..................................................................................................................10 2.3 Job Monitoring.........................................................................................................................13 2.4 Analisi Interfaccia Web Job Monitoring..................................................................................14 3 Portale di monitoraggio utilizzato dal Tier2............................................................................18 3.1 Organizzazione Dei Contenuti E Dei Servizi..........................................................................19 3.2 La Struttura A Componenti......................................................................................................20 3.3 Enterprise Information Portal: Liferay....................................................................................23 3.4 Portlet WebContent E Iframe...................................................................................................26 3.5 Il Portale Del Tier2-Napoli......................................................................................................29 4 Software di Monitoraggio utilizzati dal Data Center...............................................................34 4.1 Analisi Dello Strumento Per Il Monitoraggio Della Rete........................................................34 4.1.1 Il Collezionamento dei dati.......................................................................................37 4.2 Il Modello Di Storicizzazione Dei Dati...................................................................................40 4.2.1 RRD: Round Robin Database...................................................................................40 4.2.2 RRDTool....................................................................................................................40 4.2.3 Le Caratteristiche di utilizzo di RRD.......................................................................45 4.2.3.1 Create .....................................................................................................................45 4.3.2.2 Fetch.......................................................................................................................46 4.2.2.3 Graph......................................................................................................................47 4.3 Analisi Applicazione Nagios....................................................................................................52 4.3.1 Interfaccia Web utilizzata........................................................................................53 5 Sviluppo del Sistema................................................................................................................54 5.1 Strumenti Utilizzati..................................................................................................................54 5.1.1 Strumento per la gestione e visualizzazione dei grafici..........................................54 5.1.2 Interfaccia di supporto della Connessione al Database...........................................58 5.1.3 Storicizzazione dei Dati: MySql...............................................................................60 5.2 Progettazione Database............................................................................................................63 5.2.1 Gestione dei dati del Database.................................................................................68 5.3 Diagrammi UML.....................................................................................................................69 5.3.1 Fase di Analisi...........................................................................................................69 5.3.2 Fase di Design ..........................................................................................................75 5.3 Funzionalità Offerte Dal Sistema.............................................................................................81 5.3.1 L'operazione di popolamento del Database.............................................................82 5.3.1.1 File di Configurazione dell'applicazione................................................................83 5.3.1.2 File di supporto per le relazioni del Database........................................................84 5.3.1.3 Il Parser sviluppato.................................................................................................86 5.4.2 L'interfaccia Utente...................................................................................................88 6 Risultati Ottenuti.......................................................................................................................91 7 Conclusioni................................................................................................................................95 Appendice A.................................................................................................................................97 Appendice B...............................................................................................................................112 Appendice C...............................................................................................................................117 Sitografia.....................................................................................................................................118 Bibliografia.................................................................................................................................120 Introduzione Il lavoro di tesi in esame mostra una soluzione su come poter manipolare e rappresentare le informazioni provenienti da sistemi di monitoraggio già esistenti, integrandole in un portale web. L'informazione analizzata nel progetto sviluppato, proviene dagli apparati che vanno a costituire un Data Center, in particolare il Data Center ATLAS. Nello specifico saranno esaminati dati che fanno riferimento a valori di controllo dei servizi di determinati dispositivi, quali: Worker Node, Storage Element, Router e Switch. Per valutare correttamente lo stato di un sistema, è necessario dunque considerare i seguenti fattori: gestione, manutenzione ed evoluzione del sistema stesso. Il monitoraggio consente di controllare diversi aspetti del funzionamento di un dispositivo, svolgendo un ruolo di primaria importanza per la vita e sviluppo del sistema stesso. Un sistema di monitoraggio è un apparato che permette di controllare computer e risorse di rete, fornendo delle misure a intervalli di tempo regolari con il fine di attribuire uno stato ad un servizio monitorato. Con l'accrescere della complessità delle reti, determinate da un aumento delle macchine e degli apparati che le compongono, sono stati prodotti negli anni sistemi che concedono di monitorare ad hoc servizi di tali reti. Questi sistemi sono costituiti in maniera tale da mantenere le informazioni monitorate, permettendo all'utente che si va ad interfacciare una rappresentazione grafica dei dati. Il limite di questi framework già esistenti è quello di non poter usufruire a pieno delle misure che vengono immagazzinate durante il monitoraggio, perché non possono essere trattate in modo tale da fornire al consumatore indicazioni che sarebbero più appropriate al suo fabbisogno. Infatti prima della mia attività di tirocinio, le informazioni non erano gestite in modo tale da poter avere delle relazioni e inoltre non si potevano eseguire operazioni di personalizzazione sui dati collezionati dettate dalle esigenze del fruitore dei servizi. Pasquale Catalano 566/2323 Pagina 1 di 121 Nella tesi in esame proponiamo una soluzione a tale problema avvalendoci di un approccio costituito dalle seguenti fasi: • prelevare i dati dai framework ogni quanto di tempo • immagazzinare le informazioni in una base di dati, in modo tale da avere uno storico di tutti i dati riguardante lo stato dei servizi monitorati • interrogare la base di dati in funzione delle esigenze del consumatore • integrare i risultati ottenuti in un portale web L'obiettivo di questo approccio è quello di fornire un feedback immediato all'utente, che gli consenta di avere risultati finalizzati ad essere chiari, di rapida comprensione e di caratterizzarli in base ai propri utilizzi. Infine, si fa impiego di una tecnica di presentazione delle informazioni acquisite mediante una rappresentazione grafica, con l'obiettivo di agevolare la ricerca e il ragionamento, comunicando all'utente indicazioni che non sarebbero altrettanto offerte se si facesse utilizzo di una descrizione tabellare o testuale. Pasquale Catalano 566/2323 Pagina 2 di 121 1 Data Center Atlas 1.1 Struttura del Data Center Il modello generale di calcolo per l’analisi dei dati provenienti dagli esperimenti che adottano l'acceleratore di particelle LHC è basato sul paradigma di GRID Computing, attraverso un modello gerarchico organizzato in livelli detti Tier che permettono una forte decentralizzazione ed una condivisione a livello mondiale delle risorse computazionali. I dati grezzi in uscita dall'esperimento sono messi insieme, grazie ad una Event Filter Farm risiedente al CERN, in uno stream per poi essere inviati al Tier0. Il Tier0 è collocato al CERN; a questo livello si effettua la produzione dei dati da essere mandati ai Tier di livello inferiore. La composizione dei dati avviene nel seguente modo: una prima fase di calibrazione e allineamento dei dati provenienti dall'acceleratore effettuando, quindi, una prima ricostruzione per poi essere inviati al Tier1. Il Tier1 è situato in regione, dove per regione si intende un agglomerato di organizzazioni disposte su più nazioni. Ad ogni Tier1 sono associati alcuni Tier2, spesso in base a esigenze di carattere geografico, ai quali vengono trasferiti sottoinsiemi dei dati rielaborati, per renderli disponibili all'analisi da parte dell'utente. Questo livello ha il compito di immagazzinare a tempo indeterminato una porzione dei dati grezzi, sui quali si effettuano procedimenti di allineamento, calibrazione e ricostruzione delle informazioni avvalendosi di algoritmi più efficienti rispetto al Tier superiore. Dopodiché inoltra i risultati distribuendoli ai Tier2. Il Tier2 è disposto a livello nazionale, infatti raduna organizzazioni all'interno della stessa nazione. Il loro compito è quello eseguire job di analisi e simulazione sui dati, trasferendo il risultato in uscita ai Tier3 se richiesto. Ogni Tier1 con i rispettivi Tier2 vanno a creare una Federazione denominata Cloud; quella italiana ha nel CNAF (Centro Nazionale per la Ricerca e Sviluppo nelle Tecnologie Informatiche e Telematiche) di Bologna il suo Tier1, mentre nelle sedi Pasquale Catalano 566/2323 Pagina 3 di 121 dell'Istituto Nazionale di Fisica Nucleare di Milano, Roma, Napoli e Frascati i suoi Tier2. Il Tier3 dislocato a carattere locale, risulta essere il livello più basso della gerarchia, composto dai singoli istituti o dipartimenti. Risulta essere il luogo dove avviene fisicamente l'analisi dei dati. È importante dire che ciascun Tier mantiene una copia dei dati che ha trattato in modo tale da utilizzarli come esempio per le successive elaborazioni o consente di recuperarli al livello successivo se necessario. Figura 1: Struttura a Tier di ATLAS Le informazioni utilizzate da i vari Tier sono organizzati mediante una gerarchia, che segue il cosiddetto Event Data Model: parte dai dati grezzi in output dall'acceleratore LHC, arriva ai dati da elaborare nei singoli siti. Vengono elencati i nomi con relativa descrizione, del tipo di dato che un'informazione può assumere durante il trasferimento ai vari Tier: Pasquale Catalano 566/2323 Pagina 4 di 121 • Raw Data: sono le misure grezze in uscita dal Trigger; esse sono trasferite dal Tier0 al Tier1. • EDS (Event Summary Data): misure in uscita dalla ricostruzione. Essi vanno a rappresentare i percorsi delle particelle, le collisioni e tutto ciò che riguarda l'interazione tra le particelle nell'acceleratore. • AOD (Analisys Object Data): sono un tipo ridotto degli ESD, è il formato pubblico dei dati da elaborare. Descrivono le singole particelle. • DPD (Derived Physicl Data): rappresentano il tipo di dato privato utilizzato esplicitamente nei centri di calcolo. Risultano essere un formato ridotto degli AOD. Figura 2: Gerarchia dei dati con le relative dimensioni Attraverso l'impiego di determinati insiemi di software e middleware viene gestita la comunicazione ai dati, con la finalità di consentire ai membri dell'organizzazione l'uso e l'analisi delle informazioni indipendentemente dal luogo geografico in cui si trovano. Al termine, quindi per fare sì che l'acceleratore funzioni in modo esatto, oltre a tutte le apparecchiature coinvolte c'è la necessità di una collettività che lavori sia fisicamente al Cern, sia in altre nazioni che contribuiscono ai vari esperimenti distribuiti attraverso il modello gerarchico a Tier. Pasquale Catalano 566/2323 Pagina 5 di 121 1.2 Il Tier2-Napoli In generale i Tier2 forniscono capacità di analisi per gruppi e sottogruppi, questo vuol dire che devono garantire un'infrastruttura di calcolo che sia in grado di sostenere un'attività multiutente, in cui molti utenti eseguono operazioni computazionalmente impegnative, che richiedono una risposta in tempi flessibili. Oltre alla potenza di calcolo, un centro Tier2 dovrà fornire anche risorse per lo storage in grado di ospitare le informazioni assegnate, che si propongono in file di formati differenti, in funzione alla tipologia e alla quantità d'informazione racchiusa. I Tier2, inoltre, devono farsi carico di tutta la capacità di simulazione essenziale all'esperimento e i dati prodotti sono generalmente mandati ai Tier1 di riferimento, dove saranno resi disponibili per tutti gli altri siti che ad esso fanno capo. Per poter compiere tutti questi compiti è di fondamentale necessità che la struttura del Tier2 sia completamente accessibile attraverso gli strumenti Grid standard e che inoltre il centro dovrà essere operativo con la maggior durata possibile, andando a minimizzare i periodi di non operatività dovuti a problemi di guasti o manutenzione. A Napoli all'interno del complesso universitario di Monte S. Angelo della Federico II e' situato il Tier2-Napoli posizionato in due sale quali: il capannone realizzato per il progetto S.C.o.P.E e una sala della sezione del INFN. 1.2.1 Apparati del Data Center Al fine di comprendere meglio le attività previste dal Tier2, risulta essere vantaggioso andare ad illustrare i servizi e gli apparati fondamentali. Ogni Virtual Organizzation1 fornisce delle Grid, un'insieme di risorse interconnesse 1 Insieme dinamico di individui o istituzioni che rispettano regole e condizioni per la condivisione di risorse a prescindere dalla locazione geografica Pasquale Catalano 566/2323 Pagina 6 di 121 attraverso la rete internet. In ogni sito appartenete al Tier2 sono sistemate delle farm2 costituite da macchine che risultano essere differenti in merito alle loro funzionalità; alcune sostanzialmente concedono capacità di calcolo altre di storage. – User Interface (UI): Costituiscono il punto di accesso alla Grid. È rappresentata da un calcolatore dove tutti gli utenti posseggono un account personale, in cui risiede il proprio certificato che consente l'interazione con le funzionalità della Grid. Grazie all'UI un utente può essere autenticato e abilitato all'uso di risorse, permettendolo di far sottomettere le proprie applicazioni(job), gestendo l'esecuzione, ricavandone i risultati – Computing Element (CE): Rappresentano l'interfaccia Grid verso una farm, realizzata attraverso dei nodi di calcolo denominati Worker Node. Gestiscono i job di calcolo mediante il batch-queue system. I Worker Node sono nodi di una farm, chiamati computer off-the-shell, i quali offrono soltanto CPU e connettività senza periferiche di I/O né di memoria di massa(garantita dall'uso dello Storage Element ) – HRL: servizio per l'accounting per l'utilizzo delle risorse risorse di calcolo da parte delle Virtual Organizzation – Risorse di Storage: Sono dispositivi con il compito di conservare i dati da elaborare. Essi sono collegati agli altri mediante dei canali di fibra ottica dedicata e sono gestiti attraverso vari server denominati Storage Element. Uno Storage Element è un servizio che consente ad utenti o applicazioni di immagazzinare dati per usi futuri. Le informazioni di un SE sono read-only; non possono essere modificati, ma solo cancellati o sovrascritti. Il tipo di Storage utilizzato dal Tier2 di Napoli è SRM (Storage Resource Manager), un'interfaccia verso diverse risorse di storage gestite da più server. 2 Intendiamo una serie di dispositivi distinti, che forniscono particolari servizi alla grid, ed hanno delle particolari caratteristiche hardware e software. Pasquale Catalano 566/2323 Pagina 7 di 121 Figura 3: Schema Tipico di un sito Grid 2 Studio, Esempio, Critica sui sistemi esistenti Nel presente capitolo sono presentati diversi sistemi impiegati dai vari Tier per il monitoraggio e presentati alla conferenza di luglio 2010 tenuta al Cern di Ginevra. Sono stati oggetti di studio i seguenti: SSB Site Status Board, Job Monitoring. 2.1 SSB Site Status Board Il Site Status Board è un sistema che fornisce una visione dello stato secondo le attività previste, come il trasferimento di dati di produzione e analisi. Il suo obiettivo principale e' quello di avvalersi di un monitoraggio ad alto livello e che permetta di osservare, quando si presentano problematiche del sistema, in una sola pagina piuttosto che muoversi tra monitoraggi di differenti attività ADC quali: Dataprocessing, trasferimento dati, …, collocati in diverse pagine. Tale sistema è costituito da due attributi fondamentali: Viste e Metriche. La vista è una raccolta di metriche; la metrica riporta lo stato di ciascun sito con l'impiego di determinati sensori. Inoltre la metrica è definita da fonti di dati ricevuti dal Pasquale Catalano 566/2323 Pagina 8 di 121 sensore. Figura 4: Attributi SSB Viene riportato un esempio di vista utilizzata dal sistema caratterizzata dalle seguenti metriche: • DDM 4h - Descrive l'attività di trasferimento dei dati durante le ultime 4 ore. Il valore del sensore è la percentuale di file trasferiti correttamente, tenendo conto solo dello spazio MCDISK, DATADISK e DATATAPE per l'invio e il trasferimento ricevuto. • SRM SAM 12h - Descrive il SRM SAM test di risultati per le ultime 12 ore. • DataProc - Descrive lo stato dei siti in materia di trattamento dei dati. Il valore rappresenta l'efficienza del sito. • Panda exclusion - Sito code stato panda. I valori possibili sono "online", "test","Offline" e "brokeroff". • DDM status - i siti inclusi/esclusi dai servizi del sito. I valori possibili sono "online" "Lista nera". • Downtime - indica se il sito è schedulato, i tempi di inattività più o meno. Pasquale Catalano 566/2323 Pagina 9 di 121 Nell'esempio sopra citato, uno specifico sito può assumere uno stato il cui valore dipende dalle dimensioni assunte dalle metriche coinvolte. La lista dei valori che ad un sito viene attribuito sono: • Stato Ok • Stato Allarme: dovuto dal fatto che una delle metriche è in allarme • Stato Guasto: dovuto dal fatto che una delle metriche è guasta. La misura rappresenterà il numero di ore in cui il sito è in errore assumendo tre possibili valori (meno di 12 ore, tra 12 e 72, più di 72 ore) • Stato Manutenzione • Stato Investigazione Dopo aver descritto l'elenco delle metriche che vengono utilizzate, tali da comporre una particolare vista del sistema e degli stati possibili in cui si possa ritrovare un sito monitorato dal SSB, viene presentato uno studio di analisi del portale di riferimento. 2.2 Critica Portale SSB Il portale del Site Status Board si presenta con una homepage strutturata in modo da mettere in evidenza una netta suddivisione della pagina in due grosse aree. Figura 5: Menù principale portale SSB La prima riguardante il menù principale costituito dalle voci Index, Expanded Table, GridMap, Alternative views, Admin, Atlas Ssb Instruction, Ask the Atlas SSB people. Esso si sviluppa orizzontalmente consentendo di raggiungere la maggior parte delle pagine, fornendo all'utilizzatore finale una buona e immediata navigabilità. Pasquale Catalano 566/2323 Pagina 10 di 121 Figura 6: Porzione della mappa riguardante i siti italiani con legenda annessa La seconda area fa riferimento ad una mappa contenete gli stati che assumono i vari siti disposti nelle rispettive sezioni del Tier 0/1 e Tier 2, raggruppati per nazionalità di appartenenza. Questo comporta un disorientamento all'utente che accederà per la prima volta al portale. La mappa è costituita da una barra superiore che consente di far espandere o di ridurre il suo contenuto informativo, composto da un elenco di coppie (stato, sito). Si nota che il valore assunto dallo stato è rappresentato mediante un' immagine, di conseguenza nella homepage è presente nella parte inferiore una legenda molto dettagliata, con lo scopo di dare informazioni precise sul significato delle icone raffiguranti lo stato di un sito. Avvalendosi la legenda di determinati colori e di accurate immagini fa sì che il portale risulti comprensibile e coerente al consumatore che si andrà ad interfacciare. Trattiamo con particolare attenzione le seguenti pagine: Alternative view, Expanded Table. Facendo accesso alla sezione Alternative view appare una schermata contente: una tabella riportando la lista completa delle viste esistenti con informazioni relative alle metriche che le compongono e un'altra contenete tutte le metriche definite all'interno del sistema. Da notare che nel portale le metriche vengono definite con il nome di colonne critiche. Questo permette ad un' utente più esperto e qualificato di scegliersi quale vista Pasquale Catalano 566/2323 Pagina 11 di 121 andare ad osservare e cliccando sul link si viene indirizzati ad una pagina che racchiude informazioni sulle metriche, presentate mediante una rappresentazione grafica. Tale rappresentazione presenta contenuti che fanno riferimento a tutti i siti coinvolti nel monitoraggio, cliccando su quello interessato si accede ad una pagina che racchiude informazioni ben dettagliate. Figura 7: Rappresentazione grafica per la metrica DDM 12h Esempio: supponiamo di aver scelto la metrica DDM 12h, cliccando l'area relativa al sito interessato, accediamo ad una pagina contente dati del tipo: dati trasferiti, trasferimento completo di file e numero totale di errori nel trasferimento. Ritornando al grafico, il periodo temporale a cui si riferisce può essere modificato attraverso un menù a tendina consentendo una personalizzazione in funzione dell'esigenza del consumatore: 24h, 48h, ultima settimana, ultimo mese. In più per dare una maggiore chiarezza, le informazioni del grafico possono essere filtrate in base alla categoria di appartenenza del sito quale: Tier 0, Tier 1, Tier 2. Pasquale Catalano 566/2323 Pagina 12 di 121 Dal menù principale del portale cliccando su Expanded Table si accede alla rispettiva schermata che presenta: una lista che include, per ciascun sito osservato, misure delle seguenti metriche: SRM SAM 12, DataProc, panda exclusion, DDM status, DDM 4h, Scheduled Downtime. Il valore della metrica presente all'interno della lista, viene evidenziato grazie all'uso di colori, verde e rosso, assicurando al consumatore una buona interpretazione iniziale della misura. Cliccando sul nome del sito si raggiunge una pagina con informazioni riguardanti solo le colonne critiche attraverso un diagramma. Come già citato nella sezione descritta precedentemente, si può scendere a un livello di maggior dettaglio sulle informazioni e inoltre andare a personalizzare i dati ottenuti in funzione delle proprie esigenze attraverso delle ricerche che fanno ausilio di filtri. In conclusione nel complesso si può affermare che il portale presenta una struttura, consentendo all'utente di muoversi con estrema facilità e presentando i contenuti con rappresentazioni chiare e comprensibili. 2.3 Job Monitoring Il Job Monitoring è un sistema di monitoraggio di job per analisi utenti. Il suo obiettivo è quello di avere un quadro completo dei job ATLAS indipendentemente dalla presentazione di strumenti e backend in esecuzione; fornisce una visione chiara e precisa dello stato delle attività, compresa la distribuzione dei job da siti e utilizzo di trame grafiche avanzate dando un' interfaccia più usabile e interessante per l'analisi degli utenti. Avvalersi di tale sistema consente di: monitorare facilmente le attività di analisi utilizzando un'interfaccia web semplice da usare e da navigare, ricevere aggiornamenti in tempo reale, velocità di latenza molto bassa e avere uno sviluppo guidato e focalizzato sulla prospettiva dell'utente. In più offre una vista storica ossia una evoluzione delle metriche di elaborazione dei processi in funzione del tempo (numero dei job, tasso di successo, codici di errore, ecc...). Con questa vista vengono visualizzate informazioni riguardanti: • Distribuzione dei job in funzione dello stato (esecuzione, attesa, terminato), del tempo , dell'attività. Pasquale Catalano 566/2323 Pagina 13 di 121 • Distribuzione della CPU in funzione del tempo, del sito, delle attività. • Distribuzione di eventi trattati in funzione del tempo, del sito, delle attività. In sintesi il sistema acconsente di unire le informazione di tutti i job fornendo un punto unico di entrata per il monitoraggio di tutti i job ATLAS indipendente dal metodo di sottomissione dei job o presentazione della piattaforma middleware. La visualizzazione Web permette una navigazione intuitiva partendo da una visione globale per arrivare ad una dettagliata, che terrà conto delle esigenze delle diverse categorie di utenti. È un'attività di monitoraggio che concede la possibilità di una visione specifica dei compiti dell'utente, compresi gli strumenti diagnostici di fallimento. Ora viene riportato un lavoro di analisi effettuato sull'interfaccia web che presenta tale sistema di monitoraggio. 2.4 Analisi interfaccia web Job Monitoring L'interfaccia web si presenta con una pagina iniziale ricca di informazioni suddivisa in più sezioni. In alto un menù a barra contenente le seguenti voci: • Waiting time: Tempi medi di attesa per i job. Calcolati tra la sottomissione e il tempo di inzio esecuzione. • Running time: Tempi medi di esecuzione dei job. Calcolati tra il tempo di inizio esecuzione e tempo di fine. In caso di multiple resottomissioni, solo l'ultima prova è presa in considerazione. • Overall time: Tempi di media totale per i job. Calcolati tra la sottomissione e i tempi di fine. In caso di multiple resottomissioni, solo l'ultima prova è presa in considerazione. • CPU time: Tempi di media di CPU per i job come riportato dai job wrapper. Al momento solo i job sottomessi viene riportato questo valore. • Job Wrapper: Tempi di media di un job in riferimento al job wrapper. Pasquale Catalano 566/2323 Pagina 14 di 121 • Efficiency: Media efficienza dei job. Calcolata come rapporto tra tempo CPU e tempo Job Wrapper. Nella sezione centrale la schermata mostra sulla sinistra un menù che consente di dare opzioni di scelta su cui andare a fare la ricerca, apportando all'utilizzatore finale una caratterizzazione delle informazioni da recuperare in funzione delle proprie esigenze. Inoltre è presente una rappresentazione grafica tale da comunicare al consumatore informazioni riguardante i job per ciascuna attività. Per rendere la rappresentazione di facile comprensione con contenuti chiari è presente anche una legenda dettagliata. Figura 8: Pagina iniziale dell'interfaccia web Accedendo alla sezione Task Monitoring si presenta una schermata contenete informazioni circa sui task sottomessi da un determinato utente. Nella pagina appaiono una lista di menù a tendina riguardante l'utente, l'intervallo di tempo e il tempo di aggiornamento dei risultati in modo da far filtro alle ricerche da eseguire. Stabiliti gli attributi della ricerca se essi sono compatibili tra di loro allora forniranno informazioni altrimenti daranno un messaggio di errore. I dati ricavati saranno visualizzati mediante le seguenti caratteristiche: Id del task, numero di job, job in attesa, job in esecuzione, job falliti, job completati con successo. Per rendere leggibile e chiara l'interpretazione dei Pasquale Catalano 566/2323 Pagina 15 di 121 dati ottenuti viene adottata una rappresentazione grafica. In più c'è la possibilità di scegliere tra diverse viste del grafico: • In funzione del sito • In funzione dei job terminati finalizzate ad apportare una visione dei contenuti inerente al fabbisogno dell'utilizzatore. In più per ciascun task monitorato si possono ottenere contenuti Figura 9: Schermata principale Task Monitoring riguardanti i metadati ( input dataset, tempo di creazione del task , ecc ) o essere rediretti verso un'interfaccia interattiva del task scelto da analizzare. Queste operazioni si possono compiere attraverso la pressione di due icone che sono poste immediatamente dopo il TaskMonitorId. Vengono proposte alcune illustrazioni di immagini tratte dal contenuto informativo della vista storica che offre il Job Monitoring. Ci soffermeremo in particolare sul contenuto riguardante la distribuzione dell'analisi dei job falliti e terminati del sito di Pasquale Catalano 566/2323 Pagina 16 di 121 Nebraska, servendosi per i job terminati di un diagramma a barra mentre per i job falliti di una doppia rappresentazione: diagramma a barra e a torta. Figura 10: Rappresentazione grafica dei job terminati e job falliti In ultima analisi possiamo riassumere affermando che l'interfaccia web proposta dal Job Monitoring risulta essere per alcune caratteristiche UserFriendly, mettendo l'utente in condizione di usare in modo semplice il sistema, senza la richiesta di un livello elevato di alcune conoscenze ma il suo punto di forza risiede nella qualità di fornire contenuti accessibili tali da non ostacolare l'utilizzatore. Pasquale Catalano 566/2323 Pagina 17 di 121 3 Portale di monitoraggio utilizzato dal Tier2 Con il termine portale, per quanto relativamente recente, è uno dei più diffusi e utilizzati. Quindi non è possibile ottenere un'unica e comune definizione di “portale web”. Ma andando a confrontare più fonti si è acquisito di poterlo identificare come un servizio che opera da mediatore di informazione a favore degli utenti della rete, consentendo a quest'ultimi di raggiungere mediante un particolare punto d'ingresso nella rete una grande quantità delle risorse esistenti. Il portale è una porta di accesso unica ad un insieme di applicazioni, dati e servizi; è un aggregatore di informazioni che mette a disposizione un servizio di navigazione sulla rete facilitando il lavoro di ricerca. Ma andando ad analizzare meglio un portale non è solo questo. Dal punto di vista funzionale possiamo dire che un portale copre le esigenze in tre grandi aree: • aggregazione applicazioni • gestione contenuti • collaborazione Quindi un portale è molto di più di quanto abbiamo detto fino ad ora e ci fa comprendere come le potenzialità di uno strumento simile sono enormi. Dal punto di vista più strettamente applicativo, il ruolo di integrazione che può svolgere un portale è quello più interessante e promettente. Indipendentemente dalla soluzione di integrazione scelta, un portale può svolgere il ruolo fondamentale dell'integrazione lato interfaccia utente delle sorgenti dati, delle applicazioni o dei servizi con i quali un sistema informativo è costituito. Ciò consentirà all'utente di accedere alla medesima interfaccia in modo coerente e personalizzabile a molteplici sorgenti informative. Un portale è però anche un gestore di contenuti. Tutti noi usufruiamo ogni giorno sul web di contenuti più svariati. Basti pensare ad una pagina web nelle quali troviamo un articolo Pasquale Catalano 566/2323 Pagina 18 di 121 su un argomento di nostro interesse, con una bella foto, la versione pdf dell'articolo da scaricare; una singola pagina in cui tutti questi contenuti sono pubblicati in una forma aggregata e organizzati per un utilizzo da parte dell'utente omogeneo e efficace. In questo caso entra in gioco l'esigenza di gestire una molteplicità di contenuti da pubblicare grazie alle funzionalità del portale che consentono un simile risultato mediante l'utilizzo di un CMS, Content Management System. Con il passar del tempo il web è sempre più interattivo e consente a ciascuno di creare e condividere i propri spazi e i propri contenuti. È bene però mettere in evidenza che una valida piattaforma per la realizzazione di portali deve fornire i tipici strumenti di collaborazione quali blog, wiki, message board, instant messaging, mail, shared calendar e così via. Il portale quindi può essere utilizzato come uno strumento per la collaborazione di team di lavoro in una intranet aziendale. 3.1 Organizzazione dei contenuti e dei servizi Uno degli aspetti più importanti nella creazione di un portale risulta essere la sua struttura di navigazione. Un portale deve al tempo stesso incoraggiare l'esplorazione e la ricerca. Dunque, la struttura di un portale deve fornire continui interessi e una guida chiara ed evidente al consumatore che va alla ricerca di specifiche informazioni. Esso deve presentare un'organizzazione della struttura interna delle informazioni secondo dei criteri facilmente comprensibili al pubblico ma che allo stesso tempo ne incoraggino l'esplorazione. Tipicamente, l'organizzazione della navigazione di un portale andrà a riflettere in maniera più o meno stretta la divisione in sottoargomenti del contenuto principale del portale, fornendo sezioni diverse ma collegate per ciascun sottoargomento. Abbiamo una struttura del portale suddivisa nel seguente modo: La homepage generale che andrà a rappresentare il punto cardine di accesso al sito, raccogliendo informazioni e titoli provenienti da tutte le sezioni; contenendo una selezione delle notizie più importanti. Alla homepage possono essere associate ulteriori Pasquale Catalano 566/2323 Pagina 19 di 121 pagine di navigazione che risultano indipendenti dalle varie sezioni. Quando andiamo a definire le diverse sezioni ci ritroviamo in una struttura già vista se pur in una forma più piccola; costituita a sua volta da una homepage e in merito alla complessità della sezione, zero o più pagine di navigazione. Queste pagine danno accesso alle informazioni vere e proprie , che possono essere anche condivise tra più sezioni. Inoltre insieme a questa struttura che può definirsi gerarchica esiste un'organizzazione di collegamenti ipertestuali, che connettono in maniera libera homepage, homepage sezioni, pagine di navigazione, documenti e ogni altro tipo di informazione che si ritenga essere utile presentare. 3.2 La struttura a componenti Le Portlet sono dei moduli web usabili all'interno di un portale web. Quindi servono a gestire una porzione del portale che risulta essere normalmente rappresentata da un box rettangolare. I vari box o finestre sono organizzati in modo tale da comporre la pagina del portale nel suo complesso definita come portal-page. Ciascuna portlet è finalizzata ad una semplice applicazione; esse possono essere chiuse, ridotte o spostate ed essere personalizzate in merito alle esigenze dell'utente. Figura 11: Terminologia relativa alle componenti di un portale La tecnologia delle portlet e dei portali utilizzano un'insieme di standard al fine di Pasquale Catalano 566/2323 Pagina 20 di 121 consentire lo sviluppo di portlet portabili, ovvero che possono usati nel contesto di portali sviluppati con tecnologie diverse. La comunicazione tra le portlet avviene mediante l'accesso a contenuti e dati remoti attraverso il Portlet Container. Il Portlet Container fornisce alle portlet il necessario ambiente di esecuzione,il contesto gestendo il loro ciclo di vita e il comportamento; è suo compito istanziare le portlet prima che vengano richieste e lanciare eccezioni se qualcosa va male. Le portlet sono elementi molto simili alle servlet ideati per essere inseriti facilmente in un portal server ed essere eseguiti. Il portal server esegue il lavoro finale di aggregazione delle portlet applications e delle singole portlet. In particolare il portal server esegue la spedizione delle request a tutte le portlet contenute in una singola pagina svolgendo quindi il lavoro di orchestrazione e coordinamento. Di seguito andiamo ad elencare le principali differenze di una portlet rispetto ad una servlet: • non posseggono la comunicazione con il browser, quindi non permettono di inviare redirect o errori; • sono componenti più semplici e quindi più leggeri, ciò consente una maggior facilità di gestione; • non possono rappresentare pagine web complete, ma solo singoli componenti; • non possono essere raggiunte da un url specifico, in quanto è il portale intero ad avere associato l'indirizzo. In conclusione si può affermare che le portlet sono dei mattoni primitivi di un portale che concedono la possibilità di creare un ambiente di componenti web i quali possano cooperare nella realizzazione di contenuti web in maniera ottimizzata. Pasquale Catalano 566/2323 Pagina 21 di 121 Figura 12: Organizzazione logica di una architettura basata su porlet Generazione di una pagina di un portale Nella presente sezione descriveremo i passi fondamentali che occorrono per la creazione di una pagina all'interno di un portale. 1. Ogni portlet genera contenuti per l'utente. Il contenuto può essere statico o generato dinamicamente, dipende dalla logica dell'applicazione della portlet 2. Il contenitore riceve i dati generati dal several portlet 3. Il contenitore manipola le informazioni per il server portal 4. Il server portal crea la pagina del portale, la quale è essenzialmente una sequenza di codice HTML che il browser utilizza. Durante la creazione della pagina, il server portal applica il layout di pagina designato per ciascuna portlet nel luogo appropriato 5. Il server invia la pagina creata al browser 6. Il browser visualizza il contenuto all'utente Dopo queste fase, il portale è pronto per avere interazione con l'utente. Pasquale Catalano 566/2323 Pagina 22 di 121 3.3 Enterprise Information Portal: Liferay Un Enterprise Information Portal noto come un portale d'informazione aziendale è una struttura che consente di integrare informazioni, persone e processi attraverso spazi organizzativi. Esso offre un punto di accesso unificato e sicuro, spesso nella forma di un'interfaccia utente basata sul web, disegnato per aggregare e personalizzare informazioni attraverso portlet. Liferay è un enterprise portal nato nel 2001, candidato ad aiutare le organizzazioni a collaborare in un modo più efficiente mettendo a disposizione una serie consolidata di applicazioni pronte all'uso. È adoperato da piccole, medie e grandi aziende in tutto il mondo e inoltre presenta un elenco di funzionalità tali da metterlo a confronto con altri portali commerciali, con il privilegio di essere open source. Esso svolge la funzione di Web Container, permettendo di considerare una pagina come un'aggregazione di moduli web, destinati a contenere applicazioni. Totalmente basato su J2EE , quindi su java, consente di impiegarlo insieme a differenti application server, database e sistemi operativi. Tra le proprietà basilari ci sono: • Portlet specification e JSR 168 • Java Server Face con l'utilizzo di JSR 252 • WSRP 2.0 • Full J2EE se associato a Jboss Application Server Il portale inoltre concede agli utenti di: • Elevata dinamicità, permettendo di creare, modificare ed eliminare portlet, di personalizzarle, impostare livelli di sicurezza. • Gestire le portlet mediante un'organizzazione gerarchica detta Interportlet Comunication (IPC). • Personalizzare temi e layout. Pasquale Catalano 566/2323 Pagina 23 di 121 Liferay si basa su un'architettura orientata ai servizi denominata (SOA). Con SOA (Service Oriented Architecture) si va ad indicare un'architettura software usata per supportare l'utilizzo di Web Service e per assicurare l'interoperabilità tra diversi sistemi, in modo tale da consentire l'uso delle singole applicazioni come parte dell'intero processo gestionale. In questo modo le applicazioni sono frutto dell'unione di più servizi, che tra di loro risultano essere indipendenti garantendo il massimo della riusabilità. La scelta ricade su Liferay in quanto offre una grande quantità di servizi integrati di qualità ed un'ottima flessibilità. Tutto questo si va ad includere con una grande capacità di organizzare e il supporto alla collaborazione. Figura 13: Homepage Liferay Dalla figura sovrastante si denota che il portale presenta un'interfaccia utente molto semplice e chiara organizzata in modo tale da aiutare lo sviluppatore alla finalizzazione del compito da effettuare. Dopo la fase di autenticazione con l'immissione delle proprie Pasquale Catalano 566/2323 Pagina 24 di 121 credenziali il sistema passa ad uno stato che consente la creazione delle pagine, in cui verranno inserite le portlet che s'intendono adoperare. In particolare compare un bottone “AddPage” che provvederà alla creazione e all'inserimento della pagina nel portale. In alto a destra, sotto il login sarà disponibile un menù per le opzioni. Tale menù è composto da una collezione di sezioni dove è possibile fare operazione del tipo: • Gestione Pannello di Controllo • Gestione Account • Aggiunta di un'applicazione • Scelta del layout del template • Gestione della pagina Figura 14:Visualizzazione del Menù Cliccando sulla sezione riguardante “Aggiunta di un'applicazione” concede allo sviluppatore l'inserimento di una portlet all'interno della pagina. All'utente comparirà un menù costituito da una lista di tutte le tipologie di portlet presenti nel portale. Inoltre c'è la possibilità di aggiungere nuove portlet all'interno del portale attraverso o una ricerca della nuova portlet da integrare o l'inserimento del file.war. Pasquale Catalano 566/2323 Pagina 25 di 121 Nel successivo paragrafo andiamo a soffermarci più in dettaglio su alcune portlet quali la Portlet WebContent Display e la Portlet Iframe. 3.4 Portlet WebContent e Iframe Liferay mette a disposizione per lo sviluppatore una lista di portlet organizzate per ciascuna categoria interessata. Per lo sviluppo dell'applicazione sono state oggetto di studio le seguenti portlet: WebContent Display e Iframe. In seguito vengono presentati il loro utilizzo e le loro caratteristiche. La WebContent Display è una portlet che appartiene alla sezione Content Management. Essa svolge la funzione di contenitore di informazioni, infatti può comprendere sia testo che immagini. Una volta selezionata, facendo click su “Add” appare una finestra nell'area di lavoro suddivisa in due settori. Nel primo sono disposti i pulsanti per ingrandire, ridurre e eliminare la finestra della portlet. Inoltre compare un pulsante che consente attraverso un menù a tendina di eseguire operazioni del tipo: configurazione, importare/esportare e imposta layout. Se la scelta ricade su: • configurazione: si presenta una schermata suddivisa in più schede che concede di inserire WebContent già esistenti, impostare i permessi agli utenti e condividere la portlet. • importare/esportare: consente di esportare la portlet creata in un formato .lar o di importare altre portlet sempre con un'estensione .lar. • imposta layout: permette allo sviluppatore di settare lo stile del testo (con informazione su tipo font, dimensione carattere,...), il colore di sfondo, i margini e bordi della portlet e inoltre concede di inserire in un'apposita sezione regole CSS da far assumere alla portlet. Nel secondo settore posto in basso alla finestra viene mostrato il bottone che permette Pasquale Catalano 566/2323 Pagina 26 di 121 di aggiungere un Web Content. Quindi compare una schermata in cui è possibile eseguire le seguenti operazioni: • Inserimento del testo • Inserimento di un'immagine • Inserimento del codice HTML relativo al testo o all'immagine Questo rende l'utilizzo della portlet adatto a qualsiasi tipo di utente, esperto o non esperto. Figura 15: WebContent Display Dopo la fase di scelta dell'informazione e di salvataggio dei contenuti aggiunti, appare un pulsante nella finestra che permette di editare le informazioni inserite. La portlet Iframe fa parte della sezione Sample del menù generale di classificazione delle portlet. Essa consente di incorporare una pagina HTML all'interno della pagina corrente. Inoltre l'utente può navigare attraverso la pagina senza perdere il contesto della pagina del portale. La portlet Iframe utilizza il tag iframe di HTML, che fa parte di HTML 4, supportandola in tutti i principali browser. Inoltre adeguerà le dimensioni della pagina HTML, se la pagina è presente nel server stesso. Il browser aggiungerà le barre di scorrimento se la pagina non rientra nella dimensione del frame. Dopo averla selezionata, appare una finestra contenete le seguenti macro aree: Pasquale Catalano 566/2323 Pagina 27 di 121 – General: consente mediante il campo source di andare ad inserire l'URL di una risorsa internet, come immagini documenti o siti web. – Autentication: Se la pagina Web incorporata richiede l'autenticazione, la portlet Iframe può essere configurata per fornire informazioni di autenticazione. Questa sezione descrive le diverse opzioni offerte all'utente. Se selezionata compare una box in cui si può scegliere il tipo di autenticazione. Ci sono diverse maniere di fornire le informazioni di autenticazione per la pagina. La portlet supporta due categorie: Autenticazione Basic: Questo metodo è descritto nelle specifiche HTTP. Il nome utente e password di solito sono forniti come intestazioni HTTP, ma è anche possibile inserirli nella URL con la sintassi. Autenticazione Form: È il nome dato ai siti web che autentica l'utente facendogli compilare un modulo con il suo nome utente e password. Si tratta di quello utilizzato dalla maggior parte dei siti web. Ci sono due varianti di questo: GET e POST. La prima imposta il nome utente e password nella URL e il secondo nel corpo della richiesta. Di solito fanno poca differenza ed entrambi probabilmente funzionano con qualsiasi sito web. Quindi nella portlet compariranno una lista di campi tali da poter personalizzare i tipi di autenticazione. Inoltre la portlet consente, quando si utilizza l'autenticazione basata sul form, all'amministratore di configurare un insieme di parametri aggiuntivi che saranno inviate con il modulo. Questi parametri devono essere impostati nel campo 'Hidden Variable'. – Advanced: permette allo sviluppatore di inserire valori di attributi HTLM. Non dimentichiamo che anche con la portlet Iframe è possibile caratterizzarla come la WebContent attraverso la scelta delle voci look and feel, import/export e configuration del menu a tendina, che si presenta dopo aver selezionato il rispettivo bottone che appare in alto alla finestra. Pasquale Catalano 566/2323 Pagina 28 di 121 Figura 16: Esempio di portlet Iframe con l'URL http://www.google.it 3.5 Il portale del Tier2-Napoli L'infrastruttura del Tier2-Napoli utilizza un sistema di monitoraggio completo ed interattivo, che permette di soddisfare molti aspetti, quali: • Gestione del profilo degli utenti con relativa caratterizzazione dell'attività. Vale a dire che ai consumatori generici è permesso analizzare la rete fino a giungere allo stato dei servizi su ciascun apparato, escludendo la possibilità di modificare i servizi. Viceversa poter agli utenti amministratori viene concessa la completa gestione, intesa come visualizzazione , sospensione, ravvio di qualsiasi apparato o servizio • Buona scalabilità, ossia facilmente da espandere e da modificare. In realtà un attributo importante di ogni rete di calcolo ed in particolare quella del Tier2Napoli è quella di non avere un'architettura fissata, concedendo così che nel tempo sia sempre possibile cambiarne la topologia con l'inserimento di nuove Pasquale Catalano 566/2323 Pagina 29 di 121 apparecchiature • Buona gestione delle apparecchiature da remoto con particolare attenzione sull'aspetto della sicurezza, dovuta dal fatto che è possibile coordinare tutta l'intera infrastruttura Il portale si presenta con una pagina che consente di visualizzare all'intero di un frame una mappa generale, nella quale sono rappresentati tutte le tipologie di apparati: Storage Elements, Worker Nodes, Service Nodes, CMC, Switch, Router e UPS. Per alcuni di essi c'è la distinzione (L1 e L2) tra la locazione nel Data Center, come spiega la legenda in basso alla mappa. Per ogni tipologia c'è una icona che si riferisce al gruppo, ai suoi host e ai servizi attivi su essi Figura 17: Portale del Tier2-Napoli L'obiettivo è quello di visualizzare, da questa mappa, la stato generale dei servizi per Pasquale Catalano 566/2323 Pagina 30 di 121 ogni tipologia di apparato, in modo da inquadrare più velocemente il problema che si presenta. L'icona verde indica che tutti i servizi relativi a quella tipologia restituiscono uno stato di OK. L'icona gialla indica che almeno un servizio di quella tipologia restituisce un warning. L'icona rossa indica che almeno un servizio di quella tipologia restituisce lo stato critical. L'icona grigia invece indica che almeno un servizio restituisce lo stato unknown. Posizionando il puntatore del mouse su una di queste icone, si visualizza una lista (ridotta) degli apparati che fanno parte di quella tipologia, con il rispettivo stato del host, stato del servizio e numero dei servizi che sono in quello stato, come mostra la seguente figura. Figura 18: Sommario servizi Storage Element Mentre in un altro frame vengono visualizzate notizie riguardanti l'utilizzo di CPU, dello Storage e di una panoramica dei sistemi di monitoraggio. La mappa essendo navigabile consente al consumatore di cliccare sull'icona, che indica lo stato di un determinato apparato, accedendo ad una sezione del portale dove vengono mostrati in dettaglio tutti gli armadi rack in cui risiede l'apparato selezionato. Nella mappa visualizzata l'utente riceve informazioni sullo stato di tutti i servizi attivi Pasquale Catalano 566/2323 Pagina 31 di 121 su quel host e in più altre informazioni generali sullo stato del host. Figura 19: Mappa con dettaglio di un Worker Node Le mappe concedono di scendere sempre più nel dettaglio selezionando il singolo host. In questo caso si accede direttamente alla Web Management dell'apparato. Si apre in una nuova pagina la home della web management con la schermata di autenticazione. Dal portale accedendo alla sezione Network Monitoring viene mostrata una mappa che descrive il monitoraggio del traffico e dei dispositivi della rete mediante il plugin Weathermap. In questa sezione è possibile navigare tra tutte le mappe, scorgendo ogni minimo particolare dei dispositivi attivi e della rete. Dalle mappe, selezionando un qualsiasi link di collegamento dei nodi, è possibile accedere ad una serie di grafici sia del traffico, che dei pacchetti persi o danneggiati, in Pasquale Catalano 566/2323 Pagina 32 di 121 Figura 20: Mappa del traffico del Tier2-Napoli modo da avere una visione completa della situazione della rete. Inoltre, questi grafici riportano le informazioni secondo una certa scale temporale: giorno, settimana, mese, anno. Questo schema di consolidamento consente di mantenere importanti informazioni di carattere storico. Dunque si può affermare che il portale risulta essere di facile uso al consumatore, anche con l'introduzione di mappe interattive, fornendogli buone informazioni sullo stato dei servizi degli apparati della rete e del traffico dell'intera rete. Una mancanza del portale è quello di esaltare solo il monitoraggio dell'infrastruttura del Tier2 di Napoli senza poter avere nessuna informazione su i vari esperimenti in cui è coinvolto, rendendolo utilizzabile solo all'utenza del Tier2 di Napoli. Pasquale Catalano 566/2323 Pagina 33 di 121 4 Software di Monitoraggio utilizzati dal Data Center 4.1 Analisi dello strumento per il monitoraggio della rete L'applicazione impiegata per la raccolta dei dati di esercizio degli apparti della rete del Tier2-Napoli è il software open source Cacti. La preferenza nell'utilizzare Cacti come uno strumento di raccolta delle informazioni nasce soprattutto dalle sue caratteristiche, di seguito analizzate, che consentono di tenere sotto controllo lo stato degli apparati o dei sistemi raggiungibili da una rete. Il software è costituito in modo tale da integrare una serie di tool, sempre open source, al fine di fornire un sistema semplice e completo per il monitoraggio di reti informatiche. Figura 21: Homepage Cacti Più dettagliatamente Cacti si fonda sui seguenti strumenti: • Net-SNMP, Per le interrogazioni SNMP • RRDTool, per la persistenza dei dati ricavati dal monitoraggio e la loro presentazione attraverso grafici • piattaforma LAMP ( Linux Apache MySql Php), in particolare: Pasquale Catalano 566/2323 Pagina 34 di 121 - PHP ed Apache, per la presentazione dei dati e per le interfacce utente - MySql, per la persistenza dei dati di configurazione Una schematizzazione modulare, esplicativa, è la seguente: Figura 22: Struttura modulare Cacti Cacti mette a disposizione sul proprio portale una serie di script e template già scritti e funzionanti importabili nel sistema, in modo da espandere le tipologie di dati da monitorare. Un'importante caratteristica di Cacti, tale da assegnargli ampi margini di espandibilità, è quella di un'architettura a plugin. Tra i plugin più rilevanti ci sono: • Discovery ̶ auto rilevamento di dispositivi di una subnet non monitorati da Cacti • Host Info ̶ consente di visualizzare informazione sugli host • Monitor ̶ mostra gli stati degli host monitorati generando segnali acustici in caso di “cadute” • UpTime ̶ consente di conoscere gli uptime dei dispositivi monitorati Pasquale Catalano 566/2323 Pagina 35 di 121 • Weathermap ̶ permette di definire mappe delle reti arricchite attraverso i dati di monitoraggio • NPC ̶ plugin per integrare il sistema di monitoraggio Nagios all'interno di Cacti In riferimento alla definizione dei monitoraggi, le chiamate a Net-SMNP possono essere definite per mezzo di: – Script di shell bash – Script Perl – Definizione di template in XML ( eXtensible Markup Language) Una volta stabilite le interrogazioni SNMP desiderate, in seguito a un processo di domande cicliche (polling), Cacti provvede di eseguirle a intervalli di tempo regolari, trasferendone i risultati finali a RRDTool. In prima istanza, RRDTool può essere valutato come un vero e proprio database ottimizzato per gli ambienti di monitoraggio. Nel prossimo paragrafo viene descritto in maniera esaustiva tale software, assegnando a Cacti un'interfaccia user friendly, consentendolo di interagire a livello datalayer. Uno dei punti di forza di Cacti è la facilità di configurazione garantendo ugualmente un'elevata flessibilità. L'applicativo è dotato di un front-end con interfaccia web scritta in PHP, inoltre permette di gestire più utenti con viste personalizzate e diversi livelli di permesso per le modifiche. Inoltre consente una vasta gamma di personalizzazioni, che vanno dall'aggiunta di macchine da monitorare, alla definizione di nuove sorgenti di dati, ottenibili tramite SNMP o script ad hoc. Per descrivere in una forma chiara e comprensibile il lavoro legato alla raccolta dati di Cacti, si riporta la seguente figura: Pasquale Catalano 566/2323 Pagina 36 di 121 Figura 23: Processo di raccolta e persistenza dati di Cacti Dal modello sopra presentato è possibile osservare come Cacti, mediante l'utilizzo di Net-SMNP, è in grado di raccogliere informazioni da un'apparecchiatura di rete. È da notare che le interrogazioni SNMP vengono effettuate unicamente sui WDS in quanto, quest'ultimi, mantengono le quantità d'informazione di tutti gli apparati dell'infrastruttura a loro carico. Ad ogni interrogazione i dati vengono trasferiti a RRTool che procede alla storicizzazione. 4.1.1 Il Collezionamento dei dati Cacti come altri software per il monitoraggio di dispositivi di rete fanno uso del protocollo SNMP (Simple Network Management Protocol), in quanto ha l'obiettivo di distribuire all'utente informazioni e allarmi sugli apparati presenti all'interno di una rete. Il vantaggio di adoperare tale protocollo è quello di non aver bisogno di meccanismi esterni di cattura o sonde software da installare. Dalla natura del dispositivo deriva il grado e il numero delle informazioni, ad esempio Pasquale Catalano 566/2323 Pagina 37 di 121 uno switch fornirà informazioni differenti da una stampante o da un server. Bisogna premettere che, prima di effettuare il monitoraggio su un dispositivo è necessario che si verificano determinate condizioni: gli apparati devono essere dotati di un Agent SNMP e inoltre possedere la capacità di comunicazione dei dati all'interno delle rete locale. Per avere un corretto funzionamento, l'apparato oltre all'Agente SNMP ha bisogno dell'ausilio di un sistema centrale, con il compito di raccogliere i dati e visualizzarli in un formato chiaro all'utente denominato Network Management Station, altrimenti la convenienza nell'utilizzare il protocollo SNMP è del tutto vana. In una realtà di mercato esistono parecchi ambienti di lavoro che nonostante dispongano di periferiche SNMP , non prevedono un sistema centrale in grado di consentire la raccolta dei dati. Il protocollo SNMP risulta essere di tipo client-server, in cui gli agenti sulle periferiche lavorano come server mentre il sistema centrale di raccolta come client. Gli agenti presenti sulle periferiche vengono innescati all'accensione dell'apparato, mettendosi in attesa di richieste dal sistema centrale. L'utente avrà il compito di decidere quale particolare informazione del dispositivo andare a controllare, andando a configurare il software di monitoraggio. Ciò permetterà di interrogare a intervalli di tempo regolare gli agenti per poter avere informazione sui dati richiesti dall'utente. L'elenco delle informazioni, variabili, che un dispositivo può fornire è collocata all'interno di una struttura dati chiamata MIB (Management Information Base) che risulta essere condivisa tra gli agenti e il sistema di controllo. Questo farà in modo che l'applicazione di controllo funzionerà subito dopo che sia stata installata. Infine basterà inserire l'indirizzo IP dell'apparato, una stringa di accesso e le variabili da monitorare. La MIB è una base di dati che conterrà oggetti, suddivisi nelle seguenti categorie: • System: raccoglie informazioni di carattere generale sul dispositivo di rete • Interface: accoglie dati relativi alle interfacce di rete Pasquale Catalano 566/2323 Pagina 38 di 121 • Address Translation: racchiude informazioni specifiche sulla conversione dei indirizzi (logico-fisico) • Ip: contiene notizie relative al protocollo Ip • Icmp: contiene notizie relative al protocollo Icmp • Tcp: racchiude dati del protocollo Tcp • Udp: comprende informazioni del protocollo Udp • Egp: include dati del protocollo Egp • Transmission: ospita dati sui mezzi di trasmissione utilizzati da ogni interfaccia di rete • Snmp: racchiude dati del protocollo Snmp Figura 24: Architettura SNMP Pasquale Catalano 566/2323 Pagina 39 di 121 4.2 Il Modello di storicizzazione dei dati 4.2.1 RRD: Round Robin Database Con la sigla RRD indichiamo un Database Round Robin, il quale ci consente di gestire un numero fisso di voci al suo interno nel seguente modo: la voce più vecchia viene continuamente sostituita da dati più recenti. Quando nella base di dati viene scritto l'ultimo record disponibile, il prossimo record da scrivere verrà sovrascritto al primo in modo tale da mantenere la dimensione del database sotto controllo. Tale tipologia di database risulta essere adeguata per sistemi che memorizzano e visualizzano dei dati di serie temporali (quali banda di rete, temperature, carico CPU) immagazzinandoli in modo compatto tale da non espandersi nel tempo. Quindi il loro utilizzo è adatto quando si lavora in un contesto in cui occorre una ripetizione ciclica dei valori delle misure, che dipendono dal tempo di osservazione. Figura 25: Funzionamento di un RRD 4.2.2 RRDTool RRDTool (acronimo di Roundi Robin Database Tool) è un'applicazione open source strutturato interamente in C da Tobias Oetiker ed è uno degli strumenti maggiormente utilizzati in generale nell'ambito dei sistemi di monitoraggio. Il suo Pasquale Catalano 566/2323 Pagina 40 di 121 compito principale, in un sistema di monitoraggio, è quello di archiviare serie temporali. Le caratteristiche fondamentali sono: • grandezza degli archivi (file RRD) a regime costante • dump degli archivi in file XML • prelievo di parziali serie temporali dagli archivi • rappresentazione dei dati mediante grafici Figura 26: Principali caratteristiche di RRDTool Il software può essere adoperato per osservare qualunque tipo di dato sia possibile radunare con il supporto del protocollo SNMP. Si fonda principalmente sul criterio del round robin database. Il vantaggio di utilizzare tale criterio sta nel fatto che le dimensione degli archivi sono fisse, sgravando l'amministratore da tutti i problemi di manutenzione relativi alla crescita del database. Una caratteristica importante da sottolineare dell'applicazione è che le misure rilevate sono immagazzinate a determinati intervalli di tempo. Nelle misurazioni il tempo attribuito è espresso nel formato Timestamp, ovvero dal numero di secondi trascorsi Pasquale Catalano 566/2323 Pagina 41 di 121 dall'epoca (1970/01/01). Inoltre se durante la fase di raccolta accade che la misura non è disponibile per un fissato intervallo di tempo, allora le viene attribuito il valore di unknown (nan). In seguito viene mostrata un'immagine che riporta una dettagliata descrizione degli oggetti che occorrono per creare un database RRD: Figura 27: Logica di un RRD Quindi si giunge alla conclusione che per poter comporre un RRD ci occorrono una o più fonti dati (DS) e uno o più archivi round robin (RRA) Le caratteristiche assegnate ad un RRD sono : • version: una stringa che concede informazioni sul numero di versione del RRD • step: intero che rappresenta il valore della frequenza, espresso in secondi, con cui un RRD viene aggiornato Pasquale Catalano 566/2323 Pagina 42 di 121 • lastupdate: valore numerico che descrive la data dell'ultimo aggiornamento del RRD , espresso nel formato Timestamp Ciascun Data Source è costituito dalle seguenti proprietà: • name: rappresenta il nome del Data Source, distinguendolo in maniera univoca all'interno dell' RRD • heartbeat: intero che descrive il numero massimo di secondi che possono trascorrere tra l'inserimento di due dati consecutivi relativi allo stesso DS. Se al termine del heartbeat non viene un nuovo valore allora RRDTool provvederà a memorizzare il valore unknown(nan) • min, max: rappresentano gli estremi dell' intervallo [min, max] in cui devono appartenere i dati relativi al Data Source Come già menzionato ciascun RRD è costituito da uno o più RRA (Round Robin Archive), aventi il compito di immagazzinare tutte le serie storiche dei DS. Ad ogni archivio è associata una o più funzioni di consolidamento CF con il fine di consolidare i dati prima di memorizzarli. Le funzioni di consolidamento disponibili sono le seguenti: – AVERAGE – MIN – MAX – LAST Per quanto riguarda la base di dati, presente in ciascun RRA, è formata dai risultati della funzione di consolidamento. In linea di massima il numero di righe nel database sarà costante rispetto all'attributo rows di CF. Pasquale Catalano 566/2323 Pagina 43 di 121 Figura 28: Flusso dei dati durante il processo di memorizzazione Dalla figura si deduce come il software RRDTool effettua il processo di memorizzazione dei dati su un dispositivo monitorato. Esso è composto dalle seguenti azioni: • Acquisizione del dato e inserimento nel DS (DataSource) • Consolidamento dei dati attraverso le CF • Archiviazione dei dati Nel successivo paragrafo si descrivono più in dettaglio alcune funzioni messe a disposizione da RRDTool. Pasquale Catalano 566/2323 Pagina 44 di 121 4.2.3 Le Caratteristiche di utilizzo di RRD RRDTool mette a disposizione per il consumatore una lista di funzioni che permettono la gestione degli RRD e la visualizzazione delle informazioni. Per lo sviluppo dell'applicazione sono state oggetto di studio e successivamente di utilizzo le seguenti funzioni: Create, Fetch, Graph. 4.2.3.1 Create La funzione di Create di RRDtool permette di impostare un nuovo Round Robin Database (RRD) file. Il file generato conterrà inizialmente valori nan. Gli argomenti che riceve sono: • [filename]: Specifica il nome dell'RRD che si desidera creare. Il file deve terminare con l'estensione.RRD • [--start|-b start time]: Specifica il tempo in secondi dal 1970/01/01 UTC, quando il primo valore deve essere aggiunto al file RRD. Non accetterà alcun dato a cui è associato una serie temporale precedente al tempo specificato • [--step|-s step]: Specifica l'intervallo di base in secondi con il quale i dati saranno inseriti nell'RRD • [DS:ds-name:DST:dst arguments]: Ds-name è il nome che verrà utilizzato per fare riferimento a una particolare fonte di dati di un RRD. DST definisce il tipo di origine dei dati. I restanti argomenti dipendono dal tipo di sorgente di dati • [RRA:CF:cf arguments]: Definizione delle funzioni di consolidamento per la memorizzazioni dei dati nell'archivio Figura 29: Esempio d'uso della funzione Pasquale Catalano 566/2323 Pagina 45 di 121 4.3.2.2 Fetch La funzione fetch è adoperato per il recupero di informazioni dall'RRD. Viene normalmente utilizzata internamente dalla funzione graph per ottenere dati dall'RRD. Fetch analizza l'RRD e cerca di recuperare i dati nella risoluzione richiesta. I dati recuperati vengono stampati su stdout. Particolare attenzione ai valori unknown, spesso rappresentati dalla stringa "nan" a seconda della funzione printf del sistema operativo. La lista dei parametri che accetta sono: • [filename]: il nome dell'RRD da cui si desiderar recuperare i dati • [CF]: la funzione di consolidamento che viene applicata ai dati che si desiderano scaricare (MEDIA, MIN, MAX, LAST) • [--resolution|-r resolution]: indica l'intervallo dei valori che si desidera ricevere. Anche se la corrispondenza non è soddisfatta la funzione ritornerà i dati • [--start|-s start]: limite inferiore della serie temporale per la raccolta dei dati. Espresso sempre in numero di secondi trascorsi dalla data (1970/01/01) • [--end|-e end]: limite superiore della serie temporale per la raccolta dei dati. Espresso nel formato Timestamp • [--daemon address] : indirizzo del demone rrdcached. Se specificato, un comando viene inviato al server prima di leggere il file RRD Figura 30: Esempio d'uso funzione fetch Pasquale Catalano 566/2323 Pagina 46 di 121 Figura 31: Risultato di una fetch di un file Rrd avente DS total_user 4.2.2.3 Graph È la funzione cardine di RRDTool, essa viene utilizzata principalmente per rappresentare i dati da un file RRD verso l'utenza. Il suo obiettivo è sia quello di creare rappresentazione grafica comprensibile, sia di generare un rapporto numerico. Tale funzione ha bisogno di dati con cui lavorare, quindi è necessario utilizzare delle istruzioni che ci consentono la raccolta delle informazioni. RRDTool fornisce tre tipi di istruzioni: – DEF:<vname>=<rrdfile>:<ds-name>:<CF>[:step=<step>][:start=<time>] [:end=<time>][:reduce=<CF>] Pasquale Catalano 566/2323 Pagina 47 di 121 Questo comando si utilizza quando ci occorre recuperare dati da un file RRD. Il vname nome virtuale può quindi essere utilizzato in tutto il resto dello script. Per default, un RRA che contiene i dati consolidati corretti sarà scelto. – VDEF:vname=RPN expression Questo comando restituisce un valore e/o un tempo secondo le dichiarazioni RPN utilizzato. Il vname risultante, a seconda delle funzioni utilizzate, hanno un valore e una componente tempo. Quando si utilizza questa vname in un'altra espressione RPN, si sta inserendo il suo valore proprio come se si fosse messo un numero. Esempio: VDEF:avg=mydata,AVERAGE – CDEF:vname=RPN expression Questo comando crea una nuova serie di punti di dati (in memoria solo, non nel file RRD) su una o più serie di dati. Le istruzioni RPN sono utilizzate per valutare una funzione matematica su ogni punto dei dati. Il vname risultante può quindi essere utilizzato più avanti nello script, proprio come se fosse generato da una istruzione DEF. Esempio: CDEF:mydatabits=mydata,8,* Le principali opzioni passate alla funzione graph sono: • [filename]: il nome e il percorso del file da generare. Si raccomanda di inserire a fine la scelta del formato: .png o .svg o eps • [-s|--start time] [-e|--end time]: l'inizio e la fine della serie temporale che si desiderano visualizzare • [-t|--title string] [-v|--vertical-label string]: Stringa orizzontale nella parte superiore del grafico e/o una stringa disposta verticalmente sul lato sinistro del grafico. • [-w|--width pixels] [-h|--height pixels] dimensioni dell'area che il grafico occupa Pasquale Catalano 566/2323 Pagina 48 di 121 • [-g|--no-legend]: Sopprime la generazione della leggenda e visualizza solo l'area del grafico. Inoltre fa impiego di istruzioni che consentono di generare le immagini o il report. Se non si utilizzano elementi grafici, di conseguenza il grafico non viene generato. Allo stesso modo, nessun report viene generato se non si utilizzano opzioni di stampa. Per stampare il valore di una variabile definita in una espressione VDEF si adopera la seguente istruzione: PRINT. PRINT:vname:format[:strftime] A seconda del contesto, sia la componente di valore o la componente temporale di un VDEF viene stampato utilizzando il formato. Si tratta di un errore di specificare un vname generato da una o DEF CDEF. Se si volesse inserire del testo all'interno dell'area del grafico s'impiega GPRINT, altrimenti per introdurre nella medesima area del testo libero si utilizza COMMENT. GPRINT:dname:CF:testo COMMENT:testo La possibiltà di mostrare graficamente l'andamento di una variabile temporale, definita con una variabile DEF o CDEF è data dal comando LINE LINE:variabile:colore:legenda Per ciascun comando LINE si può opzionalmente inserire il comando STACK al termine della definizione per far sì che la nuova linea si 'appoggi' sulla linea precedente. Alternativa al metodo LINE esiste il metodo AREA che concede di colorare tutta l'area compresa l'asse temporale, l'ascissa e la linea di andamento. AREA: variabile:colore:legenda Per confrontare dati di tempi diversi è indispensabile 'attualizzare' la posizione temporale dei dati: ad esempio per paragonare i dati di un indice di borsa odierni con quelli del giorno precedente, bisogna che i dati del giorno precedente siano spostati di 24h ovvero di 86400 secondi. Questo è possibile con il comando SHIFT Pasquale Catalano 566/2323 Pagina 49 di 121 SHIFT:datidiieri:86400 Illustriamo in seguito degli esempi d'uso della funzione graph con relativi risultati: Figura 32: Esempio d'uso con risultato Pasquale Catalano 566/2323 Pagina 50 di 121 Figura 33: Esempio d'uso con risultato Figura 34: Esempio d'uso con risultato Pasquale Catalano 566/2323 Pagina 51 di 121 4.3 Analisi applicazione Nagios Nagios è un software che si propone come una soluzione per il monitoraggio di rete aziendali e degli apparati. Fornisce un sistema di controllo centralizzato dell'intera infrastruttura, includendo applicazioni software, database, server e apparati di networking, il tutto senza costi di licenze software e con codice aperto (open source). Il sistema permette di avere un controllo completo dell'intera rete e quindi di intervenire tempestivamente in caso di problemi o guasti. La compatibilità è garantita con un numero elevato di tipologie di server, di sistemi operativi, di router, di switch etc. Il modello di sviluppo del software in esame garantisce inoltre la possibilità di espandere il sistema a fronte di esigenze molto particolari poiché la soluzione risulta essere modulare e a codice aperto. Il modulo base del sistema è costituito dall'applicazione Nagios per il monitoring dell'infrastruttura, molto diffusa ed apprezzata, ritenuta ormai una soluzione matura ed utilizzata da moltissime aziende ed enti pubblici in tutto il mondo. La configurazione degli host e dei servizi da monitorare viene effettuata tramite una comoda interfaccia web ed è possibile creare dei template, sia per gli host che per i servizi, con valori opportuni dei parametri in funzione della tipologia a questo punto il completamento della configurazione risulta molto semplice, occorre associare i vari template con le definizioni personalizzate sia degli host da monitorare che dei servizi che occorre tenere sotto controllo. Il tutto è corredato da un sistema di notifiche di malfunzionamenti, utilizzabile via posta elettronica o SMS. I componenti principali di Nagios sono: • Monitoring daemon: è un processo lato server che implementa le funzionalità di monitoraggio e di notifica degli allarmi • Web interface: è un’applicazione Web, installabile su un qualsiasi Web Server che supporti lo standard CGI (usualmente viene utilizzato il programma Apache), che consente di visualizzare lo stato degli oggetti monitorati anche da postazioni Pasquale Catalano 566/2323 Pagina 52 di 121 diverse dal server Nagios 4.3.1 Interfaccia Web utilizzata L’interfaccia Web di Nagios mostra lo stato degli oggetti monitorati secondo diversi livelli di dettaglio. Le viste disponibili principali sono: • Status Map, che visualizza la tipologia e lo stato della rete • Status Detail, che mostra invece lo stato di ciascun servizio monitorato • Tactical Overview, che sintetizza in un’unica schermata lo stato della rete e dei servizi • Status Overview; che mostra lo stato dei servizi raggruppati secondo un criterio stabilito (tipologia, ubicazione, ecc.) • Alert History, che mostra lo storico dei problemi rilevati con possibilità di applicare filtri • Trends, che mostra l’andamento nel tempo dello stato di un servizio • Nagios consente di rendere sicuro l’accesso all’interfaccia Web, definendo utenti con differenti permessi di visualizzazione sugli oggetti monitorati Figura 35: Interfaccia Web di Nagios Pasquale Catalano 566/2323 Pagina 53 di 121 5 Sviluppo del Sistema 5.1 Strumenti Utilizzati 5.1.1 Strumento per la gestione e visualizzazione dei grafici JFreeChart è una libreria gratuita per la creazione di grafici sulla piattaforma Java. È stato progettato per l'impiego in applicazioni, applet, servlet e JSP. JFreeChart è distribuito completo di codice sorgente soggetto ai termini della GNU Lesser General Public Licence. La libreria è in grado di generare grafici a torta, a barre (regolari e sovrapposti, con un opzionale effetto 3D), grafici a linee, grafici a dispersione, diagrammi serie storiche, diagrammi di Gantt, grafici meteo, simbolo grafici, grafici combinazione e altro ancora. Ulteriori caratteristiche che include sono: • Accesso ai dati da qualsiasi implementazione delle interfacce definite • Esportazione diretta dei grafici nei formati immagine PNG (Portable Network Graphic) e JPEG (Joint Photografic Experts Group) • Esportazione in qualsiasi formato con una implementazione Graphics2D tra cui: - PDF con iText - via Batik SVG • Possibilità di aggiungere tooltip ai grafici • Possibilità di implementare uno zoom interattivo sui grafici • Gestione degli eventi del mouse sui grafici • Annotazioni JFreeChart è scritto interamente in Java e funziona su qualsiasi applicazione sviluppata sulla piattaforma Java 2 (JDK 1.2.2 o successiva). Ha bisogno anche di Jcommon, un insieme di utility già incluse comunque nell'archivio scaricabile dal sito ufficiale di JFreeChart. Pasquale Catalano 566/2323 Pagina 54 di 121 Figura 36: Esempio di grafico con la libreria JFreeChart A prescindere dal tipo, la generazione di un grafico tramite JFreeChart prevede sempre le seguenti azioni: • Creazione e popolamento di un Dataset; • Creazione di un oggetto di tipo JFreeChart tramite il corrispondente metodo della classe org.jfree.chart.ChartFactory; • Impostazione degli attributi del diagramma tramite una delle classi plot del package org.jfree.chart.plot; • Rendering del grafico tramite una delle classi del package org.jfree.chart.renderer; • Definizione dell'asse delle ascisse tramite una delle classi del package org.jfree.chart.axis. Di seguito viene presentata una descrizione dettagliata di ciascun azione inclusa nella creazione di un grafico con riferimento al lavoro sviluppato. Pasquale Catalano 566/2323 Pagina 55 di 121 Quando si definisce un grafico, c'è bisogno di un'insieme di informazioni che permette di mettere in relazione i dati da voler rappresentare. Di solito questa collezione di dati si presenta sotto forma di una tabella. In JFreeChart quest'insieme di informazioni è indicato con un Dataset, dove ogni colonna è una categoria e ogni riga è una serie. La natura dei dati può essere statica (impostata di default al momento della creazione del codice) o dinamica (attraverso dati provenienti da query su un database). La libreria mette a disposizione diversi tipologie di Dataset, ma quello utilizzato nello sviluppo del l'applicazione è stato il DefaultCategoryDataset. I principali metodi adottati per la creazione e il riempimento del Dataset sono i seguenti: • public DefaultCategoryDataset(), genera un nuovo Dataset (vuoto) • public void addValue(double value, java.lang.Comparable rowKey, java.lang.Comparable columnKey), aggiunge il valore al Dataset, precedentemente creato Successivamente si passa alla fase della scelta del tipo di grafico da visualizzare. Per tale azione la libreria mette a disposizione numerose categorie di grafico. La scelta è ricaduta sul diagramma a barre. Nella libreria la preferenza di uno specifico grafico avviene mediante l'impiego del seguente metodo: • public static JFreeChart createBarChart( String title, String categoryAxisLabel, String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls ), crea un BarChart con le seguenti caratteristiche: il titolo del grafico, etichetta asse delle categorie, etichetta asse dei valori, il Dataset, orientamento del grafico Pasquale Catalano 566/2323 Pagina 56 di 121 (verticale, orizzontale), flag che indica la presenza della legenda, generazione tooltips, generazione URL grafico. Per caratterizzare il grafico in funzione delle proprie esigenze la libreria fornisce una lista di metodi presenti nella classe CategoryPlot. Per il progetto sono stati utilizzati i seguenti: • public void setBackgroundPaint( Paint paint ), imposta il colore di sfondo al grafico • public void setDomainGridlinesVisible( boolean visible ), flag che imposta se le linee della griglia sono sono tracciate • public void setDomainGridlinePaint( Paint paint ), imposta il colore scelto alla griglia del grafico Il processo di generazione di un'immagine, o render della figura, rappresentante il grafico avviene con l'utilizzo del metodo: • public CategoryItemRender getRenderer(), restituisce un render al plot Inoltre per poter impostare determinati colori alle barre presenti nella figura si è adoperata la funzione: • public void setSeriesPaint( int series, java.awt.Paint paint ), imposta il colore scelto per una determinata serie Quindi dopo la fase di personalizzazione del grafico si giunge a salvare la figura in uno dei formati offerti dalla libreria nel seguente modo: • public static void saveChartAsPNG( java.io.File file, JFreeChart chart, int width, int height ), salva il grafico per il file specificato nel formato PNG Pasquale Catalano 566/2323 Pagina 57 di 121 5.1.2 Interfaccia di supporto della Connessione al Database La JDBC (Java DataBase Connectivity) è un'interfaccia che consente l'accesso alle basi di dati da qualsiasi programma scritto con il linguaggio di programmazione Java, indipendentemente dal tipo di DBMS utilizzato. È formata da API, completamente scritta nel linguaggio Java, che concede ai client di connettersi e interrogare il database. In pratica JDBC costituisce una sorta di layer che si interpone tra applicazione e database vero e proprio. Le applicazioni che utilizzano JDBC nella maggior parte dei casi sono utilizzabili con differenti tipi di database senza la necessità di particolari modifiche al codice. Con l'impiego di questa libreria si ha un'elevata portabilità e quindi riutilizzo del codice. JDBC svolge il suo lavoro mediante alcune interfacce, le quali vengono implementate da un set di classi specifico per ogni differente tipo di database andando così a costituire il cosiddetto driver JDBC. Le API sono collocate nel pacchetto java.sql contenenti solo poche classi concrete, per la maggior parte si tratta di interfacce indipendenti dalla base di dati che specificano il comportamento senza però dare alcuna implementazione. Figura 37: Funzionamento della JDBC Una volta configurato il driver e collocato all'interno dell'applicazione, possiamo entrare nel vivo dell'argomento. Come già precedentemente menzionato, la JDBC fornisce dei metodi che consentono l'accesso ad un qualsiasi DBMS. Pasquale Catalano 566/2323 Pagina 58 di 121 Sostanzialmente un driver JDBC consente di effettuare le seguenti operazioni: 1. Aprire una connessione al database 2. Esecuzione istruzione 3. Elaborazione del risultato 4. Chiusura della connessione La fase di connessione al database avviene con l'uso dei seguenti metodi: • Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"), caricare la classe corrispondente allo specifico driver. Quando il driver viene caricato in memoria, si registra con la classe java.sql.DriveManager come un driver per base di dati disponibile. • DriverManager.getConnection("jdbc:odbc:somedb","user","passwd"), stabilisce una connessione al database di url, user e password specificato. Il DriverManager seleziona il driver appropriato dal set di driver JDBC registrato. Dopo aver stabilito la connessione al database, passiamo alla fase in cui è possibile mandare in esecuzione istruzioni SQL attraverso i metodi: • createStatement(), crea un'oggetto Statement per l'invio di istruzioni SQL • executeQuery( String sql ), esegue l'istruzione SQL, che restituisce un singolo oggetto ResultSet. Da notare che l'istruzione SQL eseguita deve essere una SELECT • executeUpdate( String sql ), esegue l'istruzione SQL, di tipo INSERT, UPDATE o DELETE Successivamente bisogna gestire i dati provenienti dalle istruzioni SQL mandate in esecuzione. In ausilio per tale problema c'è la classe ResultSet. Il ResultSet è una tabella contenente dati che vanno a rappresentare un'insieme di informazioni provenienti dal database. Un oggetto ResultSet mantiene un cursore che punta alla riga corrente di dati. Inizialmente il cursore è posizionato prima della prima Pasquale Catalano 566/2323 Pagina 59 di 121 riga, poi da quando si invoca un metodo su ResultSet, si sposta il cursore sulla riga successiva. I metodi adoperati sono stati: • public Object getObject( String columnName ), ottiene il valore della colonna indicata nella riga corrente del ResultSet. Il tipo di oggetto ritornato sarà quello corrispondente al tipo SQL della colonna. Se il valore è un NULL di SQL, allora restituisce un null Java • public boolean next(), sposta il cursore in basso di una riga dalla sua posizione attuale Dopo aver eseguito le operazioni desiderate (prelievo, inserimento, modifica, cancellazione) sulla base di dati, occorre rilasciare le risorse allocate, in particolare l'oggetto connection, in quanto il numero totale delle connessioni disponibili è limitato e normalmente la connessione al database non viene rilasciata automaticamente quando non è più utilizzata. Quindi per poter liberare la connessione è necessario l'invocazione del seguente metodo: • public void close(), rilascia la connessione precedentemente avuta 5.1.3 Storicizzazione dei Dati: MySql Un database è un insieme di archivi strutturati che contengono dati che riguardano un unico ambito lavorativo e che concedono la gestione di una notevole quantità di dati. Quindi esso è una banca dati che concede la gestione di grosse moli di dati con il controllo dell'accesso all'informazione. Per usare le informazioni contenute in un database, occorre un sistema di gestione di basi di dati (DBMS, Database Management System). Si tratta di un insieme di programmi che permettono agli utenti di creare e mantenere una base di dati. Il DBMS è perciò un sistema software che facilita il processo di definire, costruire, manipolare e condividere basi di dati. Il modello relazionale è un modello logico di rappresentazione dei dati implementato sui Pasquale Catalano 566/2323 Pagina 60 di 121 DBMS. Le caratteristiche principali sono: • Capacità di gestire grandi moli di dati • Condivisione dei dati fra più utenti e applicazioni • Utilizzo di sistemi di protezione e autorizzazione per l'accesso ai dati stessi I DBMS più diffusi sono i Relational Database Management System (RDBMS). I database appartenenti a questa categoria si basano su una struttura cardine detta relazione, che concede di rappresentare i dati e di manipolarli attraverso operatori dell'algebra relazionale. La relazione è presentata mediante una tabella bidimensionale composta da righe e colonne. Ciascuna riga, che in terminologia relazionale viene chiamata tupla, rappresenta un'entità che noi vogliamo memorizzare nel database. Le caratteristiche di ciascuna entità sono definite invece dalle colonne delle relazioni, che vengono chiamate attributi. MySql è un database management system (DBMS) relazionale, permette la conservazione dei dati in tabelle separate piuttosto che in una unica grande entità. Possiede tutte le funzionalità di un DBMS, è un server di database infatti viene impiegato in ambienti client-server, nei quali la maggior parte delle operazioni di elaborazioni e archiviazione hanno luogo nel server, mentre il client è poco più di un terminale, il tutto attraverso un'interfaccia a caratteri disponibili sia per sistemi Unix che per Windows, anche se prevale un suo utilizzo in ambito Unix. MySql possiede un sistema di autorizzazione attraverso il quale gestisce l'accesso da parte degli utenti ai vari database. Inoltre offre flessibilità e velocità nell'accesso ai dati, consentendo una più efficace modellazione delle basi di dati. Il fatto di essere Open Source ha inoltre favorito lo sviluppo di interfacce, rilasciate ovviamente sotto GPL, in quasi tutti i linguaggi maggiormente utilizzati, soprattutto nello sviluppo di applicazioni web. L'accesso ai dati è reso possibile dall'utilizzo di SQL (Structured Query Language), in particolare viene garantito il supporto alla versione corrente dello standard definito nel ANSI/ISO SQL Standard. Pasquale Catalano 566/2323 Pagina 61 di 121 In seguito viene mostrato un riepilogo dettagliato delle caratteristiche offerte da MySql: • Velocità: risulta essere uno dei più veloci database offerti dal mercato • Usabilità: concede con estrema facilità l'installazione, la gestione e l'amministrazione rispetto a sistemi di maggiori dimensioni presenti sul mercato • Supporto di Sql: permette attraverso il linguaggio Sql di operare sulla base di dati, come tutti i moderni database • Capacità: il Server è in grado di amministrare nello stesso tempo connessioni da più Client ed è possibile accedervi adoperando diverse interfacce in grado di eseguire query e fornire i risultati. Inoltre esistono una grande quantità di interfacce di programmazione per differenti linguaggi quali C, Perl, Java, Php • Connettività e sicurezza: è autorizzato all'utilizzo della rete e i database sono accessibili in internet in modo da poter condividere i dati ovunque. Il Server gode di un meccanismo di controllo degli accessi in modo che chi non ha diritto ad accedere ai dati non può farlo e supporta connessioni criptate attraverso il protocollo SSL(Secure Socket Layer) • Portabilità: funziona su una varietà di piattaforme come Unix, Windows e OS/2 ed anche su diversi hardware • Dimensioni Ridotte: confrontandolo con i software commerciali offerti dal mercato, occupa meno spazio • Disponibilità e costi: è un progetto Open Source liberamente disponibile ed inoltre possiede una grande comunità di sviluppatori e utilizzatori in rete Inoltre, la distribuzione di MySQl fornisce i seguenti strumenti: • Programmi Client per l'accesso al Server: programma interattivo che consente di inserire delle query e visualizzarne i risultati, più una serie di utility per gestire la propria applicazione web • Una libreria Client in C per scrivere i propri programmi Pasquale Catalano 566/2323 Pagina 62 di 121 5.2 Progettazione Database In questa sezione andiamo ad esporre le fasi di studio, analisi e implementazione necessarie per la realizzazione della base di dati d'appoggio all'applicazione sviluppata. La progettazione di un database si divide in due sezioni: la progettazione concettuale e la progettazione logica. Quella concettuale ha il compito di rappresentare le informazioni che abbiamo ottenuto dalla raccolta dei requisiti con uno schema formale o più precisamente detto schema concettuale, realizzato con strumenti indipendenti dall’ambiente e dal sistema di dati che si andrà ad utilizzare durante lo sviluppo. Questo schema in pratica ci consente di organizzare i dati ad un alto livello di astrazione perché la finalità di questa fase è quella di rappresentare il contenuto informativo della base dati. La progettazione logica, invece, ci consentirà di tradurre lo schema concettuale in un preciso modello di rappresentazione dati legato al DBMS(database management system) che abbiamo a disposizione. La base di dati da realizzare dovrà occuparsi della gestione delle diverse categorie di apparato che un Data Center può presentare e delle corrispondenti misure rilevate dal monitoraggio dei servizi attivati sull'apparato. Nello specifico il database da realizzare deve concedere la memorizzazione delle informazioni riguardanti: • dati sulle categorie degli apparati monitorati • dati sui servizi attivati • informazioni sulle misure relative al monitoraggio dei servizi In una base di dati, le entità giocano un ruolo fondamentale poiché mettono in risalto le informazioni che si andranno a immagazzinare. Senza un'efficace individuazione delle stesse si avrà una cattiva progettazione di un database perché causano la perdita dei dati. Con i requisiti sopra descritti, per la nostra base di dati si evidenziano le seguenti entità: Pasquale Catalano 566/2323 Pagina 63 di 121 categoria di appartenenza di un apparato, servizio, misura. Per dare una maggiore comprensione a quanto detto sull'entità e di come esse possono essere messe in relazione, presentiamo lo schema concettuale della base di dati. Figura 38: Schema Concettuale database Dallo schema si evidenzia che Misura risulta essere una entità dell'associazione tra Categoria e Servizio. Infatti solo quando si è attivato il monitoraggio di un servizio associato ad una categoria è logico definire una misurazione. Generato il modello concettuale bisogna procedere verso la progettazione logica. Quindi si traduce lo schema concettuale prodotto nella fase di progettazione concettuale, nel modello di rappresentazione dei dati adottato dall’ambiente database scelto per la programmazione. In questa fase andiamo a definire una lista di caratteristiche tali da rendere il risultato finale il modello di rappresentazione della nostra base di dati. Il processo di passaggio dal modello concettuale in logico avviene con una trasformazione di entità e associazioni in un insieme di schemi, garantendo le proprietà di un DBMS relazionale. Pasquale Catalano 566/2323 Pagina 64 di 121 Prima di passare allo schema logico, è necessario ristrutturare lo schema concettuale ottenuto nella fase precedente. Bisogna quindi adottare dei criteri che ci permettono di effettuare la traduzione del modello concettuale in uno schema ristrutturato per poi passare ad un modello relazionale equivalente, che tenga anche conto di aspetti legati alle prestazioni delle operazioni che verranno eseguite sulla base di dati . Il modello semplificato (schema ristrutturato), equivalente a quello di partenza, al fine di semplificarne la traduzione successiva, elimina dallo schema concettuale di tutti quei costrutti non direttamente rappresentabili nel modello relazionale: • Attributi composti • Attributi Multi-valore • Gerarchie di generalizzazioni • Scelta degli identificatori primari Dal modello concettuale mostrato in figura 38, non si evidenziano né la presenza di attributi composti né Multi-valore, ma presenta una generalizzazione. Per questo tipo di associazione, si deve intraprendere una scelta, in quanto il modello relazionale non supporta tale tipo di associazione. Esistono in letteratura differenti scelte che lo sviluppatore può adottare in funzione delle proprie esigenze. La prima è quella dell'accorpamento del genitore nei figli: attributi e associazioni del genitore vanno aggiunti a tutti i figli. Possibile solo se la generalizzazione è totale ed esclusiva. La seconda risulta quella di accorpare i figli nel genitore: si aggiunge al genitore un attributo che indichi il “tipo” dell’entità (a quale entità figlia eventualmente appartiene). Si aggiungono al padre gli attributi e le associazioni dei figli, che diventano opzionali. Infine la sostituzione della generalizzazione con le associazioni: si aggiungono nuove associazioni che rappresentano la generalizzazione. I figli partecipano obbligatoriamente all’associazione, il genitore opzionalmente. Pasquale Catalano 566/2323 Pagina 65 di 121 Per il database da realizzare si sceglie quella di trasferire le informazione del padre nelle entità di specializzazione, consentendo di avere una netta separazione della storicizzazione dei dati in funzione della categoria dell'apparecchiatura quali Worker Node, Storage Element, Rete e una migliore gestione e organizzazione dei dati immagazzinati. Successivamente si prosegue con la fase in cui si scelgono su ciascuna entità presente nello schema gli identificatori primari, adottando i seguenti criteri: • Gli attributi con valori nulli non possono essere identificatori principali • Identificatori composti da pochi attributi sono da preferire a quelli con molti attributi • Un identificatore che viene utilizzato da molte operazioni per accedere alle occorrenze di una entità è da preferire agli altri Dopo aver realizzato la ristrutturazione del modello concettuale non resta che passare alla fase di traduzione nel modello logico. Quindi si procedere con la traduzione che il modello relazionale adopera per descrive le entità e associazioni presenti nel modello ristrutturato. Le entità vengono interpretate con una relazione che comprende gli attributi, in cui la chiave primaria che corrisponde all’identificatore dell’entità. Per le associazioni la soluzione da prendere dipende dalla loro cardinalità. Le associazioni binarie 1:N tra due entità A, B solitamente sono tradotte in due relazioni: relazione Ra che ha gli attributi di A; relazione Rb che ha gli attributi di B e gli attributi chiave di A (anche detti chiave esterna). Le associazioni binarie N:N tra due entità A, B vengono interpretate nel seguente modo: relazione Ra che ha gli attributi di A; relazione Rb che ha gli attributi di B; una terza relazione Rs con gli attributi chiave di A e gli attributi chiave B e inoltre tutti gli attributi dell'entità dell'associazione, sempre se essa è presente nello schema. Per avere una migliore comprensione su quanto detto fino ad ora, riportiamo un elenco Pasquale Catalano 566/2323 Pagina 66 di 121 dello schema relazionali, che si vengono a creare con le scelte effettuate. workernode(idc,nome,nomerack) storageelement(idc,nome,nomerack) rete(idc,nome,nomerack) misura_wn(idm,id,ids,data,valore) misura_se(idm,id,ids,data,valore) misura_re(idm,id,idservizio,data,valore) servizio(ids,nomeservizio,descrizione) Dal modello sopra illustrato si denota che adoperiamo per ciascun schema rappresentante la categoria dell'apparato gli stessi attributi. La scelta di utilizzare tale approccio è dettata dal fatto che concede: • maggior riusabilità delle query create e mandate in esecuzione dall'applicazione sviluppata, modificando solo il nome della tabella interessata da cui prelevare i dati • minor numero di condizioni da inserire nella clausola WHERE della query, in modo da poter effettuare l'unione delle tabelle interessate attraverso l'uso dell'operazione NATURAL JOIN Creato il modello logico della base di dati, non resta che avviare la fase di progettazione e creazione dello schema fisico costituito dall'implementazione mediante il linguaggio Sql delle relazioni sul DBMS scelto, generando le corrispondenti tabelle che andranno a costituire il database. Pasquale Catalano 566/2323 Pagina 67 di 121 5.2.1 Gestione dei dati del Database Le informazioni memorizzate all'interno della base di dati godono di vincoli assegnati durante la fase di creazione delle tabelle. Tali condizioni sono quelle riguardanti la chiave primaria, permettendo di identificare univocamente le righe all'interno della tabella e di integrità referenziale, in modo da gestire con coerenza la correlazione di dati presenti in tabelle diverse legati attraverso la chiave esterna. Durante la fase fisica di costruzione del database, quando si genera una tabella, bisogna gestire con opportune clausole l'operazione da eseguire quando si tenta di eliminare o aggiornare una chiave alla quale fa riferimento una chiave esterna. Si è giunti ad adoperare la scelta del valore No Action sia per l'eliminazione che per l'aggiornamento in modo tale da generare un errore e in eseguito il rollback dell'istruzione di DELETE o UPDATE. La scelta effettuata è motivata dal fatto che: la base di dati realizzata è utilizzata solo per avere uno storico di misure di apparati e servizi, quindi non è necessario fare eliminazioni o aggiornamenti in cascata o settare con valore ”null”. Inoltre le informazioni da immagazzinare fisicamente nel database, sono state decise in modo tale da avere una coerenza con quelle memorizzate dagli archivi utilizzati dai sistemi di monitoraggio con l'aggiunta di altri dati quale la tipologia del servizio attivato su quell'apparato che fornisce una maggiore completezza sulle informazioni salvate. In alcuni casi non è stato adoperato lo stesso tipo di dato per la rappresentazione dell'informazione. Infatti si è scelto di utilizzare un diverso tipo in grado di rappresentare la stessa informazione. Esempio per il campo data si è deciso di adoperare il tipo “Human Date1” piuttosto del tipo “Timestamp2” concedendo maggior usabilità dell'informazione. In più su ciascuna tabella vengono creati automaticamente degli indici sulla chiave primaria per poter migliorare i tempi di ricerca dei dati, ma essi non saranno più utilizzabili quando si effettuano giunzioni tra le tabelle. 1 Intendiamo il formato della data AAAA-MM-GG 2 Rappresenta il numero di secondi trascorsi dalla mezzanotte (UTC) del 1° gennaio 1970 (epoca) Pasquale Catalano 566/2323 Pagina 68 di 121 5.3 Diagrammi UML UML è un linguaggio di modellazione in grado di specificare la struttura e il comportamento di un sistema software. Ė uno strumento di comunicazione tra i diversi ruoli coinvolti nello sviluppo e nell'evoluzione dei sistemi. Mette a disposizione per lo sviluppatore una vasta gamma di diagrammi che sono classificati in: strutturali, comportamentali, comportamentali d'interazione. Sono stati adoperati per la descrizione dell'applicazione sviluppata i seguenti diagrammi: UseCase Diagram, Class Diagram, Sequence Diagram, Activity Diagram. In seguito introdurremo diagrammi UML che apparterranno a due diverse fasi del ciclo di vita dello sviluppo di un software: la fase di Analisi e la fase di Design. 5.3.1 Fase di Analisi La fase di analisi è costituita da un'indagine preliminare sul contesto in cui il prodotto software deve inserirsi e sulle caratteristiche che deve esibire. Consente di costruire un modello ( schema concettuale ) dell’applicazione completo, preciso e leggibile, indipendente da linguaggi di programmazione. Diagramma dei Casi d'uso Il diagramma dei casi d'uso descrive le funzionalità fondamentali che il sistema deve esprimere, in termini di scenari di utilizzo del sistema. Un caso d'uso rappresenta una tipica interazione tra un utente ed l'applicazione da realizzare. In altre parole, definisce un particolare modo di utilizzare il sistema, il quale offre servizi e funzionalità in risposta a eventi prodotti dagli attori. Si tratta, essenzialmente, di una rappresentazione per scoprire, chiarificare e concordare i requisiti di un sistema. Usare i casi d'uso significa: 1. Individuare chi (persone, o altri sistemi "esterni") dovrà usare il sistema 2. Chiedersi quali sono gli obiettivi che intendono conseguire usando il sistema (all'incirca, un caso d'uso per ogni obiettivo) Pasquale Catalano 566/2323 Pagina 69 di 121 Figura 39: Diagramma Caso d'uso Si approfondiscono, in termini di descrizione di ciascuna modalità d'uso, chiarendo il modo in cui inizia, le risposte che l'utilizzatore si attende dal sistema, la sequenza di passi con cui l'interazione si svolge, attraverso il formalismo di Cockburn. USE CASE #1 Popolamento Database Goal in Inserimento dei dati Contex Preconditions Esistenza del file contenente le corrispondenze tra gli apparati e nome rrd Success End Inserimento delle informazioni nel database avvenuto con successo Condition Failed End Condition Primary Utente Actor Trigger Invocazione dello script Manager.sh STEP Description Utente Sistema 1 Invocazione dello script Manager.sh 2 Interrogazione sul file.rrd da esaminare Pasquale Catalano 566/2323 Pagina 70 di 121 3 4 5 Generazione file contenente il risultato prodotto dalla query Lettura del file Inserimento dei dati nella tabella del database MySql USE CASE #2 Visualizza Grafico Goal in Il sistema mostra a video la visualizzazione del grafico Contex Preconditions Nessuna Success End Presentazione dell'immagine relativa al grafico da visualizzare Condition Failed End Condition Primary Utente Actor Trigger Invocazione pagina HTML STEP Description Utente Sistema 1 Invocazione pagina HTML 2 Prelievo dal database le informazioni necessarie 3 Popolamento del Dataset del grafico 4 Creazione del grafico 5 Generazione del file.PNG 6 Visualizzazione a schermo del grafico Pasquale Catalano 566/2323 Pagina 71 di 121 Diagramma delle Classi Il Diagramma delle Classi definisce una rappresentazione statica del sistema in termini di classi e relazioni tra classi. È il modello fondamentale fornito da UML poichè ha la caratteristica di stabilire gli elementi base del sistema software da sviluppare. Figura 40: Diagramma delle classi di analisi Pasquale Catalano 566/2323 Pagina 72 di 121 Dalla figura sopra illustrata si evidenziano le entità necessarie che permettono il funzionamento dell'applicazione sviluppata. Si fa ausilio dell'euristica three-object-type per identificare i tipi di oggetti associati a ciascuna classe. Elenco delle classi presenti: • Controller: Appartenete alla categoria Control, descrive l'entità che guida tutta l'applicazione sviluppata, nello specifico raffigura il funzionamento dello script shell/bash Manager.sh • File: Di tipo Entity, rappresenta i dati prelevati dall'interrogazione eseguita sul dispositivo monitorato • Database: Appartenente alla categoria Entity, descrive l'archivio dei dati di supporto all'applicazione • Grafico: Di tipo control, raffigura la classe che gestisce il modulo della generazione del grafico • RRD: Appartenente alla categoria Entity, rappresenta l'archivio dei dati associato ai dispositivi monitorati • Schermo: Di tipo Boundary, descrive l'entità che permette l'interazione tra il sistema e l'utente finale • Html: Appartenete alla categoria Entity, raffigura l'entità che gestisce i dati persistenti riguardante la pagina html Pasquale Catalano 566/2323 Pagina 73 di 121 Diagramma di Sequenza Attraverso il diagramma di sequenza è possibile presentare la serie temporale dei messaggi che gli oggetti si scambiano in modo tale da portare a termine una funzionalità. Essi possono corrispondere a uno scenario specifico o a un intero caso d’uso. L'immagine seguente mostra lo scambio dei messaggi che compiono gli oggetti per effettuare l'inserimento delle informazioni nel database. Figura 41: Diagramma di sequenza Nella prossima figura si rappresenta lo scambio dei messaggi che compiono gli oggetti per la visualizzazione a video delle informazioni attraverso una rappresentazione grafica. Pasquale Catalano 566/2323 Pagina 74 di 121 Figura 42: Diagramma di sequenza 5.3.2 Fase di Design In questa fase si stabiliscono le linee essenziali della struttura del sistema da realizzare, in funzione dei requisiti evidenziati dalla fase di analisi attraverso i diagrammi UML generati. Si può dire che tale fase ha lo scopo di definire con un certo livello di dettaglio la soluzione del problema. In questa fase saranno sviluppati diagrammi UML che permetteranno di avere una definizione specifica della struttura e delle caratteristiche dei singoli componenti. Pasquale Catalano 566/2323 Pagina 75 di 121 Diagramma delle Classi Figura 43: Diagramma delle Classi di Design Pasquale Catalano 566/2323 Pagina 76 di 121 Diagramma di Sequenza L'immagine seguente mostra lo scambio dei messaggi che compiono gli oggetti per effettuare l'inserimento delle informazioni nel database. Figura 44: Diagramma Sequenza di Design Pasquale Catalano 566/2323 Pagina 77 di 121 Nella prossima figura si rappresenta lo scambio dei messaggi che compiono gli oggetti per la visualizzazione a video delle informazioni attraverso una rappresentazione grafica. Figura 45: Diagramma di sequenza di design Pasquale Catalano 566/2323 Pagina 78 di 121 Diagramma di Attività I diagrammi di attività, mostrano l'evoluzione del flusso di un'attività, ognuna delle quali è definita come un'esecuzione continua non atomica all'interno di uno stato. Esso stabilisce le attività da eseguire per compiere una determinata funzionalità. Inoltre può essere adoperato per dettagliare uno specifico algoritmo. È utile per mostrare cosa accade in un processo o in un'operazione ed è considerato come parte integrante dell'analisi di sistema. In seguito viene presentato un diagramma che descrive le fasi che vanno a costituire la procedura di generazione del grafico. Figura 46: Activity Diagram Pasquale Catalano 566/2323 Pagina 79 di 121 Nella successiva rappresentazione viene illustrata la soluzione intrapresa volta a eseguire l'inserimento dell'informazione nella base di dati. Essa sarà composta dalle attività di lettura del file di testo con l'acquisizione di ciascuna riga e inserimento dei dati nel database. Figura 47: Activity Diagram Pasquale Catalano 566/2323 Pagina 80 di 121 5.3 Funzionalità offerte dal sistema L'applicazione sviluppata permette di realizzare l'operazione di popolamento di una base di dati e di eseguire interrogazioni mirate sul database, mostrando il risultato attraverso una rappresentazione grafica. Quindi concede la storicizzazione dei dati provenienti da informazioni immagazzinate dai sistemi di monitoraggio quali Cacti e Nagios, dei servizi osservati degli apparati di un Data Center come Worker Node, Storage Elemet, Router, Switch. Inoltre, il sistema consente di mostrare mediante un portale web la visualizzazione di determinati contenuti che rispondono alle esigenze richieste dall'utente; il tutto presentato con dei grafici. Sebbene il sistema sia rivolto a persone che lavorano nel campo del monitoraggio, l'interazione non deve presentare un elevato grado di complessità. Deve essere, piuttosto, fruibile da un pubblico quanto più eterogeneo possibile. Gli utenti che interagiscono con il sistema devono essere in grado di reperire l'informazione con facilità. Per questi motivi si sono adottate determinate rappresentazioni di grafico quali: a barre e a linea con area sovrapposta. Il sistema è basato sul web e su un server di database relazionale. Dunque, ha il compito di essere affidabile e poter mantenere i propri dati anche in caso di guasti (problemi di fornitura elettrica, usura dell'hardware del server, attacchi informatici). Quindi sono state pianificate delle operazioni in grado di effettuare il recupero delle informazioni perdute attraverso dei backup periodici dei dati. L'applicazione è stata sviluppata in modo tale da garantire buone prestazione, legate al tempo di risposta, nello specifico alla generazione delle immagini dei grafici da visualizzare nella pagina web del portale. Un'altra caratteristica che il sistema rispetta è la scalabilità, cioè la capacità di avere buone prestazioni se vengono fornite nuove risorse, quindi garantisce una struttura modulare, in modo che il sistema sia costituito da varie sezioni (moduli) che operano in Pasquale Catalano 566/2323 Pagina 81 di 121 maniera indipendente uno dall'altro concedendo all'applicazione di essere facilmente espandibile e modificabile. Il sistema, sviluppato con il linguaggio di programmazione orientato agli oggetti, Java, permette di poter gestire in modo efficiente le singole sezioni che vanno a costituire l'intero sistema e inoltre la portabilità, volta a consentirne l'uso di ciascun modulo in un ambiente di esecuzione diverso da quello originale, in modo semplice (poco costoso) rendendolo riusabile. In più si fa utilizzo del DBMS relazionale MySql, in quanto già presente nei sistemi di monitoraggio adottati dal Data Center per archiviare determinate informazioni, permettendo così di integrare l'applicazione sviluppata direttamente sulle macchine che ospitano i sistemi di monitoraggio. In ultima analisi, per fare in modo che il software sviluppato venga eseguito correttamente c'è bisogno delle seguenti caratteristiche: • jdk • libreria JDBC • libreria JFreeChart • database relazionale MySql Nelle sezioni successive andiamo a fornire un maggior livello di dettaglio delle funzionalità offerte dal software. 5.3.1 L'operazione di popolamento del Database L'attività del popolamento della base di dati è costituita: dal prelievo delle informazioni dagli archivi dei sistemi di monitoraggio, salvarle in un file di testo, inviare il file all'applicazione, processare i dati del file e infine inserirli nella base di dati. Quindi bisogna andare a fare un'interrogazione sul file RRD corrispondente al servizio Pasquale Catalano 566/2323 Pagina 82 di 121 dell'apparato monitorato di un determinato periodo temporale (nel nostro caso 1h). Il risultato verrà rediretto in un file di testo nominato nel seguente modo: nomeapparato:nomeservizio, in una apposita cartella chiamata nomeapparato. Questo permette di andare a raggruppare tutti i file in funzione della categoria di appartenenza dell'apparato, garantendo maggior organizzazione della distribuzione dell'informazione. Successivamente si richiama l'applicazione Applicazione.jar fornendo come input il file di testo precedentemente generato. All'interno dell'applicazione si esegue la lettura del file, si elaborano i dati del file gestendone il tipo in modo tale da non avere problemi con l'inserimento. L'ultima operazione che resta da eseguire è quella di aggiungere i dati in una specifica tabella della base di dati. Tutte le azioni sopra descritte sono inserite in un determinato script di shell/bash Manager.sh. Per effettuare l'aggiornamento delle tabelle del database con prefissata frequenza temporale, si fa utilizzo del comando crontab. Crontab1 è un procedura del sistema operativo Unix che consente la pianificazione di comandi, ovvero consente di registrarli presso il sistema per essere poi mandati in esecuzione periodicamente. Sarà sufficiente andare ad inserire nel file crontab una linea composta da una serie di campi quali minuti, ore giorno, ecc., che specificano con che frequenza e quando eseguire un comando, nel nostro caso il file Manager.sh. 5.3.1.1 File di Configurazione dell'applicazione Facendo una dettagliata analisi sui sistemi di monitoraggio utilizzati dal Data Center è stata evidenziata la seguente problematica. Quando sono stati inseriti gli apparati nei sistemi di monitoraggio gli sono stati assegnati dei nomi. Nel momento in cui si va ad attivare il monitoraggio di un servizio di un'apparecchiatura, viene generato un file RRD corrispondente. Il problema rilevato è stato quello che il nome del file RRD non corrisponde con il nome dell'apparato presente 1 Per osservare il contenuto, accedere alla sezione Allegato C Pasquale Catalano 566/2323 Pagina 83 di 121 nel sistema, perchè gli è stato assegnato un identificativo numerico. Quindi visto che per lo sviluppo dell'applicazione occorreva dire il vero nome dell'apparato e non l'identificativo numerico, si è proceduto nel seguente modo: grazie all'ausilio di Centreon, attraverso la sua interfaccia web, si è potuti andare scrivere le vere relazioni tra il nome apparato e il nome del file RRD. Con tale lista di informazioni si è generato un file di input che sarà il parametro d'ingresso dello script Manager.sh. Il file di testo è costituto dai seguenti campi: • nomedns dell'apparato • nome servizio monitorato • nome file RRD In particolare se ad un apparato sono stati assegnati più servizi da monitorare allora nel file compariranno tante righe quanti sono i servizi. Figura 48: File di input dei WorkerNode 5.3.1.2 File di supporto per le relazioni del Database In aiuto allo sviluppo dell'applicazione è stato utile generare un file di testo che riporta le corrispondenze tra le categorie di classificazione degli apparati monitorati e il nome delle loro relative tabelle nella basi di dati. Questo fa si che una una volta invocata l'applicazione Applicazione.jar con il nome del file di testo contente il risultato dell'interrogazione dal RRD, dà la possibilità di conoscere già quali tabelle del Pasquale Catalano 566/2323 Pagina 84 di 121 database adoperare per quel determinato file di testo passato in input. Quindi si crea un file di testo che avrà tante righe quante sono le categorie degli apparati di cui si vuole fare uno storico. Inoltre ciascuna riga sarà costituita da campi che rappresenteranno il nome delle tabelle in relazione con quella classe di apparato, utilizzando come separatore il carattere ”:”. Una volta generato il file con le caratteristiche sopra citate, sarà adoperato dall'applicazione nel seguente modo. Dopo l'operazione di apertura del file, nell'applicazione sarà creata la seguente struttura dati: TreeMap<String,LinkedList<String>> La TreeMap è una struttura dati che implementa tabelle attraverso un tipo particolare di alberi binari di ricerca. La tecnica di memorizzazione è caratterizzata dal fatto che le chiavi devono essere ordinabili; il costo dell'inserimento, della ricerca e della cancellazione è nell'ordine del logaritmo del numero di chiavi presenti; non ci si deve preoccupare del numero degli elementi presenti nell'albero in quanto la struttura cresce in modo naturale ed efficiente. Figura 49: Esempio Della Struttura Dati Pasquale Catalano 566/2323 Pagina 85 di 121 Nel nostro caso le chiavi della struttura saranno le categorie degli apparati mentre la linkedlist sarà costituita dai nomi delle tabelle in relazione con la classe delle apparecchiature. Con questa metodologia adottata ci permette di rendere il lavoro modulare in grado di non stravolgerlo quando si presentano modifiche da fare. Ad esempio nel nostro caso quando si aggiunge una nuova categoria di un apparato di cui storicizzare i dati, basta aggiungere nel file una nuova riga contenenti il nome della categoria e i nomi delle tabelle in relazione con essa. 5.3.1.3 Il Parser sviluppato Il parser è un modulo dell'applicazione sviluppata che ciclicamente esamina un file di testo, il quale viene creato dall'interrogazione eseguita sugli archivi RRD, contenete informazioni sulle misure assunte da un servizio monitorato e le trasferisce all'interno di un database. Dal momento che i dati inseriti nella base di dati devono garantire gli aggiornamenti che assumono i valori dei servizi monitorati nel tempo, occorre che il parser venga eseguito periodicamente attraverso un'azione automatizzata. Infatti si adopera il comando delle macchine unix crontab, che consente di effettuare ad intervalli di tempo stabiliti l'esecuzione di comandi. Il principale elemento di cui necessita il modulo del parser è il file di testo che deve andare ad analizzare. Tale documento viene aggiornato con un intervallo temporale della durata di un'ora per ciascuna apparecchiatura monitorata, occupando dimensioni sul disco di pochi KB in quanto il file contiene misure osservate ogni 5min. Esso ha una specifica formattazione: la prima riga contiene i nomi dei data source associati al RRD, dalla terza riga in poi comprende informazioni riguardanti la data e ora dell'osservazione, con le relative misure associate. I campi su ciascuna riga sono separati mediante il carattere “:”. Quindi la prima operazione che il parser deve eseguire è quella di aprire lo stream al file di testo da esaminare. Dopo essersi posizionati sulla terza riga del file, si esplode la riga Pasquale Catalano 566/2323 Pagina 86 di 121 rispetto al carattere “:” ottenendo un struttura dati composta dallo stesso numero di campi presenti sulla riga. Si procede andando a gestire ciascun campo nel seguente modo: • il campo contenente la data lo si converte dal formato Timestamp in formato Date(AAAA-MM-GG), agevolando le operazioni successive da eseguire sul database epoch=Long.parseLong(dato[0]); data=new java.text.SimpleDateFormat("yyyy/MM/dd").format(new java.util.Date (epoch*1000)); • il campo contenente la misura assunta dal servizio lo si converte in un formato Float in quanto dal file si presenta come Stinga. Da notare, siccome tale attributo assume anche la stringa “nan” si associa valore 0.0 . Terminato con la gestione dei campi, siamo pronti per inserire la riga del file corrente nella specifica tabella del database. Prima di effettuare tale operazione andiamo a ricavare : • id della riga della tabella da inserire SELECT count(idm)+1 from tabella • id associato al servizio attivato sull'apparato monitorato • id associato all'apparato osservato Dopo il recupero di tali informazioni si possono andare ad inserire i dati nelle tabelle del database, attraverso il seguente comando Sql Pasquale Catalano 566/2323 Pagina 87 di 121 INSERT INTO tabella VALUES(id,id_entita,id_servizio,data,valore) Tutto questo procedimento bisogna eseguirlo affinché non si esegue la completa scansione del file di testo. 5.4.2 L'interfaccia Utente La funzionalità riguardante la visualizzazione dell'informazione consente di effettuare le seguenti azioni: prelevare dati dal database con delle specifiche query e mostrare a video il risultato attraverso dei grafici. Tali azioni verranno eseguite in modi differenti in funzione dei dati che devono essere mostrati a video. Per la categoria degli apparati di rete ( Router, Switch ) procederemo utilizzando direttamente la funzione graph di RRDTool per plottare a video i dati con un grafico composto da linea e area sovrapposte, di cui una raffigura il traffico in ingresso e l'altra il traffico in uscita, favorendo all'utente una maggior usabilità dell'informazione in quanto permette la visualizzazione contemporanea delle misure assunte dai due traffici. La scelta di adoperare questo approccio è dettata dal fatto che ai dati appartenenti agli apparati di rete non c'è la necessità di gestirli attraverso funzioni matematiche (es: media). Mentre per le restanti categorie bisogna procedere con un'interrogazione su ciascuna tabella rappresentante la classe dell'apparato (Worker Node, Storage Element, …) presente all'interno del database. Una caratteristica che l'interrogazione deve presentare è quella di andare a selezionare informazioni in modo tale da soddisfare le necessità dell'utente. L'estrazione dell'informazione dalla base di dati è fatta in funzione ad un indicatore che Pasquale Catalano 566/2323 Pagina 88 di 121 ci permette di fornire una percentuale della media di consumo del servizio dell'apparato monitorato. In particolare le misure estratte faranno riferimento ad uno specifico arco temporale (giorno attuale, giorno precedente). Esempio chiarificatore di come sono strutturate le query: select nome, avg(valore) as media, data from (tabella apparato) where (data=datacorrente) group by nome select nome, avg(valore) as media, data from (tabella apparato) where (data=datacorrente -1day) group by nome Dopo questa fase, si introducono i risultati dell'interrogazione effettuata all'interno di una struttura dati di supporto al grafico. Successivamente si compiono azioni che concedono la personalizzazione del grafico da mostrare come: etichette assi cartesiani, legenda, unità di misura, colori. La fase successiva sarà quella di generare il grafico e di creare la corrispondente immagine con estensione .PNG, intitolata con il nome della categoria di appartenenza dell'apparato. Il grafico utilizzato per tale rappresentazione sarà costituito da una lista di barre(giorno attuale, giorno precedente) raggruppate per serie(nome dell'apparato). Tutte le attività sopra descritte sono contenute nell'applicazione sviluppata Applicazione.jar. Inoltre per essere mandata in esecuzione, bisogna invocare l'applicazione con il nome della cartella a cui fa riferimento la categoria dell'apparato. Anche per questa funzionalità è di fondamentale aiuto la struttura dati che viene generata con la lettura del file delle corrispondenze, dando informazione sulle relazioni Pasquale Catalano 566/2323 Pagina 89 di 121 delle tabelle del database. Generati i file.PNG, è necessario farli visualizzare all'utente. Il lavoro di visualizzazione viene affidato alle pagine HTML Index.html, Index1.html dove verranno richiamate le immagini. Attraverso le regole di un CSS andremo a settare alcune proprietà che le figure devono assumere. Richiamando l'url della pagina HTML in una portlet Iframe, vengono introdotte le immagini nel portale e quindi osservabili dall'utente. Figura 50: Funzionamento del sistema Pasquale Catalano 566/2323 Pagina 90 di 121 6 Risultati Ottenuti In questo capitolo andiamo a descrivere i risultati del sistema sviluppato, prodotti dopo aver portato a termine l'operazione di popolamento della base di dati, presentati attraverso la consultazione di un portale web. In particolare, all'utente autorizzato del Data Center attraverso il portale deve avere informazioni circa sui servizi delle macchine monitorate in modo tale da trarre delle conclusioni immediate. Dunque nel portale di riferimento del Data Center sono state introdotte due portlet Iframe in cui il valore di ciascuna url è settato alla rispettiva pagina: Index.html e Index1.html, ognuna contenente file.PNG rappresentanti i grafici. Si è deciso di procedere con l'ausilio di due portlet sia per una scelta riguardante la logica di visualizzazione dei dati all'interno del sito web, quindi per poter mostrare le informazioni nel modo più chiaro possibile, sia per differenziare il contenuto rappresentato in ciascuna pagina web. Infatti nella prima pagina web andiamo ad inserire i file che vanno a costituire l'andamento delle misure assunte dai servizi monitorati sulle apparecchiature, quali: Worker Node e Storage Element; nella seconda invece vengono raccolti i file che raffigurano informazioni attribuite ai dispositivi di rete. I servizi attivati sui dispositivi monitorati e di seguito visualizzati dai grafici, sono quelli riguardanti: • il check_load per i Worker Node • il check_disk per gli Storage Element • traffico_in/traffico_out per le apparecchiature di rete. Come già precedentemente detto si è adottata una diversa rappresentazione dell'informazione in funzione del tipo di dato da trattare, per garantire una maggiore leggibilità dei dati. Pasquale Catalano 566/2323 Pagina 91 di 121 Inoltre il contenuto all'interno delle portlet sarà aggiornato di ogni ora, in modo da garantire una coerenza con gli aggiornamenti effettuati sulla base di dati. Di seguito si illustra il contenuto informativo di ciascuna portlet. Figura 51: Portlet con grafici degli apparati Worker Node, Storage Element Da notare che in ciascun grafico ogni serie rappresentata, fa riferimento al periodo temporale (giorno corrente, giorno precedente). Inoltre i valori assunti dalle etichette Pasquale Catalano 566/2323 Pagina 92 di 121 sull'asse delle ascisse sono quelli riguardanti al nome_dns delle apparecchiature, mentre sull'asse delle ordinate ci sono i valori assunti dai servizi monitorati. Per quanto riguarda il servizio check_load abbiamo un valore che corrisponde alla percentuale di utilizzo, mentre per il servizio check_disk si ha il numero di byte usufruiti. I diagrammi visualizzati rispettano le caratteristiche fornite dalla libreria JFreeChart di supporto all'applicazione. Figura 52: Portlet con grafici degli apparati di rete I due grafici sopra raffigurati rappresentano: • il primo la quantità di banda ,di input e di output, fornita dall'ente GARR al Data Center Pasquale Catalano 566/2323 Pagina 93 di 121 • il secondo la quantità reale di banda che arriva al Data Center dopo aver attraversato diversi dispositivi che vanno a costituire la rete di comunicazione dell'informazione Da notare che i dati rappresentati sono presi direttamente dalle interrogazioni effettuate sugli archivi RRD associati ai dispositivi e inoltre la generazione e personalizzazione del grafico avviene attraverso la funzione graph di RRDTool. Nella visualizzazione dell'informazione si è deciso di mostrare il contenuto di un'intera giornata, ma nonostante ciò, le immagini del grafico vengono aggiornate lo stesso a specifici periodi temporali di un'ora. In entrambi i grafici si denota che il traffico in input viene rappresentato mediante delle aree colorate di verde, mentre per il traffico di output si adotta una semplice linea di colore blu. In conclusione si può asserire che i grafici ottenuti sono di aiuto all'utilizzatore del Data Center, in quanto si presentano in modo tale da far capire con estrema chiarezza e leggibilità le informazioni al consumatore. Pasquale Catalano 566/2323 Pagina 94 di 121 7 Conclusioni Il lavoro di tesi svolto presso il centro S.Co.P.E. mi ha permesso di raggiungere determinate competenze sia nel campo dei sistemi di monitoraggio di reti, sia nell'ambito dei portali e soprattutto degli Enterprise Open Portal. Grazie al progetto sviluppato, è stato possibile realizzare un'applicazione che consente di storicizzare i dati da un sistema di archiviazione, basato sulla strategia roun-robin, in una base di dati che adopera il DBMS MySql, per gestire i dati in modo avanzato, sottoponendoli ad operazioni orientate a rispecchiare in modo molto più specifico le esigenze dell'utente. Inoltre, è stato possibile integrare la rappresentazione di alcuni servizi attivi sulle apparecchiature monitorate mediante una visualizzazione grafica, adoperando delle portlet Iframe inserite opportunamente all'interno del portale del Data Center. L'approccio adottato per la risoluzione dello sviluppo del lavoro, ha consentito ai framework adoperati dal centro di ricerca, una maggiore usabilità e personalizzazione dei dati monitorati, fornendogli delle funzionalità aggiuntive. La visualizzazione dei grafici all'interno del portale ha permesso, inoltre, di ampliare le caratteristiche del sistema consentendo una navigazione semplice e intuitiva tra i vari apparati monitorati con la possibilità di visualizzare le informazioni circa su l'andamento dello stato di un particolare dispositivo, garantendo al consumatore dei feedback sempre in aggiornamento, grazie alle continue interrogazioni effettuate ai dispositivi per la generazione del grafico a intervalli temporali di un'ora. Da un'analisi fatta attentamente è sorto un aspetto da tenere in considerazione; quello dovuto al fatto che, in caso di modifiche o aggiunte al gruppo di apparati monitorati, i file di configurazione dovranno essere aggiornati o creati direttamente dall'utente. Quindi per i successivi sviluppi sarebbe meglio ridurre il numero di operazioni da far Pasquale Catalano 566/2323 Pagina 95 di 121 eseguire all'utente per garantire il corretto funzionamento dell'applicazione. Facendo riferimento sempre ad una futura versione, un miglioramento potrebbe riguardare una più accurata gestione dei grafici, consentendo di avere maggiore personalizzazione sulle informazioni da voler visualizzare, introducendo all'interno dell'applicazione una interfaccia costituita da una form che andrà a contenere dati che avranno il compito di filtro per il recupero delle informazioni dalla base di dati e per poi essere visualizzate. Pasquale Catalano 566/2323 Pagina 96 di 121 Appendice A Di seguito andiamo a mostrare il codice relativo allo sviluppo del progetto Applicazione.jar costituito dalle classi java: Database.java, Parse.java, Grafici.java, Main.java. Database.java: package media; import import import import import com.mysql.jdbc.Connection; com.mysql.jdbc.Statement; java.sql.DriverManager; java.sql.ResultSet; java.sql.SQLException; /* * * @author Pasquale Catalano */ /* * Classe che gestisce la connessione al database MySql * mediante il driver JDBC fornito da Java */ public class Database { //Variabili per la connessione al database static public String host="pc38.scope.unina.it"; static public String test="pc38"; static public String porta="3306"; static public String user="root"; static public String password="scope01"; static private Connection defaultConnection; /* * Restituisce la connessione di default al DB. */ Pasquale Catalano 566/2323 Pagina 97 di 121 static public Connection getDefaultConnection() throws SQLException { //Se non è già presente una connessione, ristabilisce quella di default. if (defaultConnection==null || defaultConnection.isClosed()) defaultConnection=(Connection) DriverManager.getConnection("jdbc:mysql://"+host+":"+porta+"/ "+test+"?user="+user+"&password="+password); return defaultConnection; } /* * Effettua una query e restituisce il primo valore */ static public int EseguiComandiModificaSQL(String query) { //Dichiarazione variabili Connection con; Statement st; int risultato=0; try { con=getDefaultConnection(); st=(Statement) con.createStatement(); risultato=st.executeUpdate(query); } catch (SQLException e) { System.out.println(e.getMessage()); } return risultato; } //Effettura una query e restituisce il ResultSet static public ResultSet EseguiComandoSelect(String query) { Connection con; Statement st; ResultSet rs = null; try { con=getDefaultConnection(); Pasquale Catalano 566/2323 Pagina 98 di 121 st=(Statement) con.createStatement(); rs=st.executeQuery(query); } catch (SQLException e) { System.out.println(e.getMessage()); } return rs; } /* * Carica il driver JDBC. */ static { try { Class.forName("com.mysql.jdbc.Driver"); } catch (Exception e) { System.out.println(e.getMessage()); } } } Parse.java: package media; import import import import import import import import java.io.BufferedReader; java.io.FileNotFoundException; java.io.FileReader; java.io.IOException; java.sql.ResultSet; java.sql.SQLException; java.util.LinkedList; java.util.TreeMap; Pasquale Catalano 566/2323 Pagina 99 di 121 /* * * @author Pasquale Catalano */ /* * Classe che gestisce il Parser dei file di testo * ricevuti come input e inoltre carica in una struttura, * le corrispondenze tra le tabelle del database */ public class Parse { /* * Metodo statico che riceve in input il nome del file di * testo contenente le relazioni * tra le tabelle del database, ne effettua la scansione e * costruisce una struttura dati * TreeMap costituita la LinkedList di stringhe * Input: nome del file * Output: Riferimento alla TreeMap */ public static TreeMap CaricaFile(String nomefile) throws FileNotFoundException, IOException { //Dichiarazione variabili FileReader r; BufferedReader buf; String riga=null; String[] valori; LinkedList<String> lista; //Creazione di una TreeMap con chiave di tipo stringa a cui viene associata una LinkedList di stringhe TreeMap<String,LinkedList<String>> elenco= new TreeMap<String,LinkedList<String>>(); //Apertura file di testo r=new FileReader(nomefile); buf = new BufferedReader(r); //Lettura della prima riga riga=buf.readLine(); // Affinchè il file contenga una riga Pasquale Catalano 566/2323 Pagina 100 di 121 while( riga != null) { //Si esplode la riga rispetto al carattere":" valori=riga.split(":"); //Si crea la LinkedList lista=new LinkedList<String>(); //Si aggiungono i valori alla LinkedList lista.add(valori[1]); lista.add(valori[2]); //Si aggiunge la LinkedList alla TreeMap con chiave valori[0] elenco.put(valori[0], lista); riga=buf.readLine(); } //Chiusura Stream file r.close(); return elenco; } /* * Metodo che esegue il Parser sul file dei dati contenente * l'interrogzione dei file RRD,ne gestisce i valori letti, * li coverte e l'inserisce nella specifica tabella del * database * Input: nome del file da esaminare, struttura delle * relazione tra le tabelle del database * Output: Poplamento tabella del database */ public void InsertValori(String nomefile,TreeMap struttura) throws FileNotFoundException, IOException, SQLException { //Dichiarazione variabili FileReader r; BufferedReader buf; ResultSet rs; String[] dato; String inputLine,data,query; long epoch; double valore; int id,id_entita,id_servizio; LinkedList<String>tabelle = null; Pasquale Catalano 566/2323 Pagina 101 di 121 //Apertura file di testo r=new FileReader(nomefile); buf = new BufferedReader(r); //Si esplode il nome del file in modo tale da prelevare il nome dell'apparcchiatura e del servizio monitorato String[] elemento = nomefile.split(":"); //Se l'apparato è un Workernode if (elemento[0].contains("workernode")) //Si prendono le tabelle del database in relazione a tale apparato tabelle=(LinkedList<String>) struttura.get("wn"); //Se l'apparato è un StorageElement else if (elemento[0].contains("storageelement")) //Si prendono le tabelle del database in relazione a tale apparato tabelle=(LinkedList<String>) struttura.get("se"); //Se l'apparato è di Rete else //Si prendono le tabelle del database in relazione a tale apparato tabelle=(LinkedList<String>) struttura.get("re"); //Si esclude dalla lettura le prime due righe del file di cui una vuota e una contente il nome del servizio for(int i=0;i<=1;i++) inputLine=buf.readLine(); inputLine=buf.readLine(); //Affinchè il file contenga una riga while( inputLine != null) { //Si esplode la riga letta dal file rispetto al carattere":" dato=inputLine.split(":"); //Si converte la data dal formato UnixEpoch in un formato Date epoch=Long.parseLong(dato[0]); data = new java.text.SimpleDateFormat("yyyy/MM/dd").format(new java.util.Date (epoch*1000)); Pasquale Catalano 566/2323 Pagina 102 di 121 dato[1]= dato[1].trim(); //Gestione dei valori che può assumere l'array dato[] fatta eccezione del primo valore //Se contiene stringhe tali da poter eseguire la conversione in un double if (!dato[1].matches("nan")) { //Conversione del valore da stringa a double dato[1]=dato[1].replace(',','.'); valore=Double.parseDouble(dato[1]); } //Altrimenti se contiene la stringa nan assegno alla variabile valore 0 else valore=0.0; //Si prepara la query per prelevare l'ultimo id inserito nella tabella in modo rale da fare l'autoicremento query="SELECT count(idm)+1 from "+tabelle.get(1); //Si manda in esecuzione la query rs=Database.EseguiComandoSelect(query); rs.next(); //Si converte il risultato ottenuto dalla query in un intero id=Integer.parseInt(rs.getObject(1).toString()); //Si prepara la query per conoscere l'id associato all'apparato query="SELECT id from "+tabelle.get(0)+" where nome='"+elemento[0]+"'"; //Si manda in esecuzione la query rs=Database.EseguiComandoSelect(query); rs.next(); //Si converte il risultato ottenuto dalla query in un intero id_entita=Integer.parseInt(rs.getObject(1).toString()); //Si prepara la query per conoscere l'id associato al servizio query="SELECT ids from servizio where Pasquale Catalano 566/2323 Pagina 103 di 121 nomeservizio='"+elemento[1]+"'"; //Si manda in esecuzione la query rs=Database.EseguiComandoSelect(query); rs.next(); //Si converte il risultato ottenuto dalla query in un intero id_servizio=Integer.parseInt(rs.getObject(1).toString()); //Si prepara il comando Sql per inserire le informazioni nel database query="INSERT INTO "+tabelle.get(1)+" VALUES ("+id+","+id_entita+","+id_servizio+" ,'"+data+"',"+valore+")"; //Si manda in esecuzione il comando Database.EseguiComandiModificaSQL(query); //Si procede alla riga successiva del file inputLine=buf.readLine(); } //Chiusura Stream file r.close(); } } Grafico.java: package media; import import import import import import import import import import import import java.awt.Color; java.awt.GradientPaint; java.io.File; java.io.IOException; java.sql.ResultSet; java.sql.SQLException; java.util.LinkedList; java.util.TreeMap; org.jfree.chart.ChartFactory; org.jfree.chart.ChartUtilities; org.jfree.chart.JFreeChart; org.jfree.chart.axis.CategoryAxis; Pasquale Catalano 566/2323 Pagina 104 di 121 import import import import import import org.jfree.chart.axis.CategoryLabelPositions; org.jfree.chart.axis.NumberAxis; org.jfree.chart.plot.CategoryPlot; org.jfree.chart.plot.PlotOrientation; org.jfree.chart.renderer.category.BarRenderer; org.jfree.data.category.DefaultCategoryDataset; /* * * @author Pasquale Catalano */ /* * Classe che gestisce il prelievo dei dati dal database, li * inseririsce nel Dataset del del grafico, inoltre genera * l'immagine.PNG rappresentante l'andamento delle misure * dei dispositivi monitorati */ public class Grafico { /* Metodo che consente di popolare una struttura dati * "Dataset" di appoggio al grafico. * Input: nome apparecchiatura monitorata, struttura * contenente le corrispondenze delle tabelle del * database * Output: Riferimento alla struttura dati del grafico */ public DefaultCategoryDataset createDataset(String nome, TreeMap struttura) throws SQLException { //Dichiarazione delle variabili DefaultCategoryDataset dataset=new DefaultCategoryDataset(); String nservizio=null; ResultSet rs = null; LinkedList<String> tabelle = null; SimpleDateFormat f; String Datacorrente; String[] valore; int giorno; String Dataprecedente; Pasquale Catalano 566/2323 Pagina 105 di 121 //Se l'apparato è un WorkerNode if ( nome.matches("workernode")) //Si prendono le tabelle del database in relazione a tale apparato tabelle=(LinkedList<String>) struttura.get("wn"); //Se l'apparato è un StorageElement else if (nome.matches("storageelement")) //Si prendono le tabelle del database in relazione a tale apparato tabelle=(LinkedList<String>) struttura.get("se"); //Se l'apparato è di Rete else //Si prendono le tabelle del database in relazione a tale apparato tabelle=(LinkedList<String>) struttura.get("re"); //Si prepara e si manda in esecuzione la query per conoscesere quali sono i servizi attivivati sull'apparato rs=Database.EseguiComandoSelect("select distinct nomeservizio from"+tabelle.get(1)+" natural join servizio"); rs.next(); //Si converte il risultato ottenuto dalla query in un intero nservizio=rs.getObject(1).toString(); //Gestione della data corrente f = new SimpleDateFormat("yyyy/MM/dd"); Datacorrente=f.format(new Date()); //Gestione della data precedente a quella corrente valore=Datacorrente.split("/"); giorno=Integer.parseInt(valore[2]); giorno=giorno-1; Dataprecedente=valore[0]+"/"+valore[1]+"/"+giorno.toString; //Si prelevano dal database le informazioni riguardanti il nome dell'apparato e media delle misura assunte dal //servizo dell'apparato monitorato nel giorno corrente Pasquale Catalano 566/2323 Pagina 106 di 121 rs=Database.EseguiComandoSelect("select nome, avg(valore) as media, data from "+tabelle.get(0)+" w natural join "+tabelle.get(1)+" natural join servizio s where s.nomeservizio='"+nservizio+"' and data='"+Datacorrente+"' group by (w.nome)"); //Si scandisce il risultato dell'interrogazione while (rs.next()) { //Si inseriscono le informazioni del database nella struttura del grafico dataset.addValue(Double.parseDouble(rs.getObject(2).toSt ring()),rs.getObject(3).toString(), rs.getObject(1).toString()); } //Si prelevano dal database le informazioni riguardanti il nome dell'apparato e media delle misura assunte dal //servizo dell'apparato monitorato nel precedente al giorno corrente rs=Database.EseguiComandoSelect("select nome, avg(valore) as media, data from "+tabelle.get(0)+" w natural join "+tabelle.get(1)+" natural join servizio s where s.nomeservizio='"+nservizio+"' and data='"+Dataprecedente+"'group by (w.nome)"); //Si scandisce il risultato dell'interogazione while (rs.next()) { //Si inseriscono le informazioni del database nella struttura del grafico dataset.addValue(Double.parseDouble(rs.getObject(2).to String()),rs.getObject(3).toString(), rs.getObject(1).toString()); } return dataset; } /* Metodo che consente di creare il grafico a barre e di * visualizzarlo attraverso la generazione Pasquale Catalano 566/2323 Pagina 107 di 121 * di un'immagine PNG. * Input: nome apparecchiatura monitorata, struttura * contenente le corrispondenze delle tabelle del * database * Output: Immagine.PNG */ public Grafico(String nome, TreeMap struttura) throws IOException, SQLException { //Dichiarazioni delle variabili String titolo = null,nomefile = null, legenda=null; GradientPaint gp1 = null,gp0 = null; DefaultCategoryDataset dataset=createDataset(nome, struttura); //Se l'apparato è un WorkerNode if (nome.matches("workernode")) { //Si gestiscono le informazioni da plottare sul grafico tipo: nome , legenda asse y, colori titolo="Monitoragio Workernode"; nomefile="workernode" ; legenda="Consumo (%)"; gp0 = new GradientPaint( 0.0f, 0.0f, Color.blue, 0.0f, 0.0f, new Color(0, 0, 64) ); gp1 = new GradientPaint( 0.0f, 0.0f, Color.red, 0.0f, 0.0f, new Color(64, 0, 0) ); } //Se l'apparato è un WorkerNode else { //Si gestiscono le informazioni da plottare sul grafico tipo: nome , legenda asse y, colori titolo="Monitoragio StorageElement"; nomefile="storageelement" ; legenda="Consumo (Byte)"; gp0 = new GradientPaint( Pasquale Catalano 566/2323 Pagina 108 di 121 0.0f, 0.0f, Color.orange, 0.0f, 0.0f, new Color(Color.orange.getRed(),Color.orange.getGreen(),Color.oran ge.getBlue()) ); gp1 = new GradientPaint( 0.0f, 0.0f, Color.blue, 0.0f, 0.0f, new Color(Color.blue.getRed(),Color.blue.getGreen(),Color.blue.get Blue()) ); } //Creazione del Diagramma a Barre JFreeChart chart = ChartFactory.createBarChart( // Titolo del grafico titolo, // Etichetta asse ascisse "", // Etichetta asse ordinate legenda, // Dati del grfico dataset, //Orienntamento del grafico PlotOrientation.VERTICAL, true, false, false ); //Si crea oggetto plot per effettuare la personalizzazione el grafico CategoryPlot plot = (CategoryPlot) chart.getPlot(); //Impostazioni caratteristiche del grafico plot.setBackgroundPaint(Color.lightGray); plot.setDomainGridlinePaint(Color.white); plot.setDomainGridlinesVisible(true); plot.setRangeGridlinePaint(Color.white); Pasquale Catalano 566/2323 Pagina 109 di 121 final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setStandardTickUnits(NumberAxis.createIntege rTickUnits()); // si disabilitano le bar outlines BarRenderer renderer = (BarRenderer) plot.getRenderer(); renderer.setDrawBarOutline(false); // Impostazioni colori per le barre del grafico renderer.setSeriesPaint(0, gp0); renderer.setSeriesPaint(1, gp1); //Gestione posizione etichette grafico CategoryAxis domainAxis = plot.getDomainAxis(); domainAxis.setCategoryLabelPositions( CategoryLabelPositions.createUpRotationLabelPositi ons(Math.PI / 6.0) ); //Esportazione del grafico in un'immagine PNG ChartUtilities.saveChartAsPNG(new File(nomefile+".png"), chart,2000,1000); } } Main.java: package media; import import import import import java.io.FileNotFoundException; java.io.IOException; java.sql.SQLException; java.util.LinkedList; java.util.TreeMap; /* * * @author Pasquale Catalano */ /* * Classe che gestisce il flusso delle chiamate ai vari Pasquale Catalano 566/2323 Pagina 110 di 121 * moduli dell'applicazione */ public class Main { /* * Metodo che prende in input il nome del file su cui * eseguire il Parser */ public static void main(String[] args) throws FileNotFoundException, IOException, SQLException { //Dichiarazione variabili TreeMap<String,LinkedList<String>> struttura; struttura=Parse.CaricaFile("Corrispondenze.txt"); if (args[0].contains(“:”)) { Parse file=new Parse(); file.InsertValori(args[0],struttura); } else { Grafico chart=new Grafico (args[0], struttura); } } } Pasquale Catalano 566/2323 Pagina 111 di 121 Appendice B Nella presente appendice si mostrano i contenuti che vanno a realizzare gli script di shell e la pagina Html necessari per il funzionamento dell'applicazione quali: Manager.sh e Grafici.sh e Index.html. Il primo contiene informazioni riguardanti la gestione dell'intera applicazione; nel secondo sono contenuti i comandi di RRDTool per la generazione del grafico; nella pagina Html sono inseriti contenuti che mostrano i grafici ottenuti sia dal progetto java sia dai comandi di RRDTool, di ausilio alla portlet Iframe. Manager.sh: #!/bin/bash # Script che effettua la gestione dell'applicazione eseguendo su ciascun # dispositivo l'interrogazione al file.RRD e chiama l'applicazione per il # popolamento del database. Inoltre effettua chiamate per la visualizzazione # dei grafici degli apparati monitorati riga=$(cat $1 | awk ' (NR >1) {print $0}') for i in $riga do nome=$(echo $i| awk -F ":" '{print $1}') servizio=$(echo $i| awk -F ":" '{print $2}') rrd=$(echo $i| awk -F ":" '{print $3}') nomecartella=$(echo $1 | sed s/'_'/''/g) if [ ! -d "/var/www/html/10-12/$nomecartella" ] then mkdir $nomecartella fi cd /var/www/html/10-12/$nomecartella rrdtool fetch /var/lib/centreon/metrics/$rrd AVERAGE -s Pasquale Catalano 566/2323 Pagina 112 di 121 end-1h -e $(date +%s) >$nome:$servizio java -jar /var/www/html/10-12/Media/dist/Applicazione.jar $nome:$servizio done cd /var/www/html/10-12/$nomecartella java -jar /var/www/html/10-12/Media/dist/Applicazione.jar $nomecartella ./Grafici.sh Grafici.sh: #!/bin/bash # Comando di shell che attraverso la chiamata della funzione Graph di RRDTool # genera il file.PNG rappresentante il grafico del traffico di input e output # fornito al Data Center dal GARR data=$(date +%s) /usr/bin/rrdtool graph - \ --imgformat=PNG \ --start=-86400 \ --end=-300 \ --title='Quantità di banda fornita dal GARR' \ --rigid \ --base=1000 \ --height=120 \ --width=600 \ --alt-autoscale-max \ --lower-limit=0 \ --vertical-label='bits per second' \ --slope-mode \ --font TITLE:12: \ --font AXIS:8: \ Pasquale Catalano 566/2323 Pagina 113 di 121 --font LEGEND:10: \ --font UNIT:8: \ DEF:a="/var/www/cacti/rra/routeratlas_traffic_in_81.rrd":traffic_in:AVERAGE:start='end1d':end=$data \ DEF:b="/var/www/cacti/rra/routeratlas_traffic_in_81.rrd":traffic_out:AVERAGE:start='end1d':end=$data \ CDEF:cdefa=a,8,* \ CDEF:cdefe=b,8,* \ AREA:cdefa#00CF00FF:"Inbound" \ GPRINT:cdefa:LAST:" Current\:%8.2lf %s" \ GPRINT:cdefa:AVERAGE:"Average\:%8.2lf %s" \ GPRINT:cdefa:MAX:"Maximum\:%8.2lf %s\n" \ LINE1:cdefe#002A97FF:"Outbound" \ GPRINT:cdefe:LAST:"Current\:%8.2lf %s" \ GPRINT:cdefe:AVERAGE:"Average\:%8.2lf %s" \ GPRINT:cdefe:MAX:"Maximum\:%8.2lf %s\n" > Grafico.png # Comando di shell che attraverso la chiamata della funzione Graph di RRDTool # genera il file.PNG rappresentante il grafico del traffico reale che il # Data Center riceve /usr/bin/rrdtool graph - \ --imgformat=PNG \ --start=1299186947 \ --end=1299273047 \ --title='Quantità di banda fornita al Data Center' \ --rigid \ --base=1000 \ --height=120 \ --width=600 \ --alt-autoscale-max \ --lower-limit=0 \ COMMENT:"From 2011/03/03 22\:15\:47 To 2011/03/04 22\:10\:47\c" \ COMMENT:" \n" \ --vertical-label='bits per second' \ --slope-mode \ --font TITLE:12: \ --font AXIS:8: \ --font LEGEND:10: \ Pasquale Catalano 566/2323 Pagina 114 di 121 --font UNIT:8: \ DEF:a="/var/www/cacti/rra/sw3comatlas02_traffic_in_35.rrd":traffic_in:AVERAGE:start='end1d':end=$data \ DEF:b="/var/www/cacti/rra/sw3comatlas02_traffic_in_35.rrd":traffic_out:AVERAGE:start='end1d':end=$data \ CDEF:cdefa=a,8,* \ CDEF:cdeff=b,8,* \ AREA:cdefa#00CF00FF:"Inbound" \ GPRINT:cdefa:LAST:" Current\:%8.2lf %s" \ GPRINT:cdefa:AVERAGE:"Average\:%8.2lf %s" \ GPRINT:cdefa:MAX:"Maximum\:%8.2lf %s\n" \ COMMENT:"Total In\: 1.51 TB\n" \ LINE1:cdeff#002A97FF:"Outbound" \ GPRINT:cdeff:LAST:"Current\:%8.2lf %s" \ GPRINT:cdeff:AVERAGE:"Average\:%8.2lf %s" \ GPRINT:cdeff:MAX:"Maximum\:%8.2lf %s\n" \ COMMENT:"Total Out\: 487.54 GB\n" > Grafico1.png Index.html: <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows1250"> <meta name="generator" content="PSPad editor, www.pspad.com"> <title>Visualizzazione dei Grafici</title> <style type="text/css"> #img-background{ top: 0px; left: 0px; width: 70%; z-index: 100; } </style> </head> <body> <img src="/var/www/html/10-12/workernode/workernode.png" id="imgbackground" /> <br> <img src="/var/www/html/10-12/storageelement/storageelement.png" id="img-background"/> </body> </html> Pasquale Catalano 566/2323 Pagina 115 di 121 Index1.html: <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <meta name="generator" content="PSPad editor, www.pspad.com"> <title>Visualizzazione dei Grafici</title> <style type="text/css"> #img-background{ top: 0px; left: 0px; width: 70%; z-index: 100; } </style> </head> <body> <img src="/var/www/html/10-12/Grafico.png" id="img-background" /> <br> <img src="/var/www/html/10-12/Grafico1.png" id="img-background"/> </body> </html> Pasquale Catalano 566/2323 Pagina 116 di 121 Appendice C Nella successiva figura si mostra il contenuto del crontab della macchina su cui l'applicazione viene eseguita: CronTab Pasquale Catalano 566/2323 Pagina 117 di 121 Sitografia 1. Cacti http://www.cacti.net/ 2. RRDTool http://oss.oetiker.ch/rrdtool 3. MySql http://mysql.it/ 4. Liferay http://www.liferay.com/ 5. Community Liferay http://www.liferay.com/community 6. Tier2-Napoli http://tier2.na.infn.it/ 7. Java http://www.java.sun.com/ 8. HTML http://www.html.it/ 9. Nagios http://www.nagios.org/ 10. Site Status Board http://dashb-ssb-devel.cern.ch/dashboard/ Pasquale Catalano 566/2323 Pagina 118 di 121 11. Job Monitoring http://dashboard10.cern.ch/dashboard/request.py/jobsummary 12. JFreeChart http://www.jfree.org/jfreechart/ Pasquale Catalano 566/2323 Pagina 119 di 121 Bibliografia 1. I. Sommerville Ingegneria del Software Pearson 2. A. S. Tanenbaum Reti di Calcolatori Apogeo 3. P. Sarang Practical-Liferay Apress 4. R. A. Elmasri, S. B. Navathe Sistemi di Basi di Dati, Fondamenti Pearson 5. Melir Page-Jones Progettazione a Oggetti con UML Apogeo 6. C. S. Horstmann, G. Cornell Core Java 2 Volume I – Fondamenti Pearson 7. C. S. Horstmann, G. Cornell Core Java 2 Volume II – Funzioni Avanzate Pearson Pasquale Catalano 566/2323 Pagina 120 di 121 8. P. Dobois MySql Apogeo 9. Slide di Sargsyan Laura, Convegno CERN luglio 2010 10. Slide di Carlos Borrego, Convegno CERN luglio 2010 11. Slide di Alessandra Doria, Atlas Calcolo 2003 Pasquale Catalano 566/2323 Pagina 121 di 121