StatisticsCollection.java

/*
 * GovWay - A customizable API Gateway 
 * https://govway.org
 * 
 * Copyright (c) 2005-2024 Link.it srl (https://link.it). 
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 3, as published by
 * the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

package org.openspcoop2.pdd.core.handlers.statistics;

import java.util.List;

import org.openspcoop2.core.constants.TipoPdD;
import org.openspcoop2.protocol.sdk.IProtocolFactory;
import org.openspcoop2.protocol.sdk.builder.EsitoTransazione;
import org.openspcoop2.protocol.utils.EsitiProperties;
import org.openspcoop2.utils.LoggerWrapperFactory;
import org.openspcoop2.utils.UtilsRuntimeException;
import org.openspcoop2.utils.date.DateManager;
import org.slf4j.Logger;

/**
 * StatisticsCollection
 *
 * @author Poli Andrea (apoli@link.it)
 * @author $Author$
 * @version $Rev$, $Date$
 */
public class StatisticsCollection {

	private StatisticsCollection() {}
	
	private static final StatisticsCollection statisticsCollection =  new StatisticsCollection();
	public static StatisticsCollection getStatisticsCollection(){
		return StatisticsCollection.statisticsCollection;
	}

	private static final long SOGLIA_DIMENSIONE = Long.MAX_VALUE-100000;
	private static final int SOGLIA_TEMPORALE = 1000*60*30; // statistiche relative all'ultima mezz'ora.
	
	private static Logger log = LoggerWrapperFactory.getLogger(StatisticsCollection.class);
	private static boolean isEsitoOk(EsitoTransazione esito, IProtocolFactory<?> protocollo){
		try{
			if(esito==null) {
				return false;
			}
			List<Integer> esitiOk = EsitiProperties.getInstance(log,protocollo).getEsitiCodeOk();
			for (Integer esitoOk : esitiOk) {
				if(esitoOk!=null && esito.getCode()!=null) {
					if(esitoOk.intValue() == esito.getCode().intValue()){
						return true;
					}
				}
			}
			return false;
		}catch(Exception e){
			// non sono previsti errori
			throw new UtilsRuntimeException(e.getMessage(),e);
		}
	}
	
	
	
	/* ***** UPDATE STATO ******* */
	private static org.openspcoop2.utils.Semaphore semaphore = new org.openspcoop2.utils.Semaphore("StatisticsCollection");
	public static void update(Statistic stat){
		semaphore.acquireThrowRuntime("update");
		try {
			updateEngine(stat);
		}finally {
			semaphore.release("update");
		}
	}
	private static void updateEngine(Statistic stat){

		if(!TipoPdD.APPLICATIVA.equals(stat.getTipoPdD()) &&
				!TipoPdD.DELEGATA.equals(stat.getTipoPdD()) ){
			return;
		}
		
		// Check soglia temporale
		if(StatisticsCollection.getStatisticsCollection().dataUltimoRefresh>0){
			if((DateManager.getTimeMillis()-StatisticsCollection.getStatisticsCollection().dataUltimoRefresh)>StatisticsCollection.SOGLIA_TEMPORALE){
				StatisticsCollection.reset();
			}
		}
		else{
			// Inserisco data arrivo richiesta 
			StatisticsCollection.getStatisticsCollection().dataUltimoRefresh = stat.getTimeMillisIngressoRichiesta();
			if(StatisticsCollection.getStatisticsCollection().dataUltimoRefresh<=0){
				StatisticsCollection.getStatisticsCollection().dataUltimoRefresh = DateManager.getTimeMillis();
			}
		}
		
		// Cechk soglia sulla dimensione
		/**if(needResetForOverSizeLong()){
			reset();
		}*/
		
		// Contatori
		StatisticsCollection.incrementCount(stat.getEsito(), stat.getProtocollo(), StatisticsCollection.statisticsCollection.statNumeroTransazioni);
		if(TipoPdD.APPLICATIVA.equals(stat.getTipoPdD())){
			StatisticsCollection.incrementCount(stat.getEsito(), stat.getProtocollo(), StatisticsCollection.statisticsCollection.statNumeroTransazioniPA);
		}else if(TipoPdD.DELEGATA.equals(stat.getTipoPdD())){
			StatisticsCollection.incrementCount(stat.getEsito(), stat.getProtocollo(), StatisticsCollection.statisticsCollection.statNumeroTransazioniPD);
		}
		
		// Latenze
		if(isEsitoOk(stat.getEsito(),stat.getProtocollo())){
			
			long latenzaTotale = -1;
			if(stat.getTimeMillisUscitaRisposta()>0 && stat.getTimeMillisIngressoRichiesta()>0)
				latenzaTotale = stat.getTimeMillisUscitaRisposta() - stat.getTimeMillisIngressoRichiesta();
			if(latenzaTotale>0){
				StatisticsCollection.computeLatenza(latenzaTotale, StatisticsCollection.statisticsCollection.statLatenzaAttraversamento);
				if(TipoPdD.APPLICATIVA.equals(stat.getTipoPdD())){
					StatisticsCollection.computeLatenza(latenzaTotale, StatisticsCollection.statisticsCollection.statLatenzaAttraversamentoPA);
				}else if(TipoPdD.DELEGATA.equals(stat.getTipoPdD())){
					StatisticsCollection.computeLatenza(latenzaTotale, StatisticsCollection.statisticsCollection.statLatenzaAttraversamentoPD);
				}	
			}
			
			long latenzaRichiesta = -1;
			if(stat.getTimeMillisUscitaRichiesta()>0 && stat.getTimeMillisIngressoRichiesta()>0)
				latenzaRichiesta = stat.getTimeMillisUscitaRichiesta() - stat.getTimeMillisIngressoRichiesta();
			if(latenzaRichiesta>0){
				StatisticsCollection.computeLatenza(latenzaRichiesta, StatisticsCollection.statisticsCollection.statLatenzaAttraversamentoRequest);
				if(TipoPdD.APPLICATIVA.equals(stat.getTipoPdD())){
					StatisticsCollection.computeLatenza(latenzaRichiesta, StatisticsCollection.statisticsCollection.statLatenzaAttraversamentoPARequest);
				}else if(TipoPdD.DELEGATA.equals(stat.getTipoPdD())){
					StatisticsCollection.computeLatenza(latenzaRichiesta, StatisticsCollection.statisticsCollection.statLatenzaAttraversamentoPDRequest);
				}	
			}
			
			long latenzaRisposta = -1;
			if(stat.getTimeMillisUscitaRisposta()>0 && stat.getTimeMillisIngressoRisposta()>0)
				latenzaRisposta = stat.getTimeMillisUscitaRisposta() - stat.getTimeMillisIngressoRisposta();
			if(latenzaRisposta>0){
				StatisticsCollection.computeLatenza(latenzaRisposta, StatisticsCollection.statisticsCollection.statLatenzaAttraversamentoResponse);
				if(TipoPdD.APPLICATIVA.equals(stat.getTipoPdD())){
					StatisticsCollection.computeLatenza(latenzaRisposta, StatisticsCollection.statisticsCollection.statLatenzaAttraversamentoPAResponse);
				}else if(TipoPdD.DELEGATA.equals(stat.getTipoPdD())){
					StatisticsCollection.computeLatenza(latenzaRisposta, StatisticsCollection.statisticsCollection.statLatenzaAttraversamentoPDResponse);
				}	
			}
				
		}
		
		
		// Dimensioni
		
		long inRequestSize = stat.getDimensioneIngressoRichiesta();
		if(inRequestSize>0){
			StatisticsCollection.computeDimensione(inRequestSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggio);
			StatisticsCollection.computeDimensione(inRequestSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioInRequest);
			if(TipoPdD.APPLICATIVA.equals(stat.getTipoPdD())){
				StatisticsCollection.computeDimensione(inRequestSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioPA);
				StatisticsCollection.computeDimensione(inRequestSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioPAInRequest);
			}else if(TipoPdD.DELEGATA.equals(stat.getTipoPdD())){
				StatisticsCollection.computeDimensione(inRequestSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioPD);
				StatisticsCollection.computeDimensione(inRequestSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioPDInRequest);
			}
		}
		
		long outRequestSize = stat.getDimensioneUscitaRichiesta();
		if(outRequestSize>0){
			StatisticsCollection.computeDimensione(outRequestSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggio);
			StatisticsCollection.computeDimensione(outRequestSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioOutRequest);
			if(TipoPdD.APPLICATIVA.equals(stat.getTipoPdD())){
				StatisticsCollection.computeDimensione(outRequestSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioPA);
				StatisticsCollection.computeDimensione(outRequestSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioPAOutRequest);
			}else if(TipoPdD.DELEGATA.equals(stat.getTipoPdD())){
				StatisticsCollection.computeDimensione(outRequestSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioPD);
				StatisticsCollection.computeDimensione(outRequestSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioPDOutRequest);
			}
		}
		
		long inResponseSize = stat.getDimensioneIngressoRisposta();
		if(inResponseSize>0){
			StatisticsCollection.computeDimensione(inResponseSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggio);
			StatisticsCollection.computeDimensione(inResponseSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioInResponse);
			if(TipoPdD.APPLICATIVA.equals(stat.getTipoPdD())){
				StatisticsCollection.computeDimensione(inResponseSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioPA);
				StatisticsCollection.computeDimensione(inResponseSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioPAInResponse);
			}else if(TipoPdD.DELEGATA.equals(stat.getTipoPdD())){
				StatisticsCollection.computeDimensione(inResponseSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioPD);
				StatisticsCollection.computeDimensione(inResponseSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioPDInResponse);
			}
		}
		
		long outResponseSize = stat.getDimensioneUscitaRisposta();
		if(outResponseSize>0){
			StatisticsCollection.computeDimensione(outResponseSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggio);
			StatisticsCollection.computeDimensione(outResponseSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioOutResponse);
			if(TipoPdD.APPLICATIVA.equals(stat.getTipoPdD())){
				StatisticsCollection.computeDimensione(outResponseSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioPA);
				StatisticsCollection.computeDimensione(outResponseSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioPAOutResponse);
			}else if(TipoPdD.DELEGATA.equals(stat.getTipoPdD())){
				StatisticsCollection.computeDimensione(outResponseSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioPD);
				StatisticsCollection.computeDimensione(outResponseSize, StatisticsCollection.statisticsCollection.statDimensioneMessaggioPDOutResponse);
			}
		}
	}
	
	
	@SuppressWarnings("unused")
	private static boolean needResetForOverSizeLong(){
		
		if(StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamento.tmp_latenzaMediaAttraversamento_sumLatenze>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamentoRequest.tmp_latenzaMediaAttraversamento_sumLatenze>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamentoResponse.tmp_latenzaMediaAttraversamento_sumLatenze>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		
		if(StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamentoPD.tmp_latenzaMediaAttraversamento_sumLatenze>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamentoPDRequest.tmp_latenzaMediaAttraversamento_sumLatenze>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamentoPDResponse.tmp_latenzaMediaAttraversamento_sumLatenze>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		
		if(StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamentoPA.tmp_latenzaMediaAttraversamento_sumLatenze>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamentoPARequest.tmp_latenzaMediaAttraversamento_sumLatenze>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamentoPAResponse.tmp_latenzaMediaAttraversamento_sumLatenze>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}

		if(StatisticsCollection.getStatisticsCollection().statDimensioneMessaggio.tmp_dimensioneMediaMessaggio_sumDimensioni>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioInRequest.tmp_dimensioneMediaMessaggio_sumDimensioni>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioOutRequest.tmp_dimensioneMediaMessaggio_sumDimensioni>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioInResponse.tmp_dimensioneMediaMessaggio_sumDimensioni>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioOutResponse.tmp_dimensioneMediaMessaggio_sumDimensioni>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		
		if(StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPD.tmp_dimensioneMediaMessaggio_sumDimensioni>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPDInRequest.tmp_dimensioneMediaMessaggio_sumDimensioni>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPDOutRequest.tmp_dimensioneMediaMessaggio_sumDimensioni>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPDInResponse.tmp_dimensioneMediaMessaggio_sumDimensioni>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPDOutResponse.tmp_dimensioneMediaMessaggio_sumDimensioni>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}

		if(StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPA.tmp_dimensioneMediaMessaggio_sumDimensioni>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPAInRequest.tmp_dimensioneMediaMessaggio_sumDimensioni>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPAOutRequest.tmp_dimensioneMediaMessaggio_sumDimensioni>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPAInResponse.tmp_dimensioneMediaMessaggio_sumDimensioni>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		if(StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPAOutResponse.tmp_dimensioneMediaMessaggio_sumDimensioni>StatisticsCollection.SOGLIA_DIMENSIONE){
			return true;
		}
		
		return false;
		
	}
	
	
	public static void reset(){
		
		StatisticsCollection.getStatisticsCollection().dataUltimoRefresh = -1;
		
		StatisticsCollection.getStatisticsCollection().statNumeroTransazioni = new StatisticCount();
		StatisticsCollection.getStatisticsCollection().statNumeroTransazioniPD = new StatisticCount();
		StatisticsCollection.getStatisticsCollection().statNumeroTransazioniPA = new StatisticCount();
		
		StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamento = new StatisticTime();
		StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamentoRequest = new StatisticTime();
		StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamentoResponse = new StatisticTime();
		StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamentoPD = new StatisticTime();
		StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamentoPDRequest = new StatisticTime();
		StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamentoPDResponse = new StatisticTime();
		StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamentoPA = new StatisticTime();
		StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamentoPARequest = new StatisticTime();
		StatisticsCollection.getStatisticsCollection().statLatenzaAttraversamentoPAResponse = new StatisticTime();
		
		StatisticsCollection.getStatisticsCollection().statDimensioneMessaggio = new StatisticSize();
		StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioInRequest = new StatisticSize();
		StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioOutRequest = new StatisticSize();
		StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioInResponse = new StatisticSize();
		StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioOutResponse = new StatisticSize();
		StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioResponse = new StatisticSize();
		StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPD = new StatisticSize();
		StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPDInRequest = new StatisticSize();
		StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPDOutRequest = new StatisticSize();
		StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPDInResponse = new StatisticSize();
		StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPDOutResponse = new StatisticSize();
		StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPA = new StatisticSize();
		StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPAInRequest = new StatisticSize();
		StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPAOutRequest = new StatisticSize();
		StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPAInResponse = new StatisticSize();
		StatisticsCollection.getStatisticsCollection().statDimensioneMessaggioPAOutResponse = new StatisticSize();
	}
		
	private static void incrementCount(EsitoTransazione esito,IProtocolFactory<?> protocollo, StatisticCount statCount){
		statCount.numeroTransazioni++;
		if(isEsitoOk(esito,protocollo)){
			statCount.numeroTransazioni_esitoOK++;
		}else{
			statCount.numeroTransazioni_esitoErrore++;
		}
	}
	
	private static void computeLatenza(long latenza,StatisticTime statTime){
		
		// Minima
		if(statTime.latenzaMinimaAttraversamento<=0 || latenza<statTime.latenzaMinimaAttraversamento)
			statTime.latenzaMinimaAttraversamento = latenza;
		
		// Massima
		if(latenza>statTime.latenzaMassimaAttraversamento)
			statTime.latenzaMassimaAttraversamento = latenza;
		
		// Media
		statTime.tmp_latenzaMediaAttraversamento_sumLatenze+=latenza;
		statTime.tmp_latenzaMediaAttraversamento_countTransazioni++;
		statTime.latenzaMediaAttraversamento = statTime.tmp_latenzaMediaAttraversamento_sumLatenze/statTime.tmp_latenzaMediaAttraversamento_countTransazioni;
		// Effettuo refresh nel controllo iniziale, almeno tutti i dati sono consistenti rispetto all'intervallo temporale
/**		if(statTime.tmp_latenzaMediaAttraversamento_sumLatenze>SOGLIA_DIMENSIONE){
//			// azzero temporanei
//			statTime.tmp_latenzaMediaAttraversamento_sumLatenze=statTime.tmp_latenzaMediaAttraversamento_sumLatenze;
//			statTime.tmp_latenzaMediaAttraversamento_countTransazioni=1;
//		}*/
	}
	
	
	
	private static void computeDimensione(long dimensione,StatisticSize statSize){
		
		// Minima
		if(statSize.dimensioneMinimaMessaggio<=0 || dimensione<statSize.dimensioneMinimaMessaggio)
			statSize.dimensioneMinimaMessaggio = dimensione;
		
		// Massima
		if(dimensione>statSize.dimensioneMassimaMessaggio)
			statSize.dimensioneMassimaMessaggio = dimensione;
		
		// Media
		statSize.tmp_dimensioneMediaMessaggio_sumDimensioni+=dimensione;
		statSize.tmp_dimensioneMediaMessaggio_countTransazioni++;
		statSize.dimensioneMediaMessaggio = statSize.tmp_dimensioneMediaMessaggio_sumDimensioni/statSize.tmp_dimensioneMediaMessaggio_countTransazioni;
		// Effettuo refresh nel controllo iniziale, almeno tutti i dati sono consistenti rispetto all'intervallo temporale
/**		if(statSize.tmp_dimensioneMediaMessaggio_sumDimensioni>SOGLIA_DIMENSIONE){
//			// azzero temporanei
//			statSize.tmp_dimensioneMediaMessaggio_sumDimensioni=statSize.dimensioneMediaMessaggio;
//			statSize.tmp_dimensioneMediaMessaggio_countTransazioni=1;
//		}*/
	}
	
	
	
	/* BEAN */
	
	long dataUltimoRefresh = -1;
	
	StatisticCount statNumeroTransazioni = new StatisticCount();
	StatisticCount statNumeroTransazioniPD = new StatisticCount();
	StatisticCount statNumeroTransazioniPA = new StatisticCount();
	
	StatisticTime statLatenzaAttraversamento = new StatisticTime();
	StatisticTime statLatenzaAttraversamentoRequest = new StatisticTime();
	StatisticTime statLatenzaAttraversamentoResponse = new StatisticTime();
	StatisticTime statLatenzaAttraversamentoPD = new StatisticTime();
	StatisticTime statLatenzaAttraversamentoPDRequest = new StatisticTime();
	StatisticTime statLatenzaAttraversamentoPDResponse = new StatisticTime();
	StatisticTime statLatenzaAttraversamentoPA = new StatisticTime();
	StatisticTime statLatenzaAttraversamentoPARequest = new StatisticTime();
	StatisticTime statLatenzaAttraversamentoPAResponse = new StatisticTime();
	
	StatisticSize statDimensioneMessaggio = new StatisticSize();
	StatisticSize statDimensioneMessaggioInRequest = new StatisticSize();
	StatisticSize statDimensioneMessaggioOutRequest = new StatisticSize();
	StatisticSize statDimensioneMessaggioInResponse = new StatisticSize();
	StatisticSize statDimensioneMessaggioOutResponse = new StatisticSize();
	StatisticSize statDimensioneMessaggioResponse = new StatisticSize();
	StatisticSize statDimensioneMessaggioPD = new StatisticSize();
	StatisticSize statDimensioneMessaggioPDInRequest = new StatisticSize();
	StatisticSize statDimensioneMessaggioPDOutRequest = new StatisticSize();
	StatisticSize statDimensioneMessaggioPDInResponse = new StatisticSize();
	StatisticSize statDimensioneMessaggioPDOutResponse = new StatisticSize();
	StatisticSize statDimensioneMessaggioPA = new StatisticSize();
	StatisticSize statDimensioneMessaggioPAInRequest = new StatisticSize();
	StatisticSize statDimensioneMessaggioPAOutRequest = new StatisticSize();
	StatisticSize statDimensioneMessaggioPAInResponse = new StatisticSize();
	StatisticSize statDimensioneMessaggioPAOutResponse = new StatisticSize();
	
	
	public StatisticSize getStatDimensioneMessaggio() {
		return this.statDimensioneMessaggio;
	}

	public StatisticSize getStatDimensioneMessaggioInRequest() {
		return this.statDimensioneMessaggioInRequest;
	}

	public StatisticSize getStatDimensioneMessaggioOutRequest() {
		return this.statDimensioneMessaggioOutRequest;
	}

	public StatisticSize getStatDimensioneMessaggioInResponse() {
		return this.statDimensioneMessaggioInResponse;
	}

	public StatisticSize getStatDimensioneMessaggioOutResponse() {
		return this.statDimensioneMessaggioOutResponse;
	}

	public StatisticSize getStatDimensioneMessaggioResponse() {
		return this.statDimensioneMessaggioResponse;
	}

	public StatisticSize getStatDimensioneMessaggioPD() {
		return this.statDimensioneMessaggioPD;
	}

	public StatisticSize getStatDimensioneMessaggioPDInRequest() {
		return this.statDimensioneMessaggioPDInRequest;
	}

	public StatisticSize getStatDimensioneMessaggioPDOutRequest() {
		return this.statDimensioneMessaggioPDOutRequest;
	}

	public StatisticSize getStatDimensioneMessaggioPDInResponse() {
		return this.statDimensioneMessaggioPDInResponse;
	}

	public StatisticSize getStatDimensioneMessaggioPDOutResponse() {
		return this.statDimensioneMessaggioPDOutResponse;
	}

	public StatisticSize getStatDimensioneMessaggioPA() {
		return this.statDimensioneMessaggioPA;
	}

	public StatisticSize getStatDimensioneMessaggioPAInRequest() {
		return this.statDimensioneMessaggioPAInRequest;
	}

	public StatisticSize getStatDimensioneMessaggioPAOutRequest() {
		return this.statDimensioneMessaggioPAOutRequest;
	}

	public StatisticSize getStatDimensioneMessaggioPAInResponse() {
		return this.statDimensioneMessaggioPAInResponse;
	}

	public StatisticSize getStatDimensioneMessaggioPAOutResponse() {
		return this.statDimensioneMessaggioPAOutResponse;
	}

	public StatisticCount getStatNumeroTransazioni() {
		return this.statNumeroTransazioni;
	}

	public StatisticCount getStatNumeroTransazioniPD() {
		return this.statNumeroTransazioniPD;
	}

	public StatisticCount getStatNumeroTransazioniPA() {
		return this.statNumeroTransazioniPA;
	}

	public StatisticTime getStatLatenzaAttraversamento() {
		return this.statLatenzaAttraversamento;
	}

	public StatisticTime getStatLatenzaAttraversamentoRequest() {
		return this.statLatenzaAttraversamentoRequest;
	}

	public StatisticTime getStatLatenzaAttraversamentoResponse() {
		return this.statLatenzaAttraversamentoResponse;
	}

	public StatisticTime getStatLatenzaAttraversamentoPD() {
		return this.statLatenzaAttraversamentoPD;
	}

	public StatisticTime getStatLatenzaAttraversamentoPDRequest() {
		return this.statLatenzaAttraversamentoPDRequest;
	}

	public StatisticTime getStatLatenzaAttraversamentoPDResponse() {
		return this.statLatenzaAttraversamentoPDResponse;
	}

	public StatisticTime getStatLatenzaAttraversamentoPA() {
		return this.statLatenzaAttraversamentoPA;
	}

	public StatisticTime getStatLatenzaAttraversamentoPARequest() {
		return this.statLatenzaAttraversamentoPARequest;
	}

	public StatisticTime getStatLatenzaAttraversamentoPAResponse() {
		return this.statLatenzaAttraversamentoPAResponse;
	}

	public long getDataUltimoRefresh() {
		return this.dataUltimoRefresh;
	}
	
}