TimeoutNotifier.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 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.controllo_traffico;
- import java.util.Date;
- import org.openspcoop2.core.constants.Costanti;
- import org.openspcoop2.core.eventi.constants.CodiceEventoControlloTraffico;
- import org.openspcoop2.core.eventi.constants.TipoEvento;
- import org.openspcoop2.pdd.core.transazioni.Transaction;
- import org.openspcoop2.pdd.core.transazioni.TransactionContext;
- import org.openspcoop2.pdd.core.transazioni.TransactionNotExistsException;
- import org.openspcoop2.protocol.sdk.Context;
- import org.openspcoop2.protocol.sdk.IProtocolFactory;
- import org.openspcoop2.protocol.sdk.constants.EsitoTransazioneName;
- import org.openspcoop2.protocol.utils.EsitiProperties;
- import org.openspcoop2.utils.ITimeoutNotifier;
- import org.openspcoop2.utils.date.DateManager;
- import org.slf4j.Logger;
- /**
- * TimeoutNotifier
- *
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class TimeoutNotifier implements ITimeoutNotifier{
- private Context context;
- private SogliaReadTimeout soglia;
- private TimeoutNotifierType type;
- private Logger log;
- private IProtocolFactory<?> protocolFactory;
- private boolean saveInContext;
- public TimeoutNotifier(Context context, IProtocolFactory<?> protocolFactory,
- SogliaReadTimeout soglia, TimeoutNotifierType type, Logger log,
- boolean saveInContext) {
- this.context = context;
- this.protocolFactory = protocolFactory;
- this.soglia = soglia;
- this.type = type;
- this.log = log;
- this.saveInContext = saveInContext;
- }
-
- @Override
- public void notify(long count) {
- if(this.context!=null) {
-
- if(this.saveInContext) {
- boolean alreadyExists = false;
- if(this.type!=null) {
- switch (this.type) {
- case CONNECTION:
- alreadyExists = !GeneratoreMessaggiErrore.addPddContextInfoControlloTrafficoConnectionTimeout(this.context);
- break;
- case REQUEST:
- alreadyExists = !GeneratoreMessaggiErrore.addPddContextInfoControlloTrafficoReadRequestTimeout(this.context, true);
- break;
- case WAIT_RESPONSE:
- alreadyExists = !GeneratoreMessaggiErrore.addPddContextInfoControlloTrafficoReadTimeout(this.context, true);
- break;
- case RECEIVE_RESPONSE:
- alreadyExists = !GeneratoreMessaggiErrore.addPddContextInfoControlloTrafficoReadResponseTimeout(this.context, true);
- break;
- }
- }else {
- alreadyExists = !GeneratoreMessaggiErrore.addPddContextInfoControlloTrafficoReadTimeout(this.context, true);
- }
-
- if(alreadyExists) {
- return; // giĆ registrato (succede in caso di timeout mentre si sta consegnando verso il client con metodo disconnect())
- }
- }
-
- registraEvento();
- }
-
- Date dataEventoPolicyViolated = DateManager.getDate();
-
- CategoriaEventoControlloTraffico tipoEvento = TimeoutNotifierType.toCategoriaEventoControlloTraffico(this.type);
-
- try {
-
- EsitiProperties esitiProperties = EsitiProperties.getInstance(this.log, this.protocolFactory);
- EsitoTransazioneName esito = TimeoutNotifierType.toEsitoTransazioneName(this.type);
- String descriptionPolicyViolated = esitiProperties.getEsitoDescription(esitiProperties.convertoToCode(esito));
- descriptionPolicyViolated = descriptionPolicyViolated+" (soglia:"+this.soglia.getSogliaMs()+" ms)";
-
- NotificatoreEventi.getInstance().log(tipoEvento,
- this.soglia.getIdConfigurazione(), this.soglia.getConfigurazione(),
- dataEventoPolicyViolated, descriptionPolicyViolated);
- }catch(Exception t) {
- this.log.error("Emissione evento non riuscito: "+t.getMessage(),t);
- }
- }
- private void registraEvento() {
- String idTransazione = (String) this.context.getObject(Costanti.ID_TRANSAZIONE);
- if(idTransazione!=null) {
- Transaction tr = null;
- try {
- tr = TransactionContext.getTransaction(idTransazione);
- }catch(TransactionNotExistsException notExists) {
- // ignore
- }
- if(tr!=null) {
- TipoEvento tipoEvento = TimeoutNotifierType.toTipoEvento(this.type);
- try {
- tr.addEventoGestione(tipoEvento.getValue()
- +"_"+
- CodiceEventoControlloTraffico.VIOLAZIONE.getValue()
- +"_"+
- this.soglia.getIdConfigurazione()
- );
- }catch(Exception t) {
- this.log.error("Associazione evento alla transazione non riuscita: "+t.getMessage(),t);
- }
- }
- }
- }
- }