NotificatoreEventi.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.io.File;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.sql.Connection;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipFile;
- import java.util.zip.ZipOutputStream;
- import javax.activation.FileDataSource;
- import org.openspcoop2.core.commons.CoreException;
- import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
- import org.openspcoop2.core.controllo_traffico.utils.PolicyUtilities;
- import org.openspcoop2.core.eventi.Evento;
- import org.openspcoop2.core.eventi.constants.CodiceEventoControlloTraffico;
- import org.openspcoop2.core.eventi.constants.TipoEvento;
- import org.openspcoop2.core.eventi.constants.TipoSeverita;
- import org.openspcoop2.core.eventi.utils.SeveritaConverter;
- import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
- import org.openspcoop2.pdd.core.eventi.GestoreEventi;
- import org.openspcoop2.protocol.basic.Costanti;
- import org.openspcoop2.utils.SemaphoreLock;
- import org.openspcoop2.utils.Utilities;
- import org.openspcoop2.utils.UtilsException;
- import org.openspcoop2.utils.beans.WriteToSerializerType;
- import org.openspcoop2.utils.date.DateManager;
- import org.openspcoop2.utils.date.DateUtils;
- import org.openspcoop2.utils.io.ZipUtilities;
- import org.openspcoop2.utils.resources.FileSystemUtilities;
- import org.slf4j.Logger;
- /**
- * NotificatoreEventi
- *
- * @author Poli Andrea (poli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class NotificatoreEventi {
- private static NotificatoreEventi staticInstance = null;
- private static synchronized void initialize() throws DriverConfigurazioneException {
- if(staticInstance==null){
- staticInstance = new NotificatoreEventi();
- }
- }
- public static NotificatoreEventi getInstance() throws DriverConfigurazioneException {
- if(staticInstance==null){
- // spotbugs warning 'SING_SINGLETON_GETTER_NOT_SYNCHRONIZED': l'istanza viene creata allo startup
- synchronized (NotificatoreEventi.class) {
- initialize();
- }
- }
- return staticInstance;
- }
- private GestoreEventi gestoreEventi;
-
- private NotificatoreEventi() throws DriverConfigurazioneException {
- this.gestoreEventi = GestoreEventi.getInstance();
- }
-
- /**
- * In memoria vengono collezionate (viene salvata la data):
- * Eventi causati durante la gestione di un thread (denominati TH_EVENTO)
- * - TH_lastMaxRequests. ultimo scarto di una richiesta per raggiungimento MaxThreads
- * - TH_lastPddCongestionata. ultimo evento di rilevamento congestione della PdD
- * - TH_lastPolicyViolated. ultimo scarto per violazione di una policy attiva
- * - TH_lastPolicyViolated_warningOnly. ultimo di scarto per violazione di una policy attiva configurata in warning only
- *
- * Inoltre in memoria vengono collezionati gli ultimi eventi emessi realmente emessi sul database degli eventi
- * (viene salvato la tipologia dell'evento cioè se l'evento occorre 'INGRESSO', ad es. violazione,
- * o se l'evento termina 'USCITA', ad es. violazione-risolta)
- * per i quattro tipi sopra indicati (denominati con DB_EVENTO):
- * - DB_lastMaxRequests. ultimo evento emesso su db per raggiungimento (o ritorno nei livelli soglia) da MaxThreads
- * - DB_lastPddCongestionata. ultimo evento di rilevamento congestione (fine congestione) della PdD
- * - DB_lastPolicyViolated. ultimo evento emesso per scarto per violazione (o ritorno nei livelli soglia) di una policy attiva
- * - DB_lastPolicyViolated_warningOnly. ultimo evento emesso per scarto per violazione (o ritorno nei livelli soglia) di una policy attiva in warning only
- *
- * Esistera un timer che gira ogni x minuti.
- * Per ogni TH_<tipo> effettua il seguente algoritmo (dove tipo e' uno dei quattro descritti in precedenza).
- * if( esiste TH_<tipo> ultimo_intervallo_x_minuti ){
- * if( esiste DB_<tipo> ){
- * tipologia = DB_<tipo>.tipologia
- * if ( tipologia == "USCITA" ){
- * // emetto evento di ingresso, ho una variazione di stato
- * DB_<tipo> = emettoEventoSuDatabase(<tipo>,"INGRESSO")
- * }
- * }
- * else{
- * // primo evento
- * DB_<tipo> = emettoEventoSuDatabase(<tipo>,"INGRESSO")
- * }
- * }
- * else{
- * if( esiste DB_<tipo> ){
- * tipologia = DB_<tipo>.tipologia
- * if ( tipologia == "INGRESSO" ){
- * // emetto evento di uscita, ho una variazione di stato
- * DB_<tipo> = emettoEventoSuDatabase(<tipo>,"USCITA")
- * }
- * }
- * }
- *
- * NOTA: Non ci interessa la visione di dettaglio. E' chiaro che se rilevo un evento di scarto nell'intervallo di 5 minuti
- * poi puo' darsi che nell'ultimo minuto il problema sia rientrato. Pero' io vorrei segnalare che c'e' stato il problema
- * Poi nel prossimo controllo, indichero' che il problema e' rientrato, pero' almeno so' che nella finestra temporale dei 5 minuti e' accaduto un errore.
- *
- * NOTA: L'analisi di dettaglio puo' poi essere effettuata sulle transazioni ricercando le transazioni che contengono quell'evento.
- */
-
- //private Boolean semaphore = true; // per gestire l'accesso alle risorse dal thread
- private static final org.openspcoop2.utils.Semaphore lock = new org.openspcoop2.utils.Semaphore("NotificatoreEventi");
-
- // TH_EVENTO
- private DatiEventoGenerico inMemoryLastMaxRequests = new DatiEventoGenerico();
- private DatiEventoGenerico inMemoryLastMaxRequestsWarningOnly = new DatiEventoGenerico();
- private DatiEventoGenerico inMemoryLastPddCongestionata = new DatiEventoGenerico();
- private Map<String, DatiEventoGenerico> inMemoryLastPolicyGlobaliViolated = new HashMap<>();
- private Map<String, DatiEventoGenerico> inMemoryLastPolicyGlobaliViolatedWarningOnly = new HashMap<>();
- private Map<String, DatiEventoGenerico> inMemoryLastPolicyAPIViolated = new HashMap<>();
- private Map<String, DatiEventoGenerico> inMemoryLastPolicyAPIViolatedWarningOnly = new HashMap<>();
- private Map<String, DatiEventoGenerico> inMemoryLastTimeoutConnessione = new HashMap<>();
- private Map<String, DatiEventoGenerico> inMemoryLastTimeoutRichiesta = new HashMap<>();
- private Map<String, DatiEventoGenerico> inMemoryLastTimeoutRisposta = new HashMap<>();
-
- // DB_EVENTO
- private DatabaseDatiEventoGenerico dbLastMaxRequests = new DatabaseDatiEventoGenerico();
- private DatabaseDatiEventoGenerico dbLastMaxRequestsWarningOnly = new DatabaseDatiEventoGenerico();
- private DatabaseDatiEventoGenerico dbLastPddCongestionata = new DatabaseDatiEventoGenerico();
- private Map<String, DatabaseDatiEventoGenerico> dbLastPolicyGlobaliViolated = new HashMap<>();
- private Map<String, DatabaseDatiEventoGenerico> dbLastPolicyGlobaliViolatedWarningOnly = new HashMap<>();
- private Map<String, DatabaseDatiEventoGenerico> dbLastPolicyAPIViolated = new HashMap<>();
- private Map<String, DatabaseDatiEventoGenerico> dbLastPolicyAPIViolatedWarningOnly = new HashMap<>();
- private Map<String, DatabaseDatiEventoGenerico> dbLastTimeoutConnessione = new HashMap<>();
- private Map<String, DatabaseDatiEventoGenerico> dbLastTimeoutRichiesta = new HashMap<>();
- private Map<String, DatabaseDatiEventoGenerico> dbLastTimeoutRisposta = new HashMap<>();
-
- private static final String ID_POLICY_NON_FORNITA = "IdPolicy non fornita";
-
- public void log(CategoriaEventoControlloTraffico evento, Date date, String descrizione) throws CoreException,UtilsException{
- log(evento, null, null, date, descrizione);
- }
- public void log(CategoriaEventoControlloTraffico evento, String idPolicy, String configurazione, Date date, String descrizione) throws CoreException,UtilsException{
-
- if(evento==null){
- throw new CoreException("Evento non definito");
- }
-
- switch (evento) {
-
- case LIMITE_GLOBALE_RICHIESTE_SIMULTANEE:{
- SemaphoreLock slock = lock.acquire("log_"+evento.name());
- try {
- if(this.inMemoryLastMaxRequests.datiConsumatiThread){
- if(date==null)
- this.inMemoryLastMaxRequests.data = DateManager.getDate();
- else
- this.inMemoryLastMaxRequests.data = date;
- this.inMemoryLastMaxRequests.descrizione = descrizione;
- this.inMemoryLastMaxRequests.configurazione = configurazione;
- /**System.out.println("@@LOG AGGIORNO DATA LIMITE_RICHIESTE_SIMULTANEE_VIOLAZIONE ["+
- newSimpleDateFormat().format(this.inMemoryLastMaxRequests.data)+"]");*/
- this.inMemoryLastMaxRequests.datiConsumatiThread=false;
- }
- }finally {
- lock.release(slock, "log_"+evento.name());
- }
- break;
- }
- case LIMITE_GLOBALE_RICHIESTE_SIMULTANEE_WARNING_ONLY:{
- SemaphoreLock slock = lock.acquire("log_"+evento.name());
- try {
- if(this.inMemoryLastMaxRequestsWarningOnly.datiConsumatiThread){
- if(date==null)
- this.inMemoryLastMaxRequestsWarningOnly.data = DateManager.getDate();
- else
- this.inMemoryLastMaxRequestsWarningOnly.data = date;
- this.inMemoryLastMaxRequestsWarningOnly.descrizione = descrizione;
- this.inMemoryLastMaxRequestsWarningOnly.configurazione = configurazione;
- /**System.out.println("@@LOG AGGIORNO DATA LIMITE_RICHIESTE_SIMULTANEE_VIOLAZIONE WARNING_ONLY ["+
- newSimpleDateFormat().format(this.inMemoryLastMaxRequestsWarningOnly.data)+"]");*/
- this.inMemoryLastMaxRequestsWarningOnly.datiConsumatiThread=false;
- }
- }finally {
- lock.release(slock, "log_"+evento.name());
- }
- break;
- }
- case CONGESTIONE_PORTA_DOMINIO:{
- SemaphoreLock slock = lock.acquire("log_"+evento.name());
- try {
- if(this.inMemoryLastPddCongestionata.datiConsumatiThread){
- if(date==null)
- this.inMemoryLastPddCongestionata.data = DateManager.getDate();
- else
- this.inMemoryLastPddCongestionata.data = date;
- this.inMemoryLastPddCongestionata.descrizione = descrizione;
- this.inMemoryLastPddCongestionata.configurazione = configurazione;
- /**System.out.println("@@LOG AGGIORNO DATA CONGESTIONE PDD ["+
- newSimpleDateFormat().format(this.inMemoryLastPddCongestionata.data)+"]");*/
- this.inMemoryLastPddCongestionata.datiConsumatiThread=false;
- }
- }finally {
- lock.release(slock, "log_"+evento.name());
- }
- break;
- }
- case POLICY_GLOBALE:{
- if(idPolicy==null){
- throw new CoreException(ID_POLICY_NON_FORNITA);
- }
- SemaphoreLock slock = lock.acquire("log_"+evento.name());
- try {
- if(!this.inMemoryLastPolicyGlobaliViolated.containsKey(idPolicy)){
- this.inMemoryLastPolicyGlobaliViolated.put(idPolicy, new DatiEventoGenerico());
- }
- if(!this.dbLastPolicyGlobaliViolated.containsKey(idPolicy)){
- this.dbLastPolicyGlobaliViolated.put(idPolicy, new DatabaseDatiEventoGenerico());
- }
- DatiEventoGenerico inMemoryLastPolicyGlobaleViolatedPolicy = this.inMemoryLastPolicyGlobaliViolated.get(idPolicy);
-
- if(inMemoryLastPolicyGlobaleViolatedPolicy.datiConsumatiThread){
- if(date==null)
- inMemoryLastPolicyGlobaleViolatedPolicy.data = DateManager.getDate();
- else
- inMemoryLastPolicyGlobaleViolatedPolicy.data = date;
- inMemoryLastPolicyGlobaleViolatedPolicy.descrizione = descrizione;
- inMemoryLastPolicyGlobaleViolatedPolicy.configurazione = configurazione;
- /**System.out.println("@@LOG AGGIORNO DATA POLICY VIOLAZIONE ["+
- newSimpleDateFormat().format(inMemoryLastPolicyGlobaleViolatedPolicy.data)+"]");*/
- inMemoryLastPolicyGlobaleViolatedPolicy.datiConsumatiThread=false;
- }
- }finally {
- lock.release(slock, "log_"+evento.name());
- }
- break;
- }
- case POLICY_GLOBALE_WARNING_ONLY:{
- if(idPolicy==null){
- throw new CoreException(ID_POLICY_NON_FORNITA);
- }
- SemaphoreLock slock = lock.acquire("log_"+evento.name());
- try {
- if(!this.inMemoryLastPolicyGlobaliViolatedWarningOnly.containsKey(idPolicy)){
- this.inMemoryLastPolicyGlobaliViolatedWarningOnly.put(idPolicy, new DatiEventoGenerico());
- }
- if(!this.dbLastPolicyGlobaliViolatedWarningOnly.containsKey(idPolicy)){
- this.dbLastPolicyGlobaliViolatedWarningOnly.put(idPolicy, new DatabaseDatiEventoGenerico());
- }
- DatiEventoGenerico inMemoryLastPolicyGlobaleViolatedWarningOnlyPolicy = this.inMemoryLastPolicyGlobaliViolatedWarningOnly.get(idPolicy);
-
- if(inMemoryLastPolicyGlobaleViolatedWarningOnlyPolicy.datiConsumatiThread){
- if(date==null)
- inMemoryLastPolicyGlobaleViolatedWarningOnlyPolicy.data = DateManager.getDate();
- else
- inMemoryLastPolicyGlobaleViolatedWarningOnlyPolicy.data = date;
- inMemoryLastPolicyGlobaleViolatedWarningOnlyPolicy.descrizione = descrizione;
- inMemoryLastPolicyGlobaleViolatedWarningOnlyPolicy.configurazione = configurazione;
- /**System.out.println("@@LOG AGGIORNO DATA POLICY VIOLAZIONE WARNING_ONLY ["+
- newSimpleDateFormat().format(inMemoryLastPolicyGlobaleViolatedWarningOnlyPolicy.data)+"]");*/
- inMemoryLastPolicyGlobaleViolatedWarningOnlyPolicy.datiConsumatiThread=false;
- }
- }finally {
- lock.release(slock, "log_"+evento.name());
- }
- break;
- }
-
- case POLICY_API:{
- if(idPolicy==null){
- throw new CoreException(ID_POLICY_NON_FORNITA);
- }
- SemaphoreLock slock = lock.acquire("log_"+evento.name());
- try {
- if(!this.inMemoryLastPolicyAPIViolated.containsKey(idPolicy)){
- this.inMemoryLastPolicyAPIViolated.put(idPolicy, new DatiEventoGenerico());
- }
- if(!this.dbLastPolicyAPIViolated.containsKey(idPolicy)){
- this.dbLastPolicyAPIViolated.put(idPolicy, new DatabaseDatiEventoGenerico());
- }
- DatiEventoGenerico inMemoryLastPolicyAPIViolatedPolicy = this.inMemoryLastPolicyAPIViolated.get(idPolicy);
-
- if(inMemoryLastPolicyAPIViolatedPolicy.datiConsumatiThread){
- if(date==null)
- inMemoryLastPolicyAPIViolatedPolicy.data = DateManager.getDate();
- else
- inMemoryLastPolicyAPIViolatedPolicy.data = date;
- inMemoryLastPolicyAPIViolatedPolicy.descrizione = descrizione;
- inMemoryLastPolicyAPIViolatedPolicy.configurazione = configurazione;
- /**System.out.println("@@LOG AGGIORNO DATA POLICY VIOLAZIONE ["+
- newSimpleDateFormat().format(inMemoryLastPolicyAPIViolatedPolicy.data)+"]");*/
- inMemoryLastPolicyAPIViolatedPolicy.datiConsumatiThread=false;
- }
- }finally {
- lock.release(slock, "log_"+evento.name());
- }
- break;
- }
- case POLICY_API_WARNING_ONLY:{
- if(idPolicy==null){
- throw new CoreException(ID_POLICY_NON_FORNITA);
- }
- SemaphoreLock slock = lock.acquire("log_"+evento.name());
- try {
- if(!this.inMemoryLastPolicyAPIViolatedWarningOnly.containsKey(idPolicy)){
- this.inMemoryLastPolicyAPIViolatedWarningOnly.put(idPolicy, new DatiEventoGenerico());
- }
- if(!this.dbLastPolicyAPIViolatedWarningOnly.containsKey(idPolicy)){
- this.dbLastPolicyAPIViolatedWarningOnly.put(idPolicy, new DatabaseDatiEventoGenerico());
- }
- DatiEventoGenerico inMemoryLastPolicyAPIViolatedWarningOnlyPolicy = this.inMemoryLastPolicyAPIViolatedWarningOnly.get(idPolicy);
-
- if(inMemoryLastPolicyAPIViolatedWarningOnlyPolicy.datiConsumatiThread){
- if(date==null)
- inMemoryLastPolicyAPIViolatedWarningOnlyPolicy.data = DateManager.getDate();
- else
- inMemoryLastPolicyAPIViolatedWarningOnlyPolicy.data = date;
- inMemoryLastPolicyAPIViolatedWarningOnlyPolicy.descrizione = descrizione;
- inMemoryLastPolicyAPIViolatedWarningOnlyPolicy.configurazione = configurazione;
- /**System.out.println("@@LOG AGGIORNO DATA POLICY VIOLAZIONE WARNING_ONLY ["+
- newSimpleDateFormat().format(inMemoryLastPolicyAPIViolatedWarningOnlyPolicy.data)+"]");*/
- inMemoryLastPolicyAPIViolatedWarningOnlyPolicy.datiConsumatiThread=false;
- }
- }finally {
- lock.release(slock, "log_"+evento.name());
- }
- break;
- }
- case TIMEOUT_CONNESSIONE:{
- if(idPolicy==null){
- throw new CoreException(ID_POLICY_NON_FORNITA);
- }
- SemaphoreLock slock = lock.acquire("log_"+evento.name());
- try {
- if(!this.inMemoryLastTimeoutConnessione.containsKey(idPolicy)){
- this.inMemoryLastTimeoutConnessione.put(idPolicy, new DatiEventoGenerico());
- }
- if(!this.dbLastTimeoutConnessione.containsKey(idPolicy)){
- this.dbLastTimeoutConnessione.put(idPolicy, new DatabaseDatiEventoGenerico());
- }
- DatiEventoGenerico inMemoryLastTimeoutConnessioneRead = this.inMemoryLastTimeoutConnessione.get(idPolicy);
-
- if(inMemoryLastTimeoutConnessioneRead.datiConsumatiThread){
- if(date==null)
- inMemoryLastTimeoutConnessioneRead.data = DateManager.getDate();
- else
- inMemoryLastTimeoutConnessioneRead.data = date;
- inMemoryLastTimeoutConnessioneRead.descrizione = descrizione;
- inMemoryLastTimeoutConnessioneRead.configurazione = configurazione;
- /**System.out.println("@@LOG AGGIORNO DATA TIMEOUT CONNESSIONE VIOLAZIONE ["+
- newSimpleDateFormat().format(inMemoryLastTimeoutConnessioneRead.data)+"]");*/
- inMemoryLastTimeoutConnessioneRead.datiConsumatiThread=false;
- }
- }finally {
- lock.release(slock, "log_"+evento.name());
- }
- break;
- }
- case TIMEOUT_RICHIESTA:{
- if(idPolicy==null){
- throw new CoreException(ID_POLICY_NON_FORNITA);
- }
- SemaphoreLock slock = lock.acquire("log_"+evento.name());
- try {
- if(!this.inMemoryLastTimeoutRichiesta.containsKey(idPolicy)){
- this.inMemoryLastTimeoutRichiesta.put(idPolicy, new DatiEventoGenerico());
- }
- if(!this.dbLastTimeoutRichiesta.containsKey(idPolicy)){
- this.dbLastTimeoutRichiesta.put(idPolicy, new DatabaseDatiEventoGenerico());
- }
- DatiEventoGenerico inMemoryLastTimeoutRichiestaRead = this.inMemoryLastTimeoutRichiesta.get(idPolicy);
-
- if(inMemoryLastTimeoutRichiestaRead.datiConsumatiThread){
- if(date==null)
- inMemoryLastTimeoutRichiestaRead.data = DateManager.getDate();
- else
- inMemoryLastTimeoutRichiestaRead.data = date;
- inMemoryLastTimeoutRichiestaRead.descrizione = descrizione;
- inMemoryLastTimeoutRichiestaRead.configurazione = configurazione;
- /**System.out.println("@@LOG AGGIORNO DATA TIMEOUT RICHIESTA VIOLAZIONE ["+
- newSimpleDateFormat().format(inMemoryLastTimeoutRichiestaRead.data)+"]");*/
- inMemoryLastTimeoutRichiestaRead.datiConsumatiThread=false;
- }
- }finally {
- lock.release(slock, "log_"+evento.name());
- }
- break;
- }
- case TIMEOUT_RISPOSTA:{
- if(idPolicy==null){
- throw new CoreException(ID_POLICY_NON_FORNITA);
- }
- SemaphoreLock slock = lock.acquire("log_"+evento.name());
- try {
- if(!this.inMemoryLastTimeoutRisposta.containsKey(idPolicy)){
- this.inMemoryLastTimeoutRisposta.put(idPolicy, new DatiEventoGenerico());
- }
- if(!this.dbLastTimeoutRisposta.containsKey(idPolicy)){
- this.dbLastTimeoutRisposta.put(idPolicy, new DatabaseDatiEventoGenerico());
- }
- DatiEventoGenerico inMemoryLastTimeoutRispostaRead = this.inMemoryLastTimeoutRisposta.get(idPolicy);
-
- if(inMemoryLastTimeoutRispostaRead.datiConsumatiThread){
- if(date==null)
- inMemoryLastTimeoutRispostaRead.data = DateManager.getDate();
- else
- inMemoryLastTimeoutRispostaRead.data = date;
- inMemoryLastTimeoutRispostaRead.descrizione = descrizione;
- inMemoryLastTimeoutRispostaRead.configurazione = configurazione;
- /**System.out.println("@@LOG AGGIORNO DATA TIMEOUT RISPOSTA VIOLAZIONE ["+
- newSimpleDateFormat().format(inMemoryLastTimeoutRispostaRead.data)+"]");*/
- inMemoryLastTimeoutRispostaRead.datiConsumatiThread=false;
- }
- }finally {
- lock.release(slock, "log_"+evento.name());
- }
- break;
- }
- default:
- throw new CoreException("Tipo di evento ["+evento.name()+"] non gestito con questo metodo");
- }
- }
-
-
- private static void logInfo(Logger log,boolean debug,String msg){
- if(debug){
- log.info(msg);
- }
- }
- private static void logDebug(Logger log,boolean debug,String msg){
- if(debug){
- log.debug(msg);
- }
- }
-
- private static final String SUFFIX_IN_CORSO_PARENTESI_QUADRE = "] ...";
- private static final String SUFFIX_IN_CORSO = ") ...";
- private static final String SUFFIX_WARNING_ONLY_IN_CORSO = ") (warning-only) ...";
- private static final String SUFFIX_TERMINATA = ") terminata";
- private static final String SUFFIX_WARNING_ONLY_TERMINATA = ") (warning-only) terminata";
- private static final String EVERY = " every:";
- private static final String SEPARATOR = "=================================================================================";
-
- private static String getSuffixDate(SimpleDateFormat df, Date newInterval, int secondi) {
- return "[next-interval: "+df.format(newInterval)+
- "] [Prossimo Controllo previsto tra "+secondi+" secondi: "+df.format(new Date(DateManager.getTimeMillis()+(secondi*1000)))+"]";
- }
-
- public Date process(Logger log, int secondi, Date lastInterval, Connection connection, boolean debug) throws UtilsException{
-
- SimpleDateFormat df = DateUtils.getSimpleDateFormatMs();
-
- logInfo(log,debug,SEPARATOR);
-
- logInfo(log,debug,"Analisi memoria per generazione eventi in corso [interval: "+df.format(lastInterval)+SUFFIX_IN_CORSO_PARENTESI_QUADRE);
-
- // Raccolgo informazioni in memoria per rilasciare il lock
-
- // TH_*
- DatiEventoGenerico localInMemoryLastMaxRequests = null;
- DatiEventoGenerico localInMemoryLastMaxRequestsWarningOnly = null;
- DatiEventoGenerico localInMemoryLastPddCongestionata = null;
- Map<String, DatiEventoGenerico> localInMemoryLastPolicyGlobaliViolated = new HashMap<>();
- Map<String, DatiEventoGenerico> localInMemoryLastPolicyGlobaliViolatedWarningOnly = new HashMap<>();
- Map<String, DatiEventoGenerico> localInMemoryLastPolicyAPIViolated = new HashMap<>();
- Map<String, DatiEventoGenerico> localInMemoryLastPolicyAPIViolatedWarningOnly = new HashMap<>();
- Date newInterval = null;
- SemaphoreLock slock = lock.acquire("process");
- try {
-
- localInMemoryLastMaxRequests = this.inMemoryLastMaxRequests.readAndConsume();
- localInMemoryLastMaxRequestsWarningOnly = this.inMemoryLastMaxRequestsWarningOnly.readAndConsume();
- localInMemoryLastPddCongestionata = this.inMemoryLastPddCongestionata.readAndConsume();
-
- if(this.inMemoryLastPolicyGlobaliViolated!=null && this.inMemoryLastPolicyGlobaliViolated.size()>0){
- for (Map.Entry<String,DatiEventoGenerico> entry : this.inMemoryLastPolicyGlobaliViolated.entrySet()) {
- localInMemoryLastPolicyGlobaliViolated.put(entry.getKey(), entry.getValue().readAndConsume());
- }
- }
- if(this.inMemoryLastPolicyGlobaliViolatedWarningOnly!=null && this.inMemoryLastPolicyGlobaliViolatedWarningOnly.size()>0){
- for (Map.Entry<String,DatiEventoGenerico> entry : this.inMemoryLastPolicyGlobaliViolatedWarningOnly.entrySet()) {
- localInMemoryLastPolicyGlobaliViolatedWarningOnly.put(entry.getKey(), entry.getValue().readAndConsume());
- }
- }
-
- if(this.inMemoryLastPolicyAPIViolated!=null && this.inMemoryLastPolicyAPIViolated.size()>0){
- for (Map.Entry<String,DatiEventoGenerico> entry : this.inMemoryLastPolicyAPIViolated.entrySet()) {
- localInMemoryLastPolicyAPIViolated.put(entry.getKey(), entry.getValue().readAndConsume());
- }
- }
- if(this.inMemoryLastPolicyAPIViolatedWarningOnly!=null && this.inMemoryLastPolicyAPIViolatedWarningOnly.size()>0){
- for (Map.Entry<String,DatiEventoGenerico> entry : this.inMemoryLastPolicyAPIViolatedWarningOnly.entrySet()) {
- localInMemoryLastPolicyAPIViolatedWarningOnly.put(entry.getKey(), entry.getValue().readAndConsume());
- }
- }
- newInterval = DateManager.getDate();
- }finally {
- lock.release(slock, "process");
- }
-
- // Gli eventi db_* sono acceduti solo dal thread non serve un synchronized
-
- // DB_*
- DatabaseDatiEventoGenerico localDbLastMaxRequests = null;
- DatabaseDatiEventoGenerico localDbLastMaxRequestsWarningOnly = null;
- DatabaseDatiEventoGenerico localDbLastPddCongestionata = null;
- Map<String, DatabaseDatiEventoGenerico> localDbLastPolicyGlobaliViolated = null;
- Map<String, DatabaseDatiEventoGenerico> localDbLastPolicyGlobaliViolatedWarningOnly = null;
- Map<String, DatabaseDatiEventoGenerico> localDbLastPolicyAPIViolated = null;
- Map<String, DatabaseDatiEventoGenerico> localDbLastPolicyAPIViolatedWarningOnly = null;
- localDbLastMaxRequests = this.dbLastMaxRequests;
- localDbLastMaxRequestsWarningOnly = this.dbLastMaxRequestsWarningOnly;
- localDbLastPddCongestionata = this.dbLastPddCongestionata;
- localDbLastPolicyGlobaliViolated = this.dbLastPolicyGlobaliViolated;
- localDbLastPolicyGlobaliViolatedWarningOnly = this.dbLastPolicyGlobaliViolatedWarningOnly;
- localDbLastPolicyAPIViolated = this.dbLastPolicyAPIViolated;
- localDbLastPolicyAPIViolatedWarningOnly = this.dbLastPolicyAPIViolatedWarningOnly;
-
- // Procedo ad effettuare l'elaborazione per emettere degli eventi
-
- logDebug(log,debug,"1. Analisi violazioni numero massimo richieste simultanee ...");
- processSingleEvent(log,
- localInMemoryLastMaxRequests,
- localDbLastMaxRequests,
- this.dbLastMaxRequests,
- TipoEvento.CONTROLLO_TRAFFICO_NUMERO_MASSIMO_RICHIESTE_SIMULTANEE,
- CodiceEventoControlloTraffico.VIOLAZIONE,
- CodiceEventoControlloTraffico.VIOLAZIONE_RISOLTA,
- lastInterval, connection, this.gestoreEventi,
- null, debug);
- logDebug(log,debug,"1. Analisi violazioni numero massimo richieste simultanee terminata");
-
- logDebug(log,debug,"2. Analisi violazioni numero massimo richieste simultanee (warning-only) ...");
- processSingleEvent(log,
- localInMemoryLastMaxRequestsWarningOnly,
- localDbLastMaxRequestsWarningOnly,
- this.dbLastMaxRequestsWarningOnly,
- TipoEvento.CONTROLLO_TRAFFICO_NUMERO_MASSIMO_RICHIESTE_SIMULTANEE,
- CodiceEventoControlloTraffico.VIOLAZIONE_WARNING_ONLY,
- CodiceEventoControlloTraffico.VIOLAZIONE_RISOLTA_WARNING_ONLY,
- lastInterval, connection, this.gestoreEventi,
- null, debug);
- logDebug(log,debug,"2. Analisi violazioni numero massimo richieste simultanee (warning-only) terminata");
-
- logDebug(log,debug,"3. Analisi controllo della congestione ...");
- processSingleEvent(log,
- localInMemoryLastPddCongestionata,
- localDbLastPddCongestionata,
- this.dbLastPddCongestionata,
- TipoEvento.CONTROLLO_TRAFFICO_SOGLIA_CONGESTIONE,
- CodiceEventoControlloTraffico.VIOLAZIONE,
- CodiceEventoControlloTraffico.VIOLAZIONE_RISOLTA,
- lastInterval, connection, this.gestoreEventi,
- null, debug);
- logDebug(log,debug,"3. Analisi controllo della congestione terminata");
-
- logDebug(log,debug,"4. Analisi policy globali violate (size:"+localInMemoryLastPolicyGlobaliViolated.size()+SUFFIX_IN_CORSO);
- if(!localInMemoryLastPolicyGlobaliViolated.isEmpty()) {
- for (Map.Entry<String,DatiEventoGenerico> entry : localInMemoryLastPolicyGlobaliViolated.entrySet()) {
- String idPolicy = entry.getKey();
- processSingleEvent(log,
- localInMemoryLastPolicyGlobaliViolated.get(idPolicy),
- localDbLastPolicyGlobaliViolated.get(idPolicy),
- this.dbLastPolicyGlobaliViolated.get(idPolicy),
- TipoEvento.RATE_LIMITING_POLICY_GLOBALE,
- CodiceEventoControlloTraffico.VIOLAZIONE,
- CodiceEventoControlloTraffico.VIOLAZIONE_RISOLTA,
- lastInterval, connection, this.gestoreEventi,
- idPolicy,debug);
- }
- }
- logDebug(log,debug,"4. Analisi policy globali violate (size:"+localInMemoryLastPolicyGlobaliViolated.size()+SUFFIX_TERMINATA);
-
- logDebug(log,debug,"5. Analisi policy globali violate (size:"+localInMemoryLastPolicyGlobaliViolatedWarningOnly.size()+SUFFIX_WARNING_ONLY_IN_CORSO);
- if(!localInMemoryLastPolicyGlobaliViolatedWarningOnly.isEmpty()) {
- for (Map.Entry<String,DatiEventoGenerico> entry : localInMemoryLastPolicyGlobaliViolatedWarningOnly.entrySet()) {
- String idPolicy = entry.getKey();
- processSingleEvent(log,
- localInMemoryLastPolicyGlobaliViolatedWarningOnly.get(idPolicy),
- localDbLastPolicyGlobaliViolatedWarningOnly.get(idPolicy),
- this.dbLastPolicyGlobaliViolatedWarningOnly.get(idPolicy),
- TipoEvento.RATE_LIMITING_POLICY_GLOBALE,
- CodiceEventoControlloTraffico.VIOLAZIONE_WARNING_ONLY,
- CodiceEventoControlloTraffico.VIOLAZIONE_RISOLTA_WARNING_ONLY,
- lastInterval, connection, this.gestoreEventi,
- idPolicy,debug);
- }
- }
- logDebug(log,debug,"5. Analisi policy globali violate (size:"+localInMemoryLastPolicyGlobaliViolatedWarningOnly.size()+SUFFIX_WARNING_ONLY_TERMINATA);
-
- logDebug(log,debug,"6. Analisi policy API violate (size:"+localInMemoryLastPolicyAPIViolated.size()+SUFFIX_IN_CORSO);
- if(!localInMemoryLastPolicyAPIViolated.isEmpty()) {
- for (Map.Entry<String,DatiEventoGenerico> entry : localInMemoryLastPolicyAPIViolated.entrySet()) {
- String idPolicy = entry.getKey();
- processSingleEvent(log,
- localInMemoryLastPolicyAPIViolated.get(idPolicy),
- localDbLastPolicyAPIViolated.get(idPolicy),
- this.dbLastPolicyAPIViolated.get(idPolicy),
- TipoEvento.RATE_LIMITING_POLICY_API,
- CodiceEventoControlloTraffico.VIOLAZIONE,
- CodiceEventoControlloTraffico.VIOLAZIONE_RISOLTA,
- lastInterval, connection, this.gestoreEventi,
- idPolicy,debug);
- }
- }
- logDebug(log,debug,"6. Analisi policy API violate (size:"+localInMemoryLastPolicyAPIViolated.size()+SUFFIX_TERMINATA);
-
- logDebug(log,debug,"7. Analisi policy API violate (size:"+localInMemoryLastPolicyAPIViolatedWarningOnly.size()+SUFFIX_WARNING_ONLY_IN_CORSO);
- if(!localInMemoryLastPolicyAPIViolatedWarningOnly.isEmpty()) {
- for (Map.Entry<String,DatiEventoGenerico> entry : localInMemoryLastPolicyAPIViolatedWarningOnly.entrySet()) {
- String idPolicy = entry.getKey();
- processSingleEvent(log,
- localInMemoryLastPolicyAPIViolatedWarningOnly.get(idPolicy),
- localDbLastPolicyAPIViolatedWarningOnly.get(idPolicy),
- this.dbLastPolicyAPIViolatedWarningOnly.get(idPolicy),
- TipoEvento.RATE_LIMITING_POLICY_API,
- CodiceEventoControlloTraffico.VIOLAZIONE_WARNING_ONLY,
- CodiceEventoControlloTraffico.VIOLAZIONE_RISOLTA_WARNING_ONLY,
- lastInterval, connection, this.gestoreEventi,
- idPolicy,debug);
- }
- }
- logDebug(log,debug,"7. Analisi policy API violate (size:"+localInMemoryLastPolicyAPIViolatedWarningOnly.size()+SUFFIX_WARNING_ONLY_TERMINATA);
-
- logInfo(log,debug,"Analisi memoria per generazione eventi terminata "+getSuffixDate(df, newInterval, secondi));
-
- return newInterval; // da usare per il prossimo intervallo
- }
- public Date processConnectionTimeout(Logger log, int secondi, Date lastInterval, Connection connection, boolean debug) throws UtilsException{
-
- SimpleDateFormat df = DateUtils.getSimpleDateFormatMs();
-
- logInfo(log,debug,SEPARATOR);
-
- logInfo(log,debug,"Analisi memoria per generazione eventi in corso 'ConnectionTimeout' [interval: "+df.format(lastInterval)+SUFFIX_IN_CORSO_PARENTESI_QUADRE);
-
- // Raccolgo informazioni in memoria per rilasciare il lock
-
- // TH_*
- Map<String, DatiEventoGenerico> localInMemoryLastTimeoutConnessione = new HashMap<>();
- Date newInterval = null;
- SemaphoreLock slock = lock.acquire("processConnectionTimeout");
- try {
- if(this.inMemoryLastTimeoutConnessione!=null && this.inMemoryLastTimeoutConnessione.size()>0){
- for (Map.Entry<String,DatiEventoGenerico> entry : this.inMemoryLastTimeoutConnessione.entrySet()) {
- localInMemoryLastTimeoutConnessione.put(entry.getKey(), entry.getValue().readAndConsume());
- }
- }
- newInterval = DateManager.getDate();
- }finally {
- lock.release(slock, "processConnectionTimeout");
- }
-
- // Gli eventi db_* sono acceduti solo dal thread non serve un synchronized
-
- // DB_*
- Map<String, DatabaseDatiEventoGenerico> localDbLastTimeoutConnessione = null;
- localDbLastTimeoutConnessione = this.dbLastTimeoutConnessione;
-
- // Procedo ad effettuare l'elaborazione per emettere degli eventi
-
- logDebug(log,debug,"8. Analisi eventi di Timeout durante la connessione (size:"+localInMemoryLastTimeoutConnessione.size()+SUFFIX_IN_CORSO);
- if(!localInMemoryLastTimeoutConnessione.isEmpty()) {
- for (Map.Entry<String,DatiEventoGenerico> entry : localInMemoryLastTimeoutConnessione.entrySet()) {
- String idPolicy = entry.getKey();
- processSingleEvent(log,
- localInMemoryLastTimeoutConnessione.get(idPolicy),
- localDbLastTimeoutConnessione.get(idPolicy),
- this.dbLastTimeoutConnessione.get(idPolicy),
- TipoEvento.CONTROLLO_TRAFFICO_CONNECTION_TIMEOUT,
- CodiceEventoControlloTraffico.VIOLAZIONE,
- CodiceEventoControlloTraffico.VIOLAZIONE_RISOLTA,
- lastInterval, connection, this.gestoreEventi,
- idPolicy,debug);
- }
- }
- logDebug(log,debug,"8. Analisi eventi di Timeout durante la connessione (size:"+localInMemoryLastTimeoutConnessione.size()+SUFFIX_TERMINATA);
-
- logInfo(log,debug,"Analisi memoria per generazione eventi terminata 'ConnectionTimeout' "+getSuffixDate(df, newInterval, secondi));
-
- return newInterval; // da usare per il prossimo intervallo
- }
- public void emitProcessConnectionTimeoutSkip(Logger log, boolean debug, int offsetConnectionTimeoutEveryXTimes, int checkConnectionTimeoutEveryXTimes) {
- logDebug(log,debug,"8. Analisi eventi di Timeout durante la connessione non abilitata in questa iterazione (offset: "+offsetConnectionTimeoutEveryXTimes+EVERY+checkConnectionTimeoutEveryXTimes+")");
- }
- public Date processRequestReadTimeout(Logger log, int secondi, Date lastInterval, Connection connection, boolean debug) throws UtilsException{
-
- SimpleDateFormat df = DateUtils.getSimpleDateFormatMs();
-
- logInfo(log,debug,SEPARATOR);
-
- logInfo(log,debug,"Analisi memoria per generazione eventi in corso 'RequestReadTimeout' [interval: "+df.format(lastInterval)+SUFFIX_IN_CORSO_PARENTESI_QUADRE);
-
- // Raccolgo informazioni in memoria per rilasciare il lock
-
- // TH_*
- Map<String, DatiEventoGenerico> localInMemoryLastTimeoutRichiesta = new HashMap<>();
- Date newInterval = null;
- SemaphoreLock slock = lock.acquire("processRequestReadTimeout");
- try {
- if(this.inMemoryLastTimeoutRichiesta!=null && this.inMemoryLastTimeoutRichiesta.size()>0){
- for (Map.Entry<String,DatiEventoGenerico> entry : this.inMemoryLastTimeoutRichiesta.entrySet()) {
- localInMemoryLastTimeoutRichiesta.put(entry.getKey(), entry.getValue().readAndConsume());
- }
- }
- newInterval = DateManager.getDate();
- }finally {
- lock.release(slock, "processRequestReadTimeout");
- }
-
- // Gli eventi db_* sono acceduti solo dal thread non serve un synchronized
-
- // DB_*
- Map<String, DatabaseDatiEventoGenerico> localDbLastTimeoutRichiesta = null;
- localDbLastTimeoutRichiesta = this.dbLastTimeoutRichiesta;
-
- // Procedo ad effettuare l'elaborazione per emettere degli eventi
-
- logDebug(log,debug,"9. Analisi eventi di Timeout durante la ricezione della richiesta (size:"+localInMemoryLastTimeoutRichiesta.size()+SUFFIX_IN_CORSO);
- if(!localInMemoryLastTimeoutRichiesta.isEmpty()) {
- for (Map.Entry<String,DatiEventoGenerico> entry : localInMemoryLastTimeoutRichiesta.entrySet()) {
- String idPolicy = entry.getKey();
- processSingleEvent(log,
- localInMemoryLastTimeoutRichiesta.get(idPolicy),
- localDbLastTimeoutRichiesta.get(idPolicy),
- this.dbLastTimeoutRichiesta.get(idPolicy),
- TipoEvento.CONTROLLO_TRAFFICO_REQUEST_READ_TIMEOUT,
- CodiceEventoControlloTraffico.VIOLAZIONE,
- CodiceEventoControlloTraffico.VIOLAZIONE_RISOLTA,
- lastInterval, connection, this.gestoreEventi,
- idPolicy,debug);
- }
- }
- logDebug(log,debug,"9. Analisi eventi di Timeout durante la ricezione della richiesta (size:"+localInMemoryLastTimeoutRichiesta.size()+SUFFIX_TERMINATA);
-
- logInfo(log,debug,"Analisi memoria per generazione eventi terminata 'RequestReadTimeout' "+getSuffixDate(df, newInterval, secondi));
-
- return newInterval; // da usare per il prossimo intervallo
- }
- public void emitProcessRequestReadTimeoutSkip(Logger log, boolean debug, int offsetRequestReadTimeoutEveryXTimes, int checkRequestReadTimeoutEveryXTimes) {
- logDebug(log,debug,"9. Analisi eventi di Timeout durante la ricezione della richiesta non abilitata in questa iterazione (offset: "+offsetRequestReadTimeoutEveryXTimes+EVERY+checkRequestReadTimeoutEveryXTimes+")");
- }
- public Date processReadTimeout(Logger log, int secondi, Date lastInterval, Connection connection, boolean debug) throws UtilsException{
-
- SimpleDateFormat df = DateUtils.getSimpleDateFormatMs();
-
- logInfo(log,debug,SEPARATOR);
-
- logInfo(log,debug,"Analisi memoria per generazione eventi in corso 'ReadTimeout' [interval: "+df.format(lastInterval)+SUFFIX_IN_CORSO_PARENTESI_QUADRE);
-
- // Raccolgo informazioni in memoria per rilasciare il lock
-
- // TH_*
- Map<String, DatiEventoGenerico> localInMemoryLastTimeoutRisposta = new HashMap<>();
- Date newInterval = null;
- SemaphoreLock slock = lock.acquire("processReadTimeout");
- try {
- if(this.inMemoryLastTimeoutRisposta!=null && this.inMemoryLastTimeoutRisposta.size()>0){
- for (Map.Entry<String,DatiEventoGenerico> entry : this.inMemoryLastTimeoutRisposta.entrySet()) {
- localInMemoryLastTimeoutRisposta.put(entry.getKey(), entry.getValue().readAndConsume());
- }
- }
- newInterval = DateManager.getDate();
- }finally {
- lock.release(slock, "processReadTimeout");
- }
-
- // Gli eventi db_* sono acceduti solo dal thread non serve un synchronized
-
- // DB_*
- Map<String, DatabaseDatiEventoGenerico> localDbLastTimeoutRisposta = null;
- localDbLastTimeoutRisposta = this.dbLastTimeoutRisposta;
-
- // Procedo ad effettuare l'elaborazione per emettere degli eventi
-
- logDebug(log,debug,"10. Analisi eventi di Timeout durante la ricezione della risposta (size:"+localInMemoryLastTimeoutRisposta.size()+SUFFIX_IN_CORSO);
- if(!localInMemoryLastTimeoutRisposta.isEmpty()) {
- for (Map.Entry<String,DatiEventoGenerico> entry : localInMemoryLastTimeoutRisposta.entrySet()) {
- String idPolicy = entry.getKey();
- processSingleEvent(log,
- localInMemoryLastTimeoutRisposta.get(idPolicy),
- localDbLastTimeoutRisposta.get(idPolicy),
- this.dbLastTimeoutRisposta.get(idPolicy),
- TipoEvento.CONTROLLO_TRAFFICO_READ_TIMEOUT,
- CodiceEventoControlloTraffico.VIOLAZIONE,
- CodiceEventoControlloTraffico.VIOLAZIONE_RISOLTA,
- lastInterval, connection, this.gestoreEventi,
- idPolicy,debug);
- }
- }
- logDebug(log,debug,"10. Analisi eventi di Timeout durante la ricezione della risposta (size:"+localInMemoryLastTimeoutRisposta.size()+SUFFIX_TERMINATA);
-
- logInfo(log,debug,"Analisi memoria per generazione eventi terminata 'ReadTimeout' "+getSuffixDate(df, newInterval, secondi));
-
- return newInterval; // da usare per il prossimo intervallo
- }
- public void emitProcessReadTimeoutSkip(Logger log, boolean debug, int offsetReadTimeoutEveryXTimes, int checkReadTimeoutEveryXTimes) {
- logDebug(log,debug,"10. Analisi eventi di Timeout durante la ricezione della risposta non abilitata in questa iterazione (offset: "+offsetReadTimeoutEveryXTimes+EVERY+checkReadTimeoutEveryXTimes+")");
- }
-
-
- private static void processSingleEvent(Logger log, DatiEventoGenerico localInMemory,DatabaseDatiEventoGenerico localDb,
- DatabaseDatiEventoGenerico thisDb,
- TipoEvento tipoEvento,
- CodiceEventoControlloTraffico eventoViolazione, CodiceEventoControlloTraffico eventoViolazioneRisolta,
- Date lastInterval, Connection connection, GestoreEventi gestoreEventi,
- String idPolicy, boolean debug) throws UtilsException {
-
- // Gestione violazione maxThreads
-
- boolean esisteTHultimoIntervallo = false;
- if(localInMemory!=null &&
- localInMemory.data!=null &&
- localInMemory.data.after(lastInterval)){
- esisteTHultimoIntervallo = true;
- }
-
- if(localDb!=null &&
- localDb.data!=null){
- logDebug(log,debug,"\tTH_ultimoIntervallo: "+esisteTHultimoIntervallo+
- " DB_last:"+(localDb!=null)+
- " DB_last.codiceEvento:"+localDb.codiceEvento.name());
- }
- else{
- logDebug(log,debug,"\tTH_ultimoIntervallo: "+esisteTHultimoIntervallo);
- }
-
- if(esisteTHultimoIntervallo){
- if(localDb!=null &&
- localDb.data!=null){
- if(eventoViolazioneRisolta.equals(localDb.codiceEvento)){
- // sono ritornato dentro una violazione di stato
- CodiceEventoControlloTraffico codice = eventoViolazione;
- Evento evento = buildEvento(tipoEvento,codice, idPolicy,
- localInMemory.descrizione,
- localInMemory.configurazione,
- localInMemory.data); // uso come data dell'evento la data in cui e' accaduta la segnalazione
- logEvento(gestoreEventi, connection, evento, log, debug);
- /**synchronized (this.semaphore) { // Gli eventi db_* sono acceduti solo dal thread non serve un synchronized*/
- thisDb.data = evento.getOraRegistrazione();
- thisDb.codiceEvento = codice;
- /**}*/
- if(idPolicy!=null)
- logDebug(log,debug,getProcessSingleEventMessage(tipoEvento, codice, idPolicy));
- else
- logDebug(log,debug,getProcessSingleEventMessage(tipoEvento, codice));
- }
- }
- else{
- // prima volta che succede il problema, emetto evento di violazione
- CodiceEventoControlloTraffico codice = eventoViolazione;
- Evento evento = buildEvento(tipoEvento,codice, idPolicy,
- localInMemory.descrizione,
- localInMemory.configurazione,
- localInMemory.data); // uso come data dell'evento la data in cui e' accaduta la segnalazione
- logEvento(gestoreEventi, connection, evento, log, debug);
- /** synchronized (this.semaphore) { // Gli eventi db_* sono acceduti solo dal thread non serve un synchronized*/
- thisDb.data = evento.getOraRegistrazione();
- thisDb.codiceEvento = codice;
- if(idPolicy!=null)
- logDebug(log,debug,getProcessSingleEventMessage(tipoEvento, codice, idPolicy));
- else
- logDebug(log,debug,getProcessSingleEventMessage(tipoEvento, codice));
- /**}*/
- }
- }
- else{
- if(localDb!=null &&
- localDb.data!=null &&
- eventoViolazione.equals(localDb.codiceEvento)){
- // emetto evento che non risulta piu' violato.
- CodiceEventoControlloTraffico codice = eventoViolazioneRisolta;
- Evento evento = buildEvento(tipoEvento,codice, idPolicy,
- localDb.descrizione,
- localInMemory!=null && localInMemory.configurazione!=null ? localInMemory.configurazione : localDb.configurazione, // importante per far arrivare la configurazione usata nella gestione delle policy
- DateManager.getDate());
- logEvento(gestoreEventi, connection, evento, log, debug);
- /** synchronized (this.semaphore) { // Gli eventi db_* sono acceduti solo dal thread non serve un synchronized*/
- thisDb.data = evento.getOraRegistrazione();
- thisDb.codiceEvento = codice;
- if(idPolicy!=null)
- logDebug(log,debug,getProcessSingleEventMessage(tipoEvento, codice, idPolicy));
- else
- logDebug(log,debug,getProcessSingleEventMessage(tipoEvento, codice));
- /**}*/
- }
- }
- }
-
- private static String getProcessSingleEventMessage(TipoEvento tipoEvento, CodiceEventoControlloTraffico codice, String idPolicy) {
- return "\tEmetto Evento tipo["+tipoEvento+"] codice["+codice+"_"+idPolicy+"]";
- }
- private static String getProcessSingleEventMessage(TipoEvento tipoEvento, CodiceEventoControlloTraffico codice) {
- return "\tEmetto Evento tipo["+tipoEvento+"] codice["+codice+"]";
- }
-
- private static Evento buildEvento(TipoEvento tipoEvento, CodiceEventoControlloTraffico codice, String idPolicy, String descrizione, String configurazione, Date data) throws UtilsException {
- Evento evento = new Evento();
- evento.setTipo(tipoEvento.getValue());
- evento.setCodice(codice.getValue());
- if(idPolicy!=null){
- evento.setIdConfigurazione(idPolicy);
- }
- evento.setDescrizione(descrizione);
- evento.setConfigurazione(configurazione);
- evento.setOraRegistrazione(data);
-
- switch (tipoEvento) {
- case CONTROLLO_TRAFFICO_NUMERO_MASSIMO_RICHIESTE_SIMULTANEE:
- switch (codice) {
- case VIOLAZIONE:
- evento.setSeverita(SeveritaConverter.toIntValue(TipoSeverita.ERROR));
- break;
- case VIOLAZIONE_RISOLTA:
- evento.setSeverita(SeveritaConverter.toIntValue(TipoSeverita.INFO));
- break;
- case VIOLAZIONE_WARNING_ONLY:
- evento.setSeverita(SeveritaConverter.toIntValue(TipoSeverita.WARN));
- break;
- case VIOLAZIONE_RISOLTA_WARNING_ONLY:
- evento.setSeverita(SeveritaConverter.toIntValue(TipoSeverita.INFO));
- break;
- default:
- // altri casi non previsti per CONTROLLO_TRAFFICO_NUMERO_MASSIMO_RICHIESTE_SIMULTANEE
- break;
- }
- break;
- case CONTROLLO_TRAFFICO_SOGLIA_CONGESTIONE:
- switch (codice) {
- case VIOLAZIONE:
- evento.setSeverita(SeveritaConverter.toIntValue(TipoSeverita.WARN));
- break;
- case VIOLAZIONE_RISOLTA:
- evento.setSeverita(SeveritaConverter.toIntValue(TipoSeverita.INFO));
- break;
- default:
- // altri casi non previsti per CONTROLLO_TRAFFICO_NUMERO_MASSIMO_RICHIESTE_SIMULTANEE
- break;
- }
- break;
- case RATE_LIMITING_POLICY_GLOBALE:
- case RATE_LIMITING_POLICY_API:
- switch (codice) {
- case VIOLAZIONE:
- evento.setSeverita(SeveritaConverter.toIntValue(TipoSeverita.ERROR));
- break;
- case VIOLAZIONE_RISOLTA:
- evento.setSeverita(SeveritaConverter.toIntValue(TipoSeverita.INFO));
- break;
- case VIOLAZIONE_WARNING_ONLY:
- evento.setSeverita(SeveritaConverter.toIntValue(TipoSeverita.WARN));
- break;
- case VIOLAZIONE_RISOLTA_WARNING_ONLY:
- evento.setSeverita(SeveritaConverter.toIntValue(TipoSeverita.INFO));
- break;
- }
- break;
- case CONTROLLO_TRAFFICO_CONNECTION_TIMEOUT:
- case CONTROLLO_TRAFFICO_REQUEST_READ_TIMEOUT:
- case CONTROLLO_TRAFFICO_READ_TIMEOUT:
- switch (codice) {
- case VIOLAZIONE:
- evento.setSeverita(SeveritaConverter.toIntValue(TipoSeverita.ERROR));
- break;
- case VIOLAZIONE_RISOLTA:
- evento.setSeverita(SeveritaConverter.toIntValue(TipoSeverita.INFO));
- break;
- default:
- // altri casi non previsti per CONTROLLO_TRAFFICO_READ_TIMEOUT
- break;
- }
- break;
- default:
- // altri casi non previsti per questo notificatore eventi
- break;
- }
-
- evento.setClusterId(OpenSPCoop2Properties.getInstance().getClusterId(false));
- return evento;
- }
-
- private static void logEvento(GestoreEventi gestoreEventi, Connection connection, Evento evento, Logger log, boolean debug) throws UtilsException {
-
- // Fix evento per passarlo al notifier
- String configurazione = evento.getConfigurazione();
- if(PolicyUtilities.isConfigurazioneEventoPerPolicy(configurazione)) {
- evento.setConfigurazione(null); // serve solo per passarlo al notifier
- }
-
- try {
- gestoreEventi.log(evento, connection);
- }catch(Exception e) {
- throw new UtilsException(e.getMessage(),e);
- }
-
- OpenSPCoop2Properties properties = OpenSPCoop2Properties.getInstance();
-
- if(properties.isControlloTrafficoEnabled()) {
-
- ConfigurazioneGatewayControlloTraffico config = properties.getConfigurazioneControlloTraffico();
- if(config.isNotifierEnabled()) {
-
- INotify notifier = config.getNotifier();
- if(notifier.isNotifichePassiveAttive()) {
- TipoEvento tipoEvento = TipoEvento.toEnumConstant(evento.getTipo());
- CodiceEventoControlloTraffico codiceEvento = CodiceEventoControlloTraffico.toEnumConstant(evento.getCodice());
- switch (tipoEvento) {
- case CONTROLLO_TRAFFICO_NUMERO_MASSIMO_RICHIESTE_SIMULTANEE:
- case CONTROLLO_TRAFFICO_SOGLIA_CONGESTIONE:
- notifier.updateStatoRilevamentoCongestione(log, debug, tipoEvento, codiceEvento, evento.getDescrizione());
- break;
- case RATE_LIMITING_POLICY_GLOBALE:
- case RATE_LIMITING_POLICY_API:
- notifier.updateStatoRilevamentoViolazionePolicy(log, debug, tipoEvento, codiceEvento, evento.getIdConfigurazione(), configurazione);
- break;
- case CONTROLLO_TRAFFICO_REQUEST_READ_TIMEOUT:
- notifier.updateStatoRilevamentoRequestReadTimeout(log, debug, tipoEvento, codiceEvento, evento.getIdConfigurazione(), configurazione);
- break;
- case CONTROLLO_TRAFFICO_READ_TIMEOUT:
- notifier.updateStatoRilevamentoReadTimeout(log, debug, tipoEvento, codiceEvento, evento.getIdConfigurazione(), configurazione);
- break;
- default:
- // altri casi non previsti per questo notificatore eventi
- break;
- }
- }
- }
-
- }
-
- }
-
-
- //---- Per salvare
- private static final String ZIP_IN_MEMORY = "memory";
- private static final String ZIP_DB = "db";
- private static final String ZIP_LAST_MAX_REQUESTS = "lastMaxRequests.xml";
- private static final String ZIP_LAST_MAX_REQUESTS_WARNING_ONLY = "lastMaxRequests_warningOnly.xml";
- private static final String ZIP_LAST_PDD_CONGESTIONATA = "lastPddCongestionata.xml";
- private static final String ZIP_POLICY_GLOBALE = "policyGlobale";
- private static final String ZIP_POLICY_GLOBALE_WARNING_ONLY = "policyGlobale_warningOnly";
- private static final String ZIP_POLICY_API = "policyAPI";
- private static final String ZIP_POLICY_API_WARNING_ONLY = "policyAPI_warningOnly";
- private static final String ZIP_EVENTO_TIMEOUT_CONNESSIONE = "connectionTimeout";
- private static final String ZIP_EVENTO_TIMEOUT_RICHIESTA = "requestReadTimeout";
- private static final String ZIP_EVENTO_TIMEOUT_RISPOSTA = "readTimeout";
-
- public void serialize(File file) throws UtilsException{
- try (FileOutputStream out = new FileOutputStream(file, false);){ // se già esiste lo sovrascrive
- this.serialize(out);
- out.flush();
- }
- catch(Exception e) {
- throw new UtilsException(e.getMessage(),e);
- }
- }
-
- @Deprecated
- // Il meccanismo non funzionava, non si riusciva a riottenere uno stato corretto
- public void serialize(OutputStream out) throws UtilsException{
-
- try (ZipOutputStream zipOut = new ZipOutputStream(out);){
-
- String rootPackageDir = "";
- // Il codice dopo fissa il problema di inserire una directory nel package.
- // Commentare la riga sotto per ripristinare il vecchio comportamento.
- rootPackageDir = Costanti.OPENSPCOOP2_ARCHIVE_ROOT_DIR+File.separatorChar;
-
-
- // String inMemory Path
- String inMemoryDir = rootPackageDir + ZIP_IN_MEMORY + File.separatorChar;
-
- if(this.inMemoryLastMaxRequests!=null) {
- zipOut.putNextEntry(new ZipEntry(inMemoryDir+ZIP_LAST_MAX_REQUESTS));
- convertToDatiEventoGenericoSerializabled(this.inMemoryLastMaxRequests, "inMemory_lastMaxRequests").
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- }
-
- if(this.inMemoryLastMaxRequestsWarningOnly!=null) {
- zipOut.putNextEntry(new ZipEntry(inMemoryDir+ZIP_LAST_MAX_REQUESTS_WARNING_ONLY));
- convertToDatiEventoGenericoSerializabled(this.inMemoryLastMaxRequestsWarningOnly, "inMemory_lastMaxRequests_warningOnly").
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- }
-
- if(this.inMemoryLastPddCongestionata!=null) {
- zipOut.putNextEntry(new ZipEntry(inMemoryDir+ZIP_LAST_PDD_CONGESTIONATA));
- convertToDatiEventoGenericoSerializabled(this.inMemoryLastPddCongestionata, "inMemory_lastPddCongestionata").
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- }
-
- if(this.inMemoryLastPolicyGlobaliViolated!=null && this.inMemoryLastPolicyGlobaliViolated.size()>0) {
- int index = 1;
- String inMemoryPolicyDir = inMemoryDir + ZIP_POLICY_GLOBALE + File.separatorChar;
- for (Map.Entry<String,DatiEventoGenerico> entry : this.inMemoryLastPolicyGlobaliViolated.entrySet()) {
- String idPolicy = entry.getKey();
- DatiEventoGenerico evento = this.inMemoryLastPolicyGlobaliViolated.get(idPolicy);
- zipOut.putNextEntry(new ZipEntry(inMemoryPolicyDir+ZIP_POLICY_GLOBALE+"_"+index+".xml"));
- convertToDatiEventoGenericoSerializabled(evento, idPolicy).
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- index++;
- }
- }
-
- if(this.inMemoryLastPolicyGlobaliViolatedWarningOnly!=null && this.inMemoryLastPolicyGlobaliViolatedWarningOnly.size()>0) {
- int index = 1;
- String inMemoryPolicyDir = inMemoryDir + ZIP_POLICY_GLOBALE_WARNING_ONLY + File.separatorChar;
- for (Map.Entry<String,DatiEventoGenerico> entry : this.inMemoryLastPolicyGlobaliViolatedWarningOnly.entrySet()) {
- String idPolicy = entry.getKey();
- DatiEventoGenerico evento = this.inMemoryLastPolicyGlobaliViolatedWarningOnly.get(idPolicy);
- zipOut.putNextEntry(new ZipEntry(inMemoryPolicyDir+ZIP_POLICY_GLOBALE_WARNING_ONLY+"_"+index+".xml"));
- convertToDatiEventoGenericoSerializabled(evento, idPolicy).
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- index++;
- }
- }
-
- if(this.inMemoryLastPolicyAPIViolated!=null && this.inMemoryLastPolicyAPIViolated.size()>0) {
- int index = 1;
- String inMemoryPolicyDir = inMemoryDir + ZIP_POLICY_API + File.separatorChar;
- for (Map.Entry<String,DatiEventoGenerico> entry : this.inMemoryLastPolicyAPIViolated.entrySet()) {
- String idPolicy = entry.getKey();
- DatiEventoGenerico evento = this.inMemoryLastPolicyAPIViolated.get(idPolicy);
- zipOut.putNextEntry(new ZipEntry(inMemoryPolicyDir+ZIP_POLICY_API+"_"+index+".xml"));
- convertToDatiEventoGenericoSerializabled(evento, idPolicy).
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- index++;
- }
- }
-
- if(this.inMemoryLastPolicyAPIViolatedWarningOnly!=null && this.inMemoryLastPolicyAPIViolatedWarningOnly.size()>0) {
- int index = 1;
- String inMemoryPolicyDir = inMemoryDir + ZIP_POLICY_API_WARNING_ONLY + File.separatorChar;
- for (Map.Entry<String,DatiEventoGenerico> entry : this.inMemoryLastPolicyAPIViolatedWarningOnly.entrySet()) {
- String idPolicy = entry.getKey();
- DatiEventoGenerico evento = this.inMemoryLastPolicyAPIViolatedWarningOnly.get(idPolicy);
- zipOut.putNextEntry(new ZipEntry(inMemoryPolicyDir+ZIP_POLICY_API_WARNING_ONLY+"_"+index+".xml"));
- convertToDatiEventoGenericoSerializabled(evento, idPolicy).
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- index++;
- }
- }
-
- if(this.inMemoryLastTimeoutConnessione!=null && this.inMemoryLastTimeoutConnessione.size()>0) {
- int index = 1;
- String inMemoryPolicyDir = inMemoryDir + ZIP_EVENTO_TIMEOUT_CONNESSIONE + File.separatorChar;
- for (Map.Entry<String,DatiEventoGenerico> entry : this.inMemoryLastTimeoutConnessione.entrySet()) {
- String idPolicy = entry.getKey();
- DatiEventoGenerico evento = this.inMemoryLastTimeoutConnessione.get(idPolicy);
- zipOut.putNextEntry(new ZipEntry(inMemoryPolicyDir+ZIP_EVENTO_TIMEOUT_CONNESSIONE+"_"+index+".xml"));
- convertToDatiEventoGenericoSerializabled(evento, idPolicy).
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- index++;
- }
- }
-
- if(this.inMemoryLastTimeoutRichiesta!=null && this.inMemoryLastTimeoutRichiesta.size()>0) {
- int index = 1;
- String inMemoryPolicyDir = inMemoryDir + ZIP_EVENTO_TIMEOUT_RICHIESTA + File.separatorChar;
- for (Map.Entry<String,DatiEventoGenerico> entry : this.inMemoryLastTimeoutRichiesta.entrySet()) {
- String idPolicy = entry.getKey();
- DatiEventoGenerico evento = this.inMemoryLastTimeoutRichiesta.get(idPolicy);
- zipOut.putNextEntry(new ZipEntry(inMemoryPolicyDir+ZIP_EVENTO_TIMEOUT_RICHIESTA+"_"+index+".xml"));
- convertToDatiEventoGenericoSerializabled(evento, idPolicy).
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- index++;
- }
- }
-
- if(this.inMemoryLastTimeoutRisposta!=null && this.inMemoryLastTimeoutRisposta.size()>0) {
- int index = 1;
- String inMemoryPolicyDir = inMemoryDir + ZIP_EVENTO_TIMEOUT_RISPOSTA + File.separatorChar;
- for (Map.Entry<String,DatiEventoGenerico> entry : this.inMemoryLastTimeoutRisposta.entrySet()) {
- String idPolicy = entry.getKey();
- DatiEventoGenerico evento = this.inMemoryLastTimeoutRisposta.get(idPolicy);
- zipOut.putNextEntry(new ZipEntry(inMemoryPolicyDir+ZIP_EVENTO_TIMEOUT_RISPOSTA+"_"+index+".xml"));
- convertToDatiEventoGenericoSerializabled(evento, idPolicy).
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- index++;
- }
- }
-
-
- // String db Path
- String dbDir = rootPackageDir + ZIP_DB + File.separatorChar;
-
- if(this.dbLastMaxRequests!=null) {
- zipOut.putNextEntry(new ZipEntry(dbDir+ZIP_LAST_MAX_REQUESTS));
- convertDBToDatiEventoGenericoSerializabled(this.dbLastMaxRequests, "db_lastMaxRequests").
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- }
-
- if(this.dbLastMaxRequestsWarningOnly!=null) {
- zipOut.putNextEntry(new ZipEntry(dbDir+ZIP_LAST_MAX_REQUESTS_WARNING_ONLY));
- convertDBToDatiEventoGenericoSerializabled(this.dbLastMaxRequestsWarningOnly, "db_lastMaxRequests_warningOnly").
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- }
-
- if(this.dbLastPddCongestionata!=null) {
- zipOut.putNextEntry(new ZipEntry(dbDir+ZIP_LAST_PDD_CONGESTIONATA));
- convertDBToDatiEventoGenericoSerializabled(this.dbLastPddCongestionata, "db_lastPddCongestionata").
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- }
-
- if(this.dbLastPolicyGlobaliViolated!=null && this.dbLastPolicyGlobaliViolated.size()>0) {
- int index = 1;
- String dbPolicyDir = dbDir + ZIP_POLICY_GLOBALE + File.separatorChar;
- for (Map.Entry<String,DatabaseDatiEventoGenerico> entry : this.dbLastPolicyGlobaliViolated.entrySet()) {
- String idPolicy = entry.getKey();
- DatabaseDatiEventoGenerico evento = this.dbLastPolicyGlobaliViolated.get(idPolicy);
- zipOut.putNextEntry(new ZipEntry(dbPolicyDir+ZIP_POLICY_GLOBALE+"_"+index+".xml"));
- convertDBToDatiEventoGenericoSerializabled(evento, idPolicy).
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- index++;
- }
- }
-
- if(this.dbLastPolicyGlobaliViolatedWarningOnly!=null && this.dbLastPolicyGlobaliViolatedWarningOnly.size()>0) {
- int index = 1;
- String dbPolicyDir = dbDir + ZIP_POLICY_GLOBALE_WARNING_ONLY + File.separatorChar;
- for (Map.Entry<String,DatabaseDatiEventoGenerico> entry : this.dbLastPolicyGlobaliViolatedWarningOnly.entrySet()) {
- String idPolicy = entry.getKey();
- DatabaseDatiEventoGenerico evento = this.dbLastPolicyGlobaliViolatedWarningOnly.get(idPolicy);
- zipOut.putNextEntry(new ZipEntry(dbPolicyDir+ZIP_POLICY_GLOBALE_WARNING_ONLY+"_"+index+".xml"));
- convertDBToDatiEventoGenericoSerializabled(evento, idPolicy).
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- index++;
- }
- }
-
- if(this.dbLastPolicyAPIViolated!=null && this.dbLastPolicyAPIViolated.size()>0) {
- int index = 1;
- String dbPolicyDir = dbDir + ZIP_POLICY_API + File.separatorChar;
- for (Map.Entry<String,DatabaseDatiEventoGenerico> entry : this.dbLastPolicyAPIViolated.entrySet()) {
- String idPolicy = entry.getKey();
- DatabaseDatiEventoGenerico evento = this.dbLastPolicyAPIViolated.get(idPolicy);
- zipOut.putNextEntry(new ZipEntry(dbPolicyDir+ZIP_POLICY_API+"_"+index+".xml"));
- convertDBToDatiEventoGenericoSerializabled(evento, idPolicy).
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- index++;
- }
- }
-
- if(this.dbLastPolicyAPIViolatedWarningOnly!=null && this.dbLastPolicyAPIViolatedWarningOnly.size()>0) {
- int index = 1;
- String dbPolicyDir = dbDir + ZIP_POLICY_API_WARNING_ONLY + File.separatorChar;
- for (Map.Entry<String,DatabaseDatiEventoGenerico> entry : this.dbLastPolicyAPIViolatedWarningOnly.entrySet()) {
- String idPolicy = entry.getKey();
- DatabaseDatiEventoGenerico evento = this.dbLastPolicyAPIViolatedWarningOnly.get(idPolicy);
- zipOut.putNextEntry(new ZipEntry(dbPolicyDir+ZIP_POLICY_API_WARNING_ONLY+"_"+index+".xml"));
- convertDBToDatiEventoGenericoSerializabled(evento, idPolicy).
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- index++;
- }
- }
-
- if(this.dbLastTimeoutConnessione!=null && this.dbLastTimeoutConnessione.size()>0) {
- int index = 1;
- String dbPolicyDir = dbDir + ZIP_EVENTO_TIMEOUT_CONNESSIONE + File.separatorChar;
- for (Map.Entry<String,DatabaseDatiEventoGenerico> entry : this.dbLastTimeoutConnessione.entrySet()) {
- String idPolicy = entry.getKey();
- DatabaseDatiEventoGenerico evento = this.dbLastTimeoutConnessione.get(idPolicy);
- zipOut.putNextEntry(new ZipEntry(dbPolicyDir+ZIP_EVENTO_TIMEOUT_CONNESSIONE+"_"+index+".xml"));
- convertDBToDatiEventoGenericoSerializabled(evento, idPolicy).
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- index++;
- }
- }
-
- if(this.dbLastTimeoutRichiesta!=null && this.dbLastTimeoutRichiesta.size()>0) {
- int index = 1;
- String dbPolicyDir = dbDir + ZIP_EVENTO_TIMEOUT_RICHIESTA + File.separatorChar;
- for (Map.Entry<String,DatabaseDatiEventoGenerico> entry : this.dbLastTimeoutRichiesta.entrySet()) {
- String idPolicy = entry.getKey();
- DatabaseDatiEventoGenerico evento = this.dbLastTimeoutRichiesta.get(idPolicy);
- zipOut.putNextEntry(new ZipEntry(dbPolicyDir+ZIP_EVENTO_TIMEOUT_RICHIESTA+"_"+index+".xml"));
- convertDBToDatiEventoGenericoSerializabled(evento, idPolicy).
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- index++;
- }
- }
-
- if(this.dbLastTimeoutRisposta!=null && this.dbLastTimeoutRisposta.size()>0) {
- int index = 1;
- String dbPolicyDir = dbDir + ZIP_EVENTO_TIMEOUT_RISPOSTA + File.separatorChar;
- for (Map.Entry<String,DatabaseDatiEventoGenerico> entry : this.dbLastTimeoutRisposta.entrySet()) {
- String idPolicy = entry.getKey();
- DatabaseDatiEventoGenerico evento = this.dbLastTimeoutRisposta.get(idPolicy);
- zipOut.putNextEntry(new ZipEntry(dbPolicyDir+ZIP_EVENTO_TIMEOUT_RISPOSTA+"_"+index+".xml"));
- convertDBToDatiEventoGenericoSerializabled(evento, idPolicy).
- writeTo(zipOut, WriteToSerializerType.XML_JAXB);
- index++;
- }
- }
-
-
- zipOut.flush();
- }catch(Exception e){
- throw new UtilsException(e.getMessage(),e);
- }
- }
-
- private org.openspcoop2.core.eventi.DatiEventoGenerico convertToDatiEventoGenericoSerializabled(DatiEventoGenerico eventoGenerico, String id){
- org.openspcoop2.core.eventi.DatiEventoGenerico e = new org.openspcoop2.core.eventi.DatiEventoGenerico();
- e.setIdEvento(id);
- e.setData(eventoGenerico.data);
- e.setDatiConsumatiThread(eventoGenerico.datiConsumatiThread);
- e.setDescrizione(eventoGenerico.descrizione);
- return e;
- }
- private org.openspcoop2.core.eventi.DatiEventoGenerico convertDBToDatiEventoGenericoSerializabled(DatabaseDatiEventoGenerico eventoGenerico, String id){
- org.openspcoop2.core.eventi.DatiEventoGenerico e = this.convertToDatiEventoGenericoSerializabled(eventoGenerico, id);
- if(eventoGenerico.codiceEvento!=null) {
- e.setCodiceEvento(eventoGenerico.codiceEvento.getValue());
- }
- return e;
- }
-
-
- @Deprecated
- /** Il meccanismo non funzionava, non si riusciva a riottenere uno stato corretto */
- public void initialize(InputStream in) throws UtilsException{
-
- if(in==null){
- return;
- }
-
- File f = null;
- String entryName = null;
- try {
- // Leggo InputStream
- byte [] bytesIn = Utilities.getAsByteArray(in);
- in.close();
- in = null;
- if(bytesIn==null || bytesIn.length<=0){
- return;
- }
- f = FileSystemUtilities.createTempFile("controlloTraffico", ".tmp");
- FileSystemUtilities.writeFile(f, bytesIn);
- }catch(Exception e){
- try {
- if(f!=null) {
- java.nio.file.Files.delete(f.toPath());
- }
- }catch(Exception eClose) {
- // ignore
- }
- try{
- if(in!=null)
- in.close();
- }catch(Exception eClose){
- // close
- }
- throw new UtilsException("["+entryName+"] "+e.getMessage(),e);
- }
-
- try (ZipFile zipFile = new ZipFile(f);){
- // Leggo Struttura ZIP
- String rootPackageDir = Costanti.OPENSPCOOP2_ARCHIVE_ROOT_DIR+File.separatorChar;
-
- String rootDir = null;
-
- org.openspcoop2.core.eventi.utils.serializer.JaxbDeserializer deserializer = new org.openspcoop2.core.eventi.utils.serializer.JaxbDeserializer();
-
- Iterator<ZipEntry> it = ZipUtilities.entries(zipFile, true);
- while (it.hasNext()) {
- ZipEntry zipEntry = it.next();
- entryName = ZipUtilities.operativeSystemConversion(zipEntry.getName());
-
- /**System.out.println("FILE NAME: "+entryName);
- System.out.println("SIZE: "+zipEntry.getSize());*/
- // Il codice dopo fissa il problema di inserire una directory nel package.
- // Commentare la riga sotto per ripristinare il vecchio comportamento.
- if(rootDir==null){
- // Calcolo ROOT DIR
- rootDir=ZipUtilities.getRootDir(entryName);
- }
-
- if(!zipEntry.isDirectory()) {
- FileDataSource fds = new FileDataSource(entryName);
- String nome = fds.getName();
- String tipo = nome.substring(nome.lastIndexOf(".")+1,nome.length());
- tipo = tipo.toUpperCase();
- /**System.out.println("VERIFICARE NAME["+nome+"] TIPO["+tipo+"]");*/
-
- try (InputStream inputStream = zipFile.getInputStream(zipEntry);){
-
- byte[]content = Utilities.getAsByteArray(inputStream);
-
- boolean inMemory = false;
- String prefix = null;
- if(entryName.startsWith((rootPackageDir+ZIP_IN_MEMORY)) ){
- inMemory = true;
- prefix = rootPackageDir+ZIP_IN_MEMORY+File.separatorChar;
- }
- else if(entryName.startsWith((rootPackageDir+ZIP_DB)) ){
- inMemory = false;
- prefix = rootPackageDir+ZIP_DB+File.separatorChar;
- }
- else {
- throw new UtilsException("Entry ["+entryName+"] sconosciuta (Tipologia)");
- }
-
- if(entryName.equals((prefix+ZIP_LAST_MAX_REQUESTS)) ){
- org.openspcoop2.core.eventi.DatiEventoGenerico eventoGenericoSerialized =
- deserializer.readDatiEventoGenerico(content);
- if(inMemory) {
- this.inMemoryLastMaxRequests = convertToDatiEventoGenerico(eventoGenericoSerialized);
- }
- else {
- this.dbLastMaxRequests = convertDBToDatiEventoGenerico(eventoGenericoSerialized);
- }
- }
-
- else if(entryName.equals((prefix+ZIP_LAST_MAX_REQUESTS_WARNING_ONLY)) ){
- org.openspcoop2.core.eventi.DatiEventoGenerico eventoGenericoSerialized =
- deserializer.readDatiEventoGenerico(content);
- if(inMemory) {
- this.inMemoryLastMaxRequestsWarningOnly = convertToDatiEventoGenerico(eventoGenericoSerialized);
- }
- else {
- this.dbLastMaxRequestsWarningOnly = convertDBToDatiEventoGenerico(eventoGenericoSerialized);
- }
- }
-
- else if(entryName.equals((prefix+ZIP_LAST_PDD_CONGESTIONATA)) ){
- org.openspcoop2.core.eventi.DatiEventoGenerico eventoGenericoSerialized =
- deserializer.readDatiEventoGenerico(content);
- if(inMemory) {
- this.inMemoryLastPddCongestionata = convertToDatiEventoGenerico(eventoGenericoSerialized);
- }
- else {
- this.dbLastPddCongestionata = convertDBToDatiEventoGenerico(eventoGenericoSerialized);
- }
- }
-
- else if(entryName.startsWith((prefix+ZIP_POLICY_GLOBALE)) ){
- org.openspcoop2.core.eventi.DatiEventoGenerico eventoGenericoSerialized =
- deserializer.readDatiEventoGenerico(content);
- if(inMemory) {
- this.inMemoryLastPolicyGlobaliViolated.put(eventoGenericoSerialized.getIdEvento(), convertToDatiEventoGenerico(eventoGenericoSerialized));
- }
- else {
- this.dbLastPolicyGlobaliViolated.put(eventoGenericoSerialized.getIdEvento(), convertDBToDatiEventoGenerico(eventoGenericoSerialized));
- }
- }
-
- else if(entryName.startsWith((prefix+ZIP_POLICY_GLOBALE_WARNING_ONLY)) ){
- org.openspcoop2.core.eventi.DatiEventoGenerico eventoGenericoSerialized =
- deserializer.readDatiEventoGenerico(content);
- if(inMemory) {
- this.inMemoryLastPolicyGlobaliViolatedWarningOnly.put(eventoGenericoSerialized.getIdEvento(), convertToDatiEventoGenerico(eventoGenericoSerialized));
- }
- else {
- this.dbLastPolicyGlobaliViolatedWarningOnly.put(eventoGenericoSerialized.getIdEvento(), convertDBToDatiEventoGenerico(eventoGenericoSerialized));
- }
- }
-
- else if(entryName.startsWith((prefix+ZIP_POLICY_API)) ){
- org.openspcoop2.core.eventi.DatiEventoGenerico eventoGenericoSerialized =
- deserializer.readDatiEventoGenerico(content);
- if(inMemory) {
- this.inMemoryLastPolicyAPIViolated.put(eventoGenericoSerialized.getIdEvento(), convertToDatiEventoGenerico(eventoGenericoSerialized));
- }
- else {
- this.dbLastPolicyAPIViolated.put(eventoGenericoSerialized.getIdEvento(), convertDBToDatiEventoGenerico(eventoGenericoSerialized));
- }
- }
-
- else if(entryName.startsWith((prefix+ZIP_POLICY_API_WARNING_ONLY)) ){
- org.openspcoop2.core.eventi.DatiEventoGenerico eventoGenericoSerialized =
- deserializer.readDatiEventoGenerico(content);
- if(inMemory) {
- this.inMemoryLastPolicyAPIViolatedWarningOnly.put(eventoGenericoSerialized.getIdEvento(), convertToDatiEventoGenerico(eventoGenericoSerialized));
- }
- else {
- this.dbLastPolicyAPIViolatedWarningOnly.put(eventoGenericoSerialized.getIdEvento(), convertDBToDatiEventoGenerico(eventoGenericoSerialized));
- }
- }
-
- else if(entryName.startsWith((prefix+ZIP_EVENTO_TIMEOUT_CONNESSIONE)) ){
- org.openspcoop2.core.eventi.DatiEventoGenerico eventoGenericoSerialized =
- deserializer.readDatiEventoGenerico(content);
- if(inMemory) {
- this.inMemoryLastTimeoutConnessione.put(eventoGenericoSerialized.getIdEvento(), convertToDatiEventoGenerico(eventoGenericoSerialized));
- }
- else {
- this.dbLastTimeoutConnessione.put(eventoGenericoSerialized.getIdEvento(), convertDBToDatiEventoGenerico(eventoGenericoSerialized));
- }
- }
-
- else if(entryName.startsWith((prefix+ZIP_EVENTO_TIMEOUT_RICHIESTA)) ){
- org.openspcoop2.core.eventi.DatiEventoGenerico eventoGenericoSerialized =
- deserializer.readDatiEventoGenerico(content);
- if(inMemory) {
- this.inMemoryLastTimeoutRichiesta.put(eventoGenericoSerialized.getIdEvento(), convertToDatiEventoGenerico(eventoGenericoSerialized));
- }
- else {
- this.dbLastTimeoutRichiesta.put(eventoGenericoSerialized.getIdEvento(), convertDBToDatiEventoGenerico(eventoGenericoSerialized));
- }
- }
-
- else if(entryName.startsWith((prefix+ZIP_EVENTO_TIMEOUT_RISPOSTA)) ){
- org.openspcoop2.core.eventi.DatiEventoGenerico eventoGenericoSerialized =
- deserializer.readDatiEventoGenerico(content);
- if(inMemory) {
- this.inMemoryLastTimeoutRisposta.put(eventoGenericoSerialized.getIdEvento(), convertToDatiEventoGenerico(eventoGenericoSerialized));
- }
- else {
- this.dbLastTimeoutRisposta.put(eventoGenericoSerialized.getIdEvento(), convertDBToDatiEventoGenerico(eventoGenericoSerialized));
- }
- }
-
- else{
- throw new UtilsException("Entry ["+entryName+"] sconosciuta");
- }
-
- }
- }
-
- }
-
- }catch(Exception e){
- throw new UtilsException("["+entryName+"] "+e.getMessage(),e);
- }
- finally{
- try {
- if(f!=null) {
- java.nio.file.Files.delete(f.toPath());
- }
- }catch(Exception eClose) {
- // ignore
- }
- try{
- if(in!=null)
- in.close();
- }catch(Exception eClose){
- // close
- }
- }
-
- }
-
- private DatiEventoGenerico convertToDatiEventoGenerico(org.openspcoop2.core.eventi.DatiEventoGenerico eventoGenericoSerialized){
- DatiEventoGenerico e = new DatiEventoGenerico();
- e.data = eventoGenericoSerialized.getData();
- e.datiConsumatiThread = eventoGenericoSerialized.isDatiConsumatiThread();
- e.descrizione = eventoGenericoSerialized.getDescrizione();
- return e;
- }
- private DatabaseDatiEventoGenerico convertDBToDatiEventoGenerico(org.openspcoop2.core.eventi.DatiEventoGenerico eventoGenericoSerialized){
- DatabaseDatiEventoGenerico e = new DatabaseDatiEventoGenerico();
- e.data = eventoGenericoSerialized.getData();
- e.datiConsumatiThread = eventoGenericoSerialized.isDatiConsumatiThread();
- e.descrizione = eventoGenericoSerialized.getDescrizione();
- if(eventoGenericoSerialized.getCodiceEvento()!=null) {
- e.codiceEvento = CodiceEventoControlloTraffico.toEnumConstant(eventoGenericoSerialized.getCodiceEvento());
- }
- return e;
- }
- }
- class DatiEventoGenerico{
-
- Date data;
- String descrizione;
- String configurazione;
- boolean datiConsumatiThread = true;
-
- public DatiEventoGenerico readAndConsume(){
- DatiEventoGenerico d = new DatiEventoGenerico();
- if(this.data!=null)
- d.data = new Date(this.data.getTime());
- if(this.descrizione!=null)
- d.descrizione = this.descrizione + "";
- if(this.configurazione!=null)
- d.configurazione = this.configurazione + "";
- d.datiConsumatiThread = this.datiConsumatiThread;
-
- this.datiConsumatiThread = true;
-
- return d;
- }
- }
- class DatabaseDatiEventoGenerico extends DatiEventoGenerico{
-
- CodiceEventoControlloTraffico codiceEvento;
-
- }