GeneratoreMessaggiErrore.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.List;
- import org.openspcoop2.core.controllo_traffico.constants.TipoErrore;
- import org.openspcoop2.message.constants.ServiceBinding;
- import org.openspcoop2.pdd.core.PdDContext;
- import org.openspcoop2.pdd.core.handlers.HandlerException;
- import org.openspcoop2.protocol.basic.Costanti;
- import org.openspcoop2.protocol.sdk.Context;
- import org.openspcoop2.protocol.sdk.ProtocolException;
- import org.openspcoop2.protocol.sdk.constants.EsitoTransazioneName;
- import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;
- import org.openspcoop2.protocol.utils.ErroriProperties;
- import org.openspcoop2.utils.Map;
- import org.openspcoop2.utils.MapKey;
- import org.openspcoop2.utils.transport.http.HttpConstants;
- import org.slf4j.Logger;
- /**
- * GeneratoreMessaggiErrore
- *
- * @author Poli Andrea (poli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class GeneratoreMessaggiErrore {
-
- private GeneratoreMessaggiErrore() {}
-
- // identificativi diagnostici parziali per policy violate
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_POLICY_VIOLATA_NUMERO_RICHIESTE_SIMULTANEE = "controlloTraffico.policy.violata.risorsaNumeroRichieste.simultaneo";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_POLICY_VIOLATA_NUMERO_RICHIESTE = "controlloTraffico.policy.violata.risorsaNumeroRichieste";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_POLICY_VIOLATA_OCCUPAZIONE_BANDA = "controlloTraffico.policy.violata.risorsaOccupazioneBanda";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_POLICY_VIOLATA_TEMPO_COMPLESSIVO = "controlloTraffico.policy.violata.risorsaTempoComplessivo";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_POLICY_VIOLATA_TEMPO_MEDIO = "controlloTraffico.policy.violata.risorsaTempoMedio";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_POLICY_VIOLATA_NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO = "controlloTraffico.policy.violata.risorsaNumeroRichiesteCompletateConSuccesso";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_POLICY_VIOLATA_NUMERO_RICHIESTE_FALLITE = "controlloTraffico.policy.violata.risorsaNumeroRichiesteFallite";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_POLICY_VIOLATA_NUMERO_FAULT_APPLICATIVI = "controlloTraffico.policy.violata.risorsaNumeroFaultApplicativi";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_POLICY_VIOLATA_NUMERO_RICHIESTE_FALLITE_O_FAULT_APPLICATIVI= "controlloTraffico.policy.violata.risorsaNumeroRichiesteFalliteOFaultApplicativi";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_POLICY_VIOLATA_NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO_O_FAULT_APPLICATIVI = "controlloTraffico.policy.violata.risorsaNumeroRichiesteCompletateConSuccessoOFaultApplicativi";
-
- // identificativi diagnostici parziali per applicabilità policy
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_POLICY_APPLICABILITA_PDD_NON_CONGESTIONATA = "controlloTraffico.policy.applicabilita.nonCongestionato";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_POLICY_APPLICABILITA_PDD_NON_CONGESTIONATA_CONTROLLO_DISABILITATO = "controlloTraffico.policy.applicabilita.controlloCongestioneDisabilitato";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_POLICY_APPLICABILITA_DEGRADO_PRESTAZIONALE_RILEVATO = "controlloTraffico.policy.applicabilita.degradoPrestazionale.rilevato";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_POLICY_APPLICABILITA_DEGRADO_PRESTAZIONALE_NON_RILEVATO = "controlloTraffico.policy.applicabilita.degradoPrestazionale.nonRilevato";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_POLICY_APPLICABILITA_STATO_ALLARME_RILEVATO = "controlloTraffico.policy.applicabilita.statoAllarme.rilevato";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_POLICY_APPLICABILITA_STATO_ALLARME_NON_RILEVATO = "controlloTraffico.policy.applicabilita.statoAllarme.nonRilevato";
-
- // identificativi diagnostici
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_CONTROLLO_TRAFFICO_MAXREQUESTS_VIOLATED = "controlloTraffico.maxRequestsViolated";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_CONTROLLO_TRAFFICO_MAXREQUESTS_VIOLATED_WARNING_ONLY = "controlloTraffico.maxRequestsViolatedWarningOnly";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_CONTROLLO_TRAFFICO_PDD_CONGESTIONATA = "controlloTraffico.pddCongestionata";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_CONTROLLO_TRAFFICO_POLICY_CONTROLLO_IN_CORSO = "controlloTraffico.policy.controlloInCorso";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_CONTROLLO_TRAFFICO_POLICY_CONTROLLO_TERMINATO_CON_SUCCESSO = "controlloTraffico.policy.controlloTerminato.richiestaNonBloccata";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_CONTROLLO_TRAFFICO_POLICY_CONTROLLO_TERMINATO_CON_ERRORE = "controlloTraffico.policy.controlloTerminato.richiestaBloccata";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_CONTROLLO_TRAFFICO_POLICY_DISABILITATA = "controlloTraffico.policy.disabilitata";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_CONTROLLO_TRAFFICO_POLICY_FILTRATA = "controlloTraffico.policy.filtrata";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_CONTROLLO_TRAFFICO_POLICY_NON_APPLICABILE = "controlloTraffico.policy.nonApplicabile";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_CONTROLLO_TRAFFICO_POLICY_VIOLATA = "controlloTraffico.policy.violata";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_CONTROLLO_TRAFFICO_POLICY_VIOLATA_WARNING_ONLY = "controlloTraffico.policy.violataWarningOnly";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_CONTROLLO_TRAFFICO_POLICY_RISPETTATA = "controlloTraffico.policy.rispettata";
- public static final String MSG_DIAGNOSTICO_INTERCEPTOR_CONTROLLO_TRAFFICO_POLICY_IN_ERRORE = "controlloTraffico.policy.inErrore";
-
-
-
-
- // ** KEYWORDS
- public static final String TEMPLATE_MAX_THREADS_THRESHOLD = "@CT_MAX_THREADS_THRESHOLD@"; // numero massimo di richieste simultanee configurate sul sistema
- public static final String TEMPLATE_CONTROLLO_TRAFFICO_THRESHOLD = "@CT_THRESHOLD@"; // soglia in % che indica quando attivare il controllo del traffico
- public static final String TEMPLATE_ACTIVE_THREADS = "@CT_ACTIVE_THREADS@"; // threads attivi
- public static final String TEMPLATE_NUMERO_POLICY = "@CT_POLICIES@"; // numero di policy configurate
- public static final String TEMPLATE_NUMERO_POLICY_DISABILITATE = "@CT_DISABLED_POLICIES@"; // numero di policy disabilitate
- public static final String TEMPLATE_NUMERO_POLICY_FILTRATE = "@CT_FILTERED_POLICIES@"; // numero di policy filtrate
- public static final String TEMPLATE_NUMERO_POLICY_NON_APPLICATE = "@CT_NOT_APPLICABLED_POLICIES@"; // numero di policy non applicabili
- public static final String TEMPLATE_NUMERO_POLICY_RISPETTATE = "@CT_RESPECTED_POLICIES@"; // numero di policy rispettate
- public static final String TEMPLATE_NUMERO_POLICY_VIOLATE = "@CT_VIOLATED_POLICIES@"; // numero di policy violate
- public static final String TEMPLATE_NUMERO_POLICY_VIOLATE_WARNING_ONLY = "@CT_VIOLATED_WARNING_ONLY_POLICIES@"; // numero di policy violate in warning only mode
- public static final String TEMPLATE_NUMERO_POLICY_IN_ERRORE = "@CT_ERROR_POLICIES@"; // numero di policy la cui verifica ha provocato un errore
-
- // ** KEYWORDS UTILIZZATE SOLAMENTE IN CONDIZIONI DI ERRORE O DEBUG
- // sono i diagnostici emessi dai moduli ricezione contenuti o buste
- public static final String TEMPLATE_POLICY_ACTIVE_ID = "@CT_POLICY_ACTIVE_ID@"; // identificativo della policy attivata
- public static final String TEMPLATE_POLICY_ACTIVE_TIPO = "@CT_POLICY_ACTIVE_TIPO@"; // tipo della policy attivata (Globale/API)
- public static final String TEMPLATE_POLICY_ACTIVE_ALIAS = "@CT_POLICY_ACTIVE_ALIAS@"; // alias della policy attivata
- public static final String TEMPLATE_POLICY_ACTIVE_RISORSA = "@CT_POLICY_ACTIVE_RISORSA@"; // risorsa in fase di valutazione (es. NumeroRichieste, OccupazioneBanda...)
- public static final String TEMPLATE_POLICY_ACTIVE_CONTINUE = "@CT_POLICY_ACTIVE_CONTINUE@"; // true/false; indica se la valutazione delle policy per la stessa risorsa deve continuare o meno
- public static final String TEMPLATE_POLICY_VIOLATA_MOTIVO = "@CT_POLICY_ERROR_MSG@"; // errore di violazione riscontrato sulla policy
- public static final String TEMPLATE_POLICY_FILTRATA_MOTIVO = "@CT_POLICY_FILTERED_REASON@"; // motivo di filtro della policy
- public static final String TEMPLATE_POLICY_NON_APPLICABILE_MOTIVO = "@CT_POLICY_NOT_APPLICABLED_REASON@"; // motivo della mancata applicabilitÃ
-
- public static final String TEMPLATE_POLICY_FILTRATA_MOTIVO_FILTRO = "i dati della transazione non rispettano i criteri di filtro impostati: ";
- public static final String TEMPLATE_POLICY_FILTRATA_MOTIVO_BREAK = "rilevata precedente policy soddisfatta";
- public static final String TEMPLATE_POLICY_FILTRATA_MOTIVO_BREAK_VIOLATA = "rilevata precedente policy violata";
-
- // sono i diagnostici di "appoggio" registrati nel modulo 'all' utilizzati per generare l'errore
- public static final String TEMPLATE_POLICY_VALORE_SOGLIA = "@CT_SOGLIA@"; // valore della soglia di una policy
- public static final String TEMPLATE_POLICY_TIPOLOGIA_TEMPO_MEDIO = "@CT_TIPOLOGIA_TEMPO_MEDIO@"; // tipologia di tempo medio (servizio, totale...)
- public static final String TEMPLATE_POLICY_VALORE_RILEVATO = "@CT_RILEVATO@"; // contatore rilevato
- public static final String TEMPLATE_POLICY_AVG_TIME_RILEVATO = "@CT_AVG_TIME_RILEVATO@"; // tempo medio rilevato
- public static final String TEMPLATE_POLICY_VALORE_SOGLIA_DEGRADO_PRESTAZIONALE = "@CT_DEGRADO_SOGLIA@"; // valore di soglia per il degrado prestazionale
- public static final String TEMPLATE_POLICY_GRUPPO = "@CT_DATI_IDENTIFICATIVI_GRUPPO@"; // raggruppamento
- public static final String TEMPLATE_POLICY_INTERVALLO_TEMPORALE = "@CT_INTERVALLO_TEMPORALE@"; // intervallo temporale configurato
- public static final String TEMPLATE_POLICY_NOME_ALLARME = "@CT_NOME_ALLARME@"; // nome dell'allarme utilizzata nelle condizioni di applicabilitÃ
- public static final String TEMPLATE_POLICY_STATO_ALLARME = "@CT_STATO_ALLARME@"; // stato dell'allarme
- public static final String TEMPLATE_POLICY_STATO_ALLARME_ATTESO = "@CT_STATO_ALLARME_ATTESO@"; // stato dell'allarme atteso
-
-
- private static final String SISTEMA_NON_DISPONIBILE = "Servizio Temporaneamente Non Erogabile";
-
- private static final String ERRORE_PROCESSAMENTO_CODE = "CC00";
- private static final String MAX_THREADS_VIOLATED_CODE = "CC01";
-
- private static final String ERRORE_GENERICO_DURANTE_VERIFICA = "ERR-";
- private static final String CONTROLLO_TRAFFICO_POLICY_VIOLATED_UNKNOW_TIPO = "CP00";
- private static final String CONTROLLO_TRAFFICO_POLICY_VIOLATED_NUMERO_RICHIESTE_SIMULTANEE_CODE = "CP01";
- private static final String CONTROLLO_TRAFFICO_POLICY_VIOLATED_NUMERO_RICHIESTE_CODE = "CP02";
- private static final String CONTROLLO_TRAFFICO_POLICY_VIOLATED_OCCUPAZIONE_BANDA_CODE = "CP03";
- private static final String CONTROLLO_TRAFFICO_POLICY_VIOLATED_TEMPO_COMPLESSIVO_CODE = "CP04";
- private static final String CONTROLLO_TRAFFICO_POLICY_VIOLATED_TEMPO_MEDIO_CODE = "CP05";
- private static final String CONTROLLO_TRAFFICO_POLICY_VIOLATED_NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO_CODE = "CP06";
- private static final String CONTROLLO_TRAFFICO_POLICY_VIOLATED_NUMERO_RICHIESTE_FALLITE_CODE = "CP07";
- private static final String CONTROLLO_TRAFFICO_POLICY_VIOLATED_NUMERO_FAULT_APPLICATIVI_CODE = "CP08";
- private static final String CONTROLLO_TRAFFICO_POLICY_VIOLATED_NUMERO_RICHIESTE_FALLITE_O_FAULT_APPLICATIVI_CODE = "CP09";
- private static final String CONTROLLO_TRAFFICO_POLICY_VIOLATED_DIMENSIONE_MASSIMA_MESSAGGIO_CODE = "CP10";
- private static final String CONTROLLO_TRAFFICO_POLICY_VIOLATED_NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO_O_FAULT_APPLICATIVI_CODE = "CP11";
- private static final String APPLICABILITA_CONGESTIONE_CODE = "-CC";
- private static final String APPLICABILITA_DEGRADO_CODE = "-DP";
- private static final String APPLICABILITA_STATO_ALLARME_CODE = "-SA";
-
-
-
- /* ***** EVENTI UTILI PER RICONOSCERE L'ESITO DELLA TRANSAZIONE ****** */
-
- public static final MapKey<String> PDD_CONTEXT_NAME_CONTROLLO_TRAFFICO_VIOLAZIONE = org.openspcoop2.core.controllo_traffico.constants.Costanti.PDD_CONTEXT_NAME_CONTROLLO_TRAFFICO_VIOLAZIONE;
-
- private static final String PDD_CONTEXT_VALUE_GENERIC_ERROR = "controlloTrafficoGenericError";
- public static void addPddContextInfoControlloTrafficoGenericError(PdDContext pddContext){
- pddContext.addObject(PDD_CONTEXT_NAME_CONTROLLO_TRAFFICO_VIOLAZIONE, PDD_CONTEXT_VALUE_GENERIC_ERROR);
- }
-
- private static final String PDD_CONTEXT_VALUE_MAX_THREADS_VIOLATO = "controlloTrafficoNumeroMassimoRichiesteSimultaneeViolato";
- private static final String PDD_CONTEXT_VALUE_MAX_THREADS_VIOLATO_WARNING_ONLY = "controlloTrafficoNumeroMassimoRichiesteSimultaneeViolatoWarningOnly";
- public static void addPddContextInfoControlloTrafficoMaxThreadsViolated(PdDContext pddContext, boolean warningOnly){
- if(warningOnly){
- pddContext.addObject(PDD_CONTEXT_NAME_CONTROLLO_TRAFFICO_VIOLAZIONE, PDD_CONTEXT_VALUE_MAX_THREADS_VIOLATO_WARNING_ONLY);
- }
- else{
- pddContext.addObject(PDD_CONTEXT_NAME_CONTROLLO_TRAFFICO_VIOLAZIONE, PDD_CONTEXT_VALUE_MAX_THREADS_VIOLATO);
- }
- }
-
- private static final String PDD_CONTEXT_VALUE_POLICY_VIOLATA = org.openspcoop2.core.controllo_traffico.constants.Costanti.PDD_CONTEXT_VALUE_POLICY_VIOLATA;
- private static final String PDD_CONTEXT_VALUE_POLICY_VIOLATA_WARNING_ONLY = org.openspcoop2.core.controllo_traffico.constants.Costanti.PDD_CONTEXT_VALUE_POLICY_VIOLATA_WARNING_ONLY;
- private static final String PDD_CONTEXT_VALUE_POLICY_IN_ERRORE = org.openspcoop2.core.controllo_traffico.constants.Costanti.PDD_CONTEXT_VALUE_POLICY_IN_ERRORE;
- public static void addPddContextInfoControlloTrafficoPolicyViolated(PdDContext pddContext, boolean warningOnly){
- addContextInfoControlloTrafficoPolicyViolated(pddContext, warningOnly);
- }
- public static void addContextInfoControlloTrafficoPolicyViolated(Context context, boolean warningOnly){
- if(warningOnly){
- context.addObject(PDD_CONTEXT_NAME_CONTROLLO_TRAFFICO_VIOLAZIONE, PDD_CONTEXT_VALUE_POLICY_VIOLATA_WARNING_ONLY);
- }
- else{
- context.addObject(PDD_CONTEXT_NAME_CONTROLLO_TRAFFICO_VIOLAZIONE, PDD_CONTEXT_VALUE_POLICY_VIOLATA);
- }
- }
-
- public static void addPddContextInfoControlloTrafficoPolicyInError(PdDContext pddContext, EsitoTransazioneName esito){
- pddContext.addObject(PDD_CONTEXT_NAME_CONTROLLO_TRAFFICO_VIOLAZIONE, PDD_CONTEXT_VALUE_POLICY_IN_ERRORE);
- pddContext.addObject(org.openspcoop2.core.controllo_traffico.constants.Costanti.PDD_CONTEXT_VALUE_POLICY_IN_ERROR_ESITO, esito);
- }
-
- public static final MapKey<String> PDD_CONTEXT_MAX_THREADS_THRESHOLD = Map.newMapKey("CT_MAX_THREADS_THRESHOLD"); // numero massimo di richieste simultanee configurate sul sistema
- public static final MapKey<String> PDD_CONTEXT_CONTROLLO_TRAFFICO_THRESHOLD = Map.newMapKey("CT_THRESHOLD"); // soglia in % che indica quando attivare il controllo del traffico
-
- public static final MapKey<String> PDD_CONTEXT_ACTIVE_THREADS = Map.newMapKey("CT_ACTIVE_THREADS"); // threads attivi
- public static final MapKey<String> PDD_CONTEXT_NUMERO_POLICY = Map.newMapKey("CT_POLICIES"); // numero di policy configurate
- public static final MapKey<String> PDD_CONTEXT_NUMERO_POLICY_DISABILITATE = Map.newMapKey("CT_DISABLED_POLICIES"); // numero di policy disabilitate
- public static final MapKey<String> PDD_CONTEXT_NUMERO_POLICY_FILTRATE = Map.newMapKey("CT_FILTERED_POLICIES"); // numero di policy filtrate
- public static final MapKey<String> PDD_CONTEXT_NUMERO_POLICY_NON_APPLICATE = Map.newMapKey("CT_NOT_APPLICABLED_POLICIES"); // numero di policy non applicabili
- public static final MapKey<String> PDD_CONTEXT_NUMERO_POLICY_RISPETTATE = Map.newMapKey("CT_RESPECTED_POLICIES"); // numero di policy rispettate
- public static final MapKey<String> PDD_CONTEXT_NUMERO_POLICY_VIOLATE = Map.newMapKey("CT_VIOLATED_POLICIES"); // numero di policy violate
- public static final MapKey<String> PDD_CONTEXT_NUMERO_POLICY_VIOLATE_WARNING_ONLY = Map.newMapKey("CT_VIOLATED_WARNING_ONLY_POLICIES"); // numero di policy violate in warning only mode
- public static final MapKey<String> PDD_CONTEXT_NUMERO_POLICY_IN_ERRORE = Map.newMapKey("CT_ERROR_POLICIES"); // numero di policy la cui verifica ha provocato un errore
-
- private static final String PDD_CONTEXT_VALUE_CONNECTION_TIMEOUT = org.openspcoop2.core.controllo_traffico.constants.Costanti.PDD_CONTEXT_VALUE_CONNECTION_TIMEOUT;
- private static final String PDD_CONTEXT_VALUE_REQUEST_READ_TIMEOUT = org.openspcoop2.core.controllo_traffico.constants.Costanti.PDD_CONTEXT_VALUE_REQUEST_READ_TIMEOUT;
- private static final String PDD_CONTEXT_VALUE_RESPONSE_READ_TIMEOUT = org.openspcoop2.core.controllo_traffico.constants.Costanti.PDD_CONTEXT_VALUE_RESPONSE_READ_TIMEOUT;
- private static final String PDD_CONTEXT_VALUE_READ_TIMEOUT = org.openspcoop2.core.controllo_traffico.constants.Costanti.PDD_CONTEXT_VALUE_READ_TIMEOUT;
- public static boolean addPddContextInfoControlloTrafficoConnectionTimeout(Context pddContext){
- if(alreadyExistsPddContextInfoControlloTrafficoTimeout(pddContext, PDD_CONTEXT_VALUE_CONNECTION_TIMEOUT)) {
- return false;
- }
- pddContext.addObject(PDD_CONTEXT_NAME_CONTROLLO_TRAFFICO_VIOLAZIONE, PDD_CONTEXT_VALUE_CONNECTION_TIMEOUT);
- return true;
- }
- public static boolean addPddContextInfoControlloTrafficoReadRequestTimeout(Context pddContext, boolean checkAll){
- if(checkAll) {
- if(alreadyExistsPddContextInfoControlloTrafficoTimeout(pddContext,
- PDD_CONTEXT_VALUE_READ_TIMEOUT, PDD_CONTEXT_VALUE_RESPONSE_READ_TIMEOUT, PDD_CONTEXT_VALUE_REQUEST_READ_TIMEOUT)) {
- return false;
- }
- }
- else if(alreadyExistsPddContextInfoControlloTrafficoTimeout(pddContext, PDD_CONTEXT_VALUE_REQUEST_READ_TIMEOUT)) {
- return false;
- }
- pddContext.addObject(PDD_CONTEXT_NAME_CONTROLLO_TRAFFICO_VIOLAZIONE, PDD_CONTEXT_VALUE_REQUEST_READ_TIMEOUT);
- return true;
- }
- public static boolean addPddContextInfoControlloTrafficoReadResponseTimeout(Context pddContext, boolean checkAll){
- if(checkAll) {
- if(alreadyExistsPddContextInfoControlloTrafficoTimeout(pddContext,
- PDD_CONTEXT_VALUE_READ_TIMEOUT, PDD_CONTEXT_VALUE_RESPONSE_READ_TIMEOUT, PDD_CONTEXT_VALUE_REQUEST_READ_TIMEOUT)) {
- return false;
- }
- }
- else if(alreadyExistsPddContextInfoControlloTrafficoTimeout(pddContext, PDD_CONTEXT_VALUE_RESPONSE_READ_TIMEOUT)) {
- return false;
- }
- pddContext.addObject(PDD_CONTEXT_NAME_CONTROLLO_TRAFFICO_VIOLAZIONE, PDD_CONTEXT_VALUE_RESPONSE_READ_TIMEOUT);
- return true;
- }
- public static boolean addPddContextInfoControlloTrafficoReadTimeout(Context pddContext, boolean checkAll){
- if(checkAll) {
- if(alreadyExistsPddContextInfoControlloTrafficoTimeout(pddContext,
- PDD_CONTEXT_VALUE_READ_TIMEOUT, PDD_CONTEXT_VALUE_RESPONSE_READ_TIMEOUT, PDD_CONTEXT_VALUE_REQUEST_READ_TIMEOUT)) {
- return false;
- }
- }
- else if(alreadyExistsPddContextInfoControlloTrafficoTimeout(pddContext, PDD_CONTEXT_VALUE_READ_TIMEOUT)) {
- return false;
- }
- pddContext.addObject(PDD_CONTEXT_NAME_CONTROLLO_TRAFFICO_VIOLAZIONE, PDD_CONTEXT_VALUE_READ_TIMEOUT);
- return true;
- }
- private static boolean alreadyExistsPddContextInfoControlloTrafficoTimeout(Context pddContext, String ... valore) {
- if(valore!=null && valore.length>0) {
- for (String v : valore) {
- if(alreadyExistsPddContextInfoControlloTrafficoTimeout(pddContext, v)) {
- return true;
- }
- }
- }
- return false;
- }
- private static boolean alreadyExistsPddContextInfoControlloTrafficoTimeout(Context pddContext, String valore) {
- if(pddContext.containsKey(PDD_CONTEXT_NAME_CONTROLLO_TRAFFICO_VIOLAZIONE)) {
- String tipo = (String) pddContext.get(PDD_CONTEXT_NAME_CONTROLLO_TRAFFICO_VIOLAZIONE);
- if(tipo!=null) {
- return valore.equals(tipo);
- }
- }
- return false;
- }
-
- /* ***** FAULT ****** */
-
- public static HandlerException getErroreProcessamento(Exception e,
- PdDContext pddContext){
-
- if(pddContext!=null) {
- // nop
- }
-
- HandlerException he = new HandlerException( SISTEMA_NON_DISPONIBILE + " [" + ERRORE_PROCESSAMENTO_CODE + "]" , e);
- he.setCustomizedResponse(true);
- he.setCustomizedResponseAs4xxCode(false);
- he.setCustomizedResponseCode(ERRORE_PROCESSAMENTO_CODE);
-
- return he;
- }
-
- public static HandlerException getMaxThreadsViolated(String messaggioErroreInChiaro, boolean erroreGenerico,
- PdDContext pddContext){
-
- if(pddContext!=null) {
- // nop
- }
-
- HandlerException he = null;
-
- if(erroreGenerico){
- he = new HandlerException( SISTEMA_NON_DISPONIBILE + " [" + MAX_THREADS_VIOLATED_CODE + "]" );
- }
- else{
- he = new HandlerException( messaggioErroreInChiaro );
- }
-
- he.setCustomizedResponse(true);
- he.setCustomizedResponseAs4xxCode(true);
- he.setCustomizedResponseCode(MAX_THREADS_VIOLATED_CODE);
- he.setIntegrationFunctionError(IntegrationFunctionError.TOO_MANY_REQUESTS);
-
- return he;
- }
-
- public static HandlerException getControlloTrafficoPolicyViolated(List<RisultatoVerificaPolicy> policyViolate, boolean erroreGenerico,
- PdDContext pddContext){
-
- if(pddContext!=null) {
- // nop
- }
-
- HandlerException he = null;
-
- StringBuilder bf = new StringBuilder();
- if(!erroreGenerico){
- bf.append("Rilevate "+policyViolate.size()+" policy violate:\n");
- }
- boolean limitExceededConditionalCongestion = false;
- boolean limitExceededConditionalDeteriorationPerformance = false;
- boolean limitExceeded = false;
- boolean tooManyRequestsConditionalCongestion = false;
- boolean tooManyRequestsConditionalDeteriorationPerformance = false;
- boolean tooManyRequests = false;
-
- for (int i = 0; i < policyViolate.size(); i++) {
- RisultatoVerificaPolicy risultato = policyViolate.get(i);
-
- if(!risultato.isErroreGenerico()) {
- if(risultato.isSimultanee()) {
- if(risultato.isApplicabilitaCongestione()) {
- tooManyRequestsConditionalCongestion = true;
- }
- else if(risultato.isApplicabilitaDegradoPrestazionale()) {
- tooManyRequestsConditionalDeteriorationPerformance = true;
- }
- else if(risultato.isApplicabilitaStatoAllarme()) {
- tooManyRequestsConditionalDeteriorationPerformance = true; // fare IntegrationFunctionError apposito
- }
- else {
- tooManyRequests = true;
- }
- }
- else {
- if(risultato.isApplicabilitaCongestione()) {
- limitExceededConditionalCongestion = true;
- }
- else if(risultato.isApplicabilitaDegradoPrestazionale()) {
- limitExceededConditionalDeteriorationPerformance = true;
- }
- else if(risultato.isApplicabilitaStatoAllarme()) {
- limitExceededConditionalDeteriorationPerformance = true; // fare IntegrationFunctionError apposito
- }
- else {
- limitExceeded = true;
- }
- }
- }
- else {
- tooManyRequests = true; // viene scelto questo
- }
-
- if(erroreGenerico){
-
- if(i>0){
- bf.append(",");
- }
-
- bf.append(toCode(risultato));
-
- }
- else{
-
- if(i>0){
- bf.append("\n");
- }
-
- if(risultato.isErroreGenerico()){
- bf.append("\tPolicy-"+(i+1)+" (Errore interno) "+risultato.getDescrizione());
- }
- else{
- bf.append("\tPolicy-"+(i+1)+" (Violata) "+risultato.getDescrizione());
- }
- }
- }
-
- if(erroreGenerico){
- he = new HandlerException( SISTEMA_NON_DISPONIBILE + " [" + bf.toString() + "]" );
- }
- else{
- he = new HandlerException( bf.toString() );
- }
-
- he.setCustomizedResponse(true);
- he.setCustomizedResponseAs4xxCode(true);
- StringBuilder bfCode = new StringBuilder();
- for (int i = 0; i < policyViolate.size(); i++) {
- RisultatoVerificaPolicy risultato = policyViolate.get(i);
- if(i>0){
- bfCode.append("_");
- }
- bfCode.append(toCode(risultato));
- }
- he.setCustomizedResponseCode(bfCode.toString());
-
- if(limitExceeded) {
- // prevale poiche' il client non potra rispedire
- he.setIntegrationFunctionError(IntegrationFunctionError.LIMIT_EXCEEDED);
- }
- else if(limitExceededConditionalCongestion) {
- he.setIntegrationFunctionError(IntegrationFunctionError.LIMIT_EXCEEDED_CONDITIONAL_CONGESTION);
- }
- else if(limitExceededConditionalDeteriorationPerformance) {
- he.setIntegrationFunctionError(IntegrationFunctionError.LIMIT_EXCEEDED_CONDITIONAL_DETERIORATION_PERFORMANCE);
- }
- else if(tooManyRequests) {
- he.setIntegrationFunctionError(IntegrationFunctionError.TOO_MANY_REQUESTS);
- }
- else if(tooManyRequestsConditionalCongestion) {
- he.setIntegrationFunctionError(IntegrationFunctionError.TOO_MANY_REQUESTS_CONDITIONAL_CONGESTION);
- }
- else if(tooManyRequestsConditionalDeteriorationPerformance) {
- he.setIntegrationFunctionError(IntegrationFunctionError.TOO_MANY_REQUESTS_CONDITIONAL_DETERIORATION_PERFORMANCE);
- }
- else {
- he.setIntegrationFunctionError(IntegrationFunctionError.TOO_MANY_REQUESTS);
- }
-
- return he;
- }
- private static String toCode(RisultatoVerificaPolicy risultato) {
- StringBuilder bf = new StringBuilder();
- if(risultato.isErroreGenerico()){
- bf.append(ERRORE_GENERICO_DURANTE_VERIFICA);
- }
-
- if(risultato.getRisorsa()==null){
- bf.append(CONTROLLO_TRAFFICO_POLICY_VIOLATED_UNKNOW_TIPO);
- }
- else{
- switch (risultato.getRisorsa()) {
- case NUMERO_RICHIESTE:
- if(risultato.isSimultanee()){
- bf.append(CONTROLLO_TRAFFICO_POLICY_VIOLATED_NUMERO_RICHIESTE_SIMULTANEE_CODE);
- }
- else{
- bf.append(CONTROLLO_TRAFFICO_POLICY_VIOLATED_NUMERO_RICHIESTE_CODE);
- }
- break;
- case DIMENSIONE_MASSIMA_MESSAGGIO:
- bf.append(CONTROLLO_TRAFFICO_POLICY_VIOLATED_DIMENSIONE_MASSIMA_MESSAGGIO_CODE);
- break;
- case OCCUPAZIONE_BANDA:
- bf.append(CONTROLLO_TRAFFICO_POLICY_VIOLATED_OCCUPAZIONE_BANDA_CODE);
- break;
- case TEMPO_COMPLESSIVO_RISPOSTA:
- bf.append(CONTROLLO_TRAFFICO_POLICY_VIOLATED_TEMPO_COMPLESSIVO_CODE);
- break;
- case TEMPO_MEDIO_RISPOSTA:
- bf.append(CONTROLLO_TRAFFICO_POLICY_VIOLATED_TEMPO_MEDIO_CODE);
- break;
- case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO:
- bf.append(CONTROLLO_TRAFFICO_POLICY_VIOLATED_NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO_CODE);
- break;
- case NUMERO_RICHIESTE_FALLITE:
- bf.append(CONTROLLO_TRAFFICO_POLICY_VIOLATED_NUMERO_RICHIESTE_FALLITE_CODE);
- break;
- case NUMERO_FAULT_APPLICATIVI:
- bf.append(CONTROLLO_TRAFFICO_POLICY_VIOLATED_NUMERO_FAULT_APPLICATIVI_CODE);
- break;
- case NUMERO_RICHIESTE_FALLITE_OFAULT_APPLICATIVI:
- bf.append(CONTROLLO_TRAFFICO_POLICY_VIOLATED_NUMERO_RICHIESTE_FALLITE_O_FAULT_APPLICATIVI_CODE);
- break;
- case NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO_OFAULT_APPLICATIVI:
- bf.append(CONTROLLO_TRAFFICO_POLICY_VIOLATED_NUMERO_RICHIESTE_COMPLETATE_CON_SUCCESSO_O_FAULT_APPLICATIVI_CODE);
- break;
- }
-
- if(risultato.isApplicabilitaCongestione()){
- bf.append(APPLICABILITA_CONGESTIONE_CODE);
- }
- if(risultato.isApplicabilitaDegradoPrestazionale()){
- bf.append(APPLICABILITA_DEGRADO_CODE);
- }
- if(risultato.isApplicabilitaStatoAllarme()){
- bf.append(APPLICABILITA_STATO_ALLARME_CODE);
- }
- }
- return bf.toString();
- }
-
- public static void configureHandlerExceptionByTipoErrore(ServiceBinding serviceBinding, HandlerException he, TipoErrore tipoErroreParam,boolean includiDescrizioneErrore,Logger log) throws ProtocolException {
- TipoErrore tipoErrore = tipoErroreParam;
- if(ServiceBinding.REST.equals(serviceBinding)) {
- tipoErrore = TipoErrore.FAULT; // in rest il codice http viene auto-gestito correttamente
- }
-
- if(he==null) {
- throw new ProtocolException("HandlerException is null");
- }
-
- switch (tipoErrore) {
- case HTTP_429:
- if(includiDescrizioneErrore) {
- he.setResponseContentType(HttpConstants.CONTENT_TYPE_HTML);
-
- String tipo = null;
- if(he.getIntegrationFunctionError()!=null) {
- switch (he.getIntegrationFunctionError()) {
- case LIMIT_EXCEEDED:
- case LIMIT_EXCEEDED_CONDITIONAL_CONGESTION:
- case LIMIT_EXCEEDED_CONDITIONAL_DETERIORATION_PERFORMANCE:
- tipo = CostantiControlloTraffico.HTML_429_LIMIT_EXCEEDED_ERROR;
- break;
- case TOO_MANY_REQUESTS:
- case TOO_MANY_REQUESTS_CONDITIONAL_CONGESTION:
- case TOO_MANY_REQUESTS_CONDITIONAL_DETERIORATION_PERFORMANCE:
- tipo = CostantiControlloTraffico.HTML_429_TOO_MANY_REQUESTS_ERROR;
- break;
- default:
- tipo = CostantiControlloTraffico.HTML_429_TOO_MANY_REQUESTS_ERROR;
- break;
- }
- }
- else {
- tipo = CostantiControlloTraffico.HTML_429_TOO_MANY_REQUESTS_ERROR;
- }
-
- String msgErrore = null;
- ErroriProperties erroriProperties = ErroriProperties.getInstance(log);
- boolean genericDetails = true;
- IntegrationFunctionError functionError = IntegrationFunctionError.TOO_MANY_REQUESTS;
- if(he.getIntegrationFunctionError()!=null) {
- functionError = he.getIntegrationFunctionError();
- }
- /**if(!genericDetails && erroriProperties.isForceGenericDetails(functionError)) {
- genericDetails = true;
- }*/
- if (Costanti.isTRANSACTION_FORCE_SPECIFIC_ERROR_DETAILS()) {
- genericDetails = false;
- }
- if(!genericDetails) {
- msgErrore = he.getMessage();
- }
- else {
- msgErrore = erroriProperties.getGenericDetails(functionError);
- }
-
- String html = tipo
- .replace(CostantiControlloTraffico.HTML_ERROR_MESSAGE_TEMPLATE, msgErrore);
- he.setResponse(html.getBytes());
- }
- else {
- he.setEmptyResponse(true);
- }
- he.setResponseCode("429");
- break;
- case HTTP_503:
- if(includiDescrizioneErrore) {
- he.setResponseContentType(HttpConstants.CONTENT_TYPE_HTML);
- String html = CostantiControlloTraffico.HTML_503_ERROR
- .replace(CostantiControlloTraffico.HTML_ERROR_MESSAGE_TEMPLATE, he.getMessage());
- he.setResponse(html.getBytes());
- }
- else {
- he.setEmptyResponse(true);
- }
- he.setResponseCode("503");
- break;
- case HTTP_500:
- if(includiDescrizioneErrore) {
- he.setResponseContentType(HttpConstants.CONTENT_TYPE_HTML);
- String html = CostantiControlloTraffico.HTML_500_ERROR
- .replace(CostantiControlloTraffico.HTML_ERROR_MESSAGE_TEMPLATE, he.getMessage());
- he.setResponse(html.getBytes());
- }
- else {
- he.setEmptyResponse(true);
- }
- he.setResponseCode("500");
- break;
- case FAULT:
- if(!includiDescrizioneErrore) {
- he.setCustomizedResponse(false);
- }
- break;
- }
- }
-
- }