SondaCoda.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.utils.sonde.impl;

import java.sql.Connection;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;

import org.openspcoop2.utils.TipiDatabase;
import org.openspcoop2.utils.sonde.ParametriSonda;
import org.openspcoop2.utils.sonde.Sonda;
import org.openspcoop2.utils.sonde.SondaException;

/**
 * Classe di implementazione della Sonda per le code
 * 
 *
 * @author Bussu Giovanni (bussu@link.it)
 * @author $Author$
 * @version $Rev$, $Date$
 */

public class SondaCoda extends Sonda {

	/**
	 * Costruttore per la classe SondaCoda
	 * @param param parametri costruttivi della sonda
	 * @throws Exception
	 */
	public SondaCoda(ParametriSonda param) {
		super(param);
		Set<String> reserved = new HashSet<String>();
		reserved.add("dimensione_coda");
		this.getParam().setReserved(reserved);
	}

	@Override
	public StatoSonda getStatoSonda(){
		
		long dimensione_coda = 0;
		String dimensioneCodaString = super.getParam().getDatiCheck().getProperty("dimensione_coda");
		try {
			if(dimensioneCodaString!=null)
				dimensione_coda = Long.parseLong(dimensioneCodaString);
		} catch(NumberFormatException e) {
			e.printStackTrace(System.err);
			System.err.println("Errore durante il parsing del parametro dimensione_coda: " + dimensioneCodaString + ". Elimino il valore");
			super.getParam().getDatiCheck().remove("dimensione_coda");
		}
		StatoSonda statoSonda = new StatoSonda();
		SimpleDateFormat format = new SimpleDateFormat(PATTERN);

		//Valuto l'eventuale superamento delle soglie e calcolo lo stato
		if(dimensione_coda > super.getParam().getSogliaError()) {
			if(this.getParam().getDataError() == null) {
				this.getParam().setDataError(new Date());
			}
			statoSonda.setStato(2);
			statoSonda.setDescrizione("La coda "+super.getParam().getNome()+" ha superato la soglia di errore ("+
										super.getParam().getSogliaError()+") dal "+
										format.format(this.getParam().getDataError())+
										". Dimensione attuale della coda: "+dimensione_coda+".");
		} else if (dimensione_coda > super.getParam().getSogliaWarn()) {
			if(this.getParam().getDataWarn() == null) {
				this.getParam().setDataWarn(new Date());
			}
			statoSonda.setStato(1);
			statoSonda.setDescrizione("La coda "+super.getParam().getNome()+" ha superato la soglia di warn ("+
										super.getParam().getSogliaWarn()+") dal "+
										format.format(this.getParam().getDataWarn())+
										". Dimensione attuale della coda: "+dimensione_coda+".");
		} else {
			statoSonda.setStato(0);
			statoSonda.setDescrizione("Coda "+super.getParam().getNome()+": numero elementi in coda: " + dimensione_coda);
		}
 
		return statoSonda;
	}

	//retrocompatibilita
	public StatoSonda aggiornaStatoSonda(long dimensioneCoda, Connection connection, TipiDatabase tipoDatabase) throws SondaException {
		return this.aggiornaStatoSonda(dimensioneCoda, null, connection, tipoDatabase);
	}
	
	/**
	 * @param dimensioneCoda dimensione attuale della coda
	 * @param connection connessione per il DB
	 * @param tipoDatabase tipo database
	 * @return lo stato attuale della sonda
	 * @throws SondaException
	 */
	public StatoSonda aggiornaStatoSonda(long dimensioneCoda, Properties params, Connection connection, TipiDatabase tipoDatabase) throws SondaException {
		// inserisce i dati nel properties
		
		super.getParam().putAllCheck(params);
		
		super.getParam().getDatiCheck().put("dimensione_coda", dimensioneCoda + "");
		return updateSonda(connection, tipoDatabase);
	}


}