TimerMonitoraggioRisorseThread.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.pdd.timers;
import java.io.ByteArrayOutputStream;
import java.util.List;
import org.openspcoop2.core.commons.CoreException;
import org.openspcoop2.core.eventi.Evento;
import org.openspcoop2.core.eventi.constants.CodiceEventoStatoGateway;
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.ClassNameProperties;
import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
import org.openspcoop2.pdd.config.DBManager;
import org.openspcoop2.pdd.config.DBTransazioniManager;
import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
import org.openspcoop2.pdd.config.QueueManager;
import org.openspcoop2.pdd.core.CostantiPdD;
import org.openspcoop2.pdd.core.FileSystemSerializer;
import org.openspcoop2.pdd.core.eventi.GestoreEventi;
import org.openspcoop2.pdd.logger.MsgDiagnosticiProperties;
import org.openspcoop2.pdd.logger.MsgDiagnostico;
import org.openspcoop2.pdd.logger.OpenSPCoop2Logger;
import org.openspcoop2.pdd.services.OpenSPCoop2Startup;
import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
import org.openspcoop2.protocol.manifest.constants.ServiceBinding;
import org.openspcoop2.protocol.registry.RegistroServiziManager;
import org.openspcoop2.protocol.sdk.diagnostica.IDiagnosticProducer;
import org.openspcoop2.protocol.sdk.tracciamento.ITracciaProducer;
import org.openspcoop2.utils.Utilities;
import org.openspcoop2.utils.beans.WriteToSerializerType;
import org.openspcoop2.utils.date.DateManager;
import org.openspcoop2.utils.threads.BaseThread;
import org.slf4j.Logger;
/**
* Thread per la gestione del monitoraggio delle risorse
*
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class TimerMonitoraggioRisorseThread extends BaseThread{
private static TimerState state = TimerState.OFF; // abilitato in OpenSPCoop2Startup al momento dell'avvio
public static TimerState getSTATE() {
return state;
}
public static void setSTATE(TimerState sTATE) {
state = sTATE;
}
/** Indicazione di risorse correttamente disponibili */
private static boolean risorseDisponibili = true;
private static void setRisorseDisponibili(boolean risorseDisponibili) {
TimerMonitoraggioRisorseThread.risorseDisponibili = risorseDisponibili;
}
public static boolean isRisorseDisponibili() {
return risorseDisponibili;
}
/** Motivo dell'errore */
private static Exception risorsaNonDisponibileEccezione = null;
public static Exception getRisorsaNonDisponibile() {
return risorsaNonDisponibileEccezione;
}
private static void setRisorsaNonDisponibile(Exception risorsaNonDisponibile) {
TimerMonitoraggioRisorseThread.risorsaNonDisponibileEccezione = risorsaNonDisponibile;
TimerMonitoraggioRisorseThread.risorseDisponibili = false;
}
/** Variabile che indica il Nome del modulo dell'architettura di OpenSPCoop rappresentato da questa classe */
public static final String ID_MODULO = "MonitoraggioRisorse";
/** Properties Reader */
private OpenSPCoop2Properties propertiesReader;
/** MessaggioDiagnostico */
private MsgDiagnostico msgDiag;
/** LastImage */
private boolean lastCheck = true;
/** Logger per debug */
private Logger logger = null;
private void logDebug(String msg) {
if(this.logger!=null) {
this.logger.debug(msg);
}
}
private void logWarn(String msg) {
if(this.logger!=null) {
this.logger.warn(msg);
}
}
/** Risorsa: DB di OpenSPCoop */
private DBManager dbManager=null;
/** Risorsa: JMS di OpenSPCoop */
private QueueManager queueManager=null;
/** Risorsa: Configurazione di OpenSPCoop */
private ConfigurazionePdDManager configPdDReader=null;
/** Risorsa: Registri dei Servizi di OpenSPCoop */
private RegistroServiziManager registriPdDReader=null;
/** Risorsa: Tracciamenti Personalizzati */
private List<ITracciaProducer> tracciamentiPersonalizzati=null;
private List<String> tipiTracciamentiPersonalizzati=null;
/** Risorsa: Transazioni di OpenSPCoop */
private DBTransazioniManager dbTransazioniManager=null;
/** Risorsa: MsgDiagnostici Personalizzati */
private List<IDiagnosticProducer> msgDiagnosticiPersonalizzati=null;
private List<String> tipiMsgDiagnosticiPersonalizzati=null;
private GestoreEventi gestoreEventi;
/** Costruttore
* @throws Exception */
public TimerMonitoraggioRisorseThread() throws Exception {
this.propertiesReader = OpenSPCoop2Properties.getInstance();
this.msgDiag = MsgDiagnostico.newInstance(TimerMonitoraggioRisorseThread.ID_MODULO);
this.msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TIMER_MONITORAGGIO_RISORSE);
this.msgDiag.addKeyword(CostantiPdD.KEY_TIMER_MONITORAGGIO_RISORSE, TimerMonitoraggioRisorseThread.ID_MODULO);
this.logger = OpenSPCoop2Logger.getLoggerOpenSPCoopResources();
if(this.propertiesReader.isAbilitatoControlloRisorseDB()){
this.dbManager = DBManager.getInstance();
}
if(this.propertiesReader.isAbilitatoControlloRisorseJMS()){
this.queueManager = QueueManager.getInstance();
}
if(this.propertiesReader.isAbilitatoControlloRisorseConfigurazione() || this.propertiesReader.isAbilitatoControlloValidazioneSemanticaConfigurazione()){
this.configPdDReader = ConfigurazionePdDManager.getInstance();
}
if(this.propertiesReader.isAbilitatoControlloRisorseRegistriServizi() || this.propertiesReader.isAbilitatoControlloValidazioneSemanticaRegistriServizi()){
this.registriPdDReader = RegistroServiziManager.getInstance();
}
if(this.propertiesReader.isAbilitatoControlloRisorseTracciamentiPersonalizzati()){
this.tracciamentiPersonalizzati = OpenSPCoop2Logger.getLoggerTracciamentoOpenSPCoopAppender();
this.tipiTracciamentiPersonalizzati = OpenSPCoop2Logger.getTipoTracciamentoOpenSPCoopAppender();
if(!this.propertiesReader.isTransazioniUsePddRuntimeDatasource()) {
this.dbTransazioniManager = DBTransazioniManager.getInstance();
}
}
if(this.propertiesReader.isAbilitatoControlloRisorseMsgDiagnosticiPersonalizzati()){
this.msgDiagnosticiPersonalizzati = OpenSPCoop2Logger.getLoggerMsgDiagnosticoOpenSPCoopAppender();
this.tipiMsgDiagnosticiPersonalizzati = OpenSPCoop2Logger.getTipoMsgDiagnosticoOpenSPCoopAppender();
}
if(this.propertiesReader.isControlloRisorseRegistrazioneEvento()) {
this.gestoreEventi = GestoreEventi.getInstance();
}
}
@Override
public void process(){
// nop: ho ridefinito il metodo run
}
@Override
public void run(){
try {
String sec = "secondi";
if(this.propertiesReader.getControlloRisorseCheckInterval() == 1)
sec = "secondo";
this.msgDiag.addKeyword(CostantiPdD.KEY_TIMEOUT, this.propertiesReader.getControlloRisorseCheckInterval()+" "+sec);
this.msgDiag.logPersonalizzato("avvioEffettuato");
String risorsaNonDisponibile = null;
while(!this.isStop()){
boolean checkRisorseDisponibili = true;
// Controllo che il sistema non sia andando in shutdown
if(OpenSPCoop2Startup.contextDestroyed){
this.logger.error("["+TimerMonitoraggioRisorseThread.ID_MODULO+"] Rilevato sistema in shutdown");
return;
}
if(TimerState.ENABLED.equals(state)) {
String descrizione = null;
// Messaggi diagnostici personalizzati
// Controllo per prima per sapere se posso usare poi i msg diagnostici per segnalare problemi
if(checkRisorseDisponibili && this.propertiesReader.isAbilitatoControlloRisorseMsgDiagnosticiPersonalizzati()){
String tipoMsgDiagnostico = null;
try{
for(int i=0; i< this.tipiMsgDiagnosticiPersonalizzati.size(); i++){
tipoMsgDiagnostico = this.tipiMsgDiagnosticiPersonalizzati.get(i);
this.logDebug("Controllo MsgDiagnosticoPersonalizzato ["+tipoMsgDiagnostico+"] (iterazioni:"+this.propertiesReader.getNumeroIterazioniFalliteControlloRisorseMsgDiagnosticiPersonalizzati()+" checkInterval:"+this.propertiesReader.getIterazioniFalliteCheckIntervalControlloRisorseMsgDiagnosticiPersonalizzati()+")");
Throwable t = null;
for (int j = 0; j < this.propertiesReader.getNumeroIterazioniFalliteControlloRisorseMsgDiagnosticiPersonalizzati(); j++) {
try {
this.logDebug("MsgDiagnosticoPersonalizzato ["+tipoMsgDiagnostico+"] check '"+j+"' ...");
this.msgDiagnosticiPersonalizzati.get(i).isAlive();
this.logDebug("MsgDiagnosticoPersonalizzato ["+tipoMsgDiagnostico+"] check '"+j+"' ok");
t=null;
break;
}catch(Throwable tAlive) { // Volutamente Throwable
this.logDebug("MsgDiagnosticoPersonalizzato ["+tipoMsgDiagnostico+"] check '"+j+"' failed: "+tAlive.getMessage());
t = tAlive;
// faccio un altro tentativo
Utilities.sleep(this.propertiesReader.getIterazioniFalliteCheckIntervalControlloRisorseMsgDiagnosticiPersonalizzati());
}
}
if(t!=null) {
throw t;
}
}
}catch(Throwable e){ // Volutamente Throwable
risorsaNonDisponibile = "[MessaggioDiagnosticoAppender "+tipoMsgDiagnostico+"]";
TimerMonitoraggioRisorseThread.setRisorsaNonDisponibile(new CoreException(risorsaNonDisponibile+" "+e.getMessage(),e));
this.logger.error(risorsaNonDisponibile+" "+e.getMessage(),e);
descrizione = risorsaNonDisponibile+" "+e.getMessage();
checkRisorseDisponibili = false;
}
}
// Database
if(checkRisorseDisponibili && this.propertiesReader.isAbilitatoControlloRisorseDB()){
try{
this.logDebug("Controllo Database (iterazioni:"+this.propertiesReader.getNumeroIterazioniFalliteControlloRisorseDB()+" checkInterval:"+this.propertiesReader.getIterazioniFalliteCheckIntervalControlloRisorseDB()+")");
Throwable t = null;
for (int j = 0; j < this.propertiesReader.getNumeroIterazioniFalliteControlloRisorseDB(); j++) {
try {
this.logDebug("Database check '"+j+"' ...");
this.dbManager.isAlive();
this.logDebug("Database check '"+j+"' ok");
t=null;
break;
}catch(Throwable tAlive) { // Volutamente Throwable
this.logDebug("Database check '"+j+"' failed: "+tAlive.getMessage());
t = tAlive;
// faccio un altro tentativo
Utilities.sleep(this.propertiesReader.getIterazioniFalliteCheckIntervalControlloRisorseDB());
}
}
if(t!=null) {
throw t;
}
}catch(Throwable e){ // Volutamente Throwable
risorsaNonDisponibile = "[Database]";
TimerMonitoraggioRisorseThread.setRisorsaNonDisponibile(new CoreException(risorsaNonDisponibile+" "+e.getMessage(),e));
this.logger.error(risorsaNonDisponibile+" "+e.getMessage(),e);
descrizione = risorsaNonDisponibile+" "+e.getMessage();
checkRisorseDisponibili = false;
}
}
// JMS
if(this.propertiesReader.isServerJ2EE()){
if(checkRisorseDisponibili && this.propertiesReader.isAbilitatoControlloRisorseJMS()){
try{
this.logDebug("Controllo BrokerJMS (iterazioni:"+this.propertiesReader.getNumeroIterazioniFalliteControlloRisorseJMS()+" checkInterval:"+this.propertiesReader.getIterazioniFalliteCheckIntervalControlloRisorseJMS()+")");
Throwable t = null;
for (int j = 0; j < this.propertiesReader.getNumeroIterazioniFalliteControlloRisorseJMS(); j++) {
try {
this.logDebug("BrokerJMS check '"+j+"' ...");
this.queueManager.isAlive();
this.logDebug("BrokerJMS check '"+j+"' ok");
t=null;
break;
}catch(Throwable tAlive) {
this.logDebug("BrokerJMS check '"+j+"' failed: "+tAlive.getMessage());
t = tAlive;
// faccio un altro tentativo
Utilities.sleep(this.propertiesReader.getIterazioniFalliteCheckIntervalControlloRisorseJMS());
}
}
if(t!=null) {
throw t;
}
}catch(Throwable e){ // Volutamente Throwable
risorsaNonDisponibile = "[Broker JMS]";
TimerMonitoraggioRisorseThread.setRisorsaNonDisponibile(new CoreException(risorsaNonDisponibile+" "+e.getMessage(),e));
this.logger.error(risorsaNonDisponibile+" "+e.getMessage(),e);
descrizione = risorsaNonDisponibile+" "+e.getMessage();
checkRisorseDisponibili = false;
}
}
}
// Configurazione
if(checkRisorseDisponibili && this.propertiesReader.isAbilitatoControlloRisorseConfigurazione()){
try{
this.logDebug("Controllo Configurazione (iterazioni:"+this.propertiesReader.getNumeroIterazioniFalliteControlloRisorseConfigurazione()+" checkInterval:"+this.propertiesReader.getIterazioniFalliteCheckIntervalControlloRisorseConfigurazione()+")");
Throwable t = null;
for (int j = 0; j < this.propertiesReader.getNumeroIterazioniFalliteControlloRisorseConfigurazione(); j++) {
try {
this.logDebug("Configurazione check '"+j+"' ...");
this.configPdDReader.isAlive();
this.logDebug("Configurazione check '"+j+"' ok");
t=null;
break;
}catch(Throwable tAlive) {
this.logDebug("Configurazione check '"+j+"' failed: "+tAlive.getMessage());
t = tAlive;
// faccio un altro tentativo
Utilities.sleep(this.propertiesReader.getIterazioniFalliteCheckIntervalControlloRisorseConfigurazione());
}
}
if(t!=null) {
throw t;
}
}catch(Throwable e){ // Volutamente Throwable
risorsaNonDisponibile = "[Configurazione]";
TimerMonitoraggioRisorseThread.setRisorsaNonDisponibile(new CoreException(risorsaNonDisponibile+" "+e.getMessage(),e));
this.logger.error(risorsaNonDisponibile+" "+e.getMessage(),e);
descrizione = risorsaNonDisponibile+" "+e.getMessage();
checkRisorseDisponibili = false;
}
}
// Configurazione, validazione semantica
if(checkRisorseDisponibili && this.propertiesReader.isAbilitatoControlloValidazioneSemanticaConfigurazione()){
try{
this.logDebug("Controllo Validazione semantica della Configurazione");
ClassNameProperties classNameReader = ClassNameProperties.getInstance();
this.configPdDReader.validazioneSemantica(classNameReader.getConnettore(),
classNameReader.getMsgDiagnosticoOpenSPCoopAppender(),
classNameReader.getTracciamentoOpenSPCoopAppender(),
classNameReader.getDumpOpenSPCoopAppender(),
classNameReader.getAutenticazionePortaDelegata(), classNameReader.getAutenticazionePortaApplicativa(),
classNameReader.getAutorizzazionePortaDelegata(),classNameReader.getAutorizzazionePortaApplicativa(),
classNameReader.getAutorizzazioneContenutoPortaDelegata(),classNameReader.getAutorizzazioneContenutoPortaApplicativa(),
classNameReader.getIntegrazionePortaDelegata(),
classNameReader.getIntegrazionePortaApplicativa(),
true,
true,
true, null);
}catch(Throwable e){ // Volutamente Throwable
risorsaNonDisponibile = "[Validazione semantica della Configurazione]";
TimerMonitoraggioRisorseThread.setRisorsaNonDisponibile(new CoreException(risorsaNonDisponibile+" "+e.getMessage(),e));
this.logger.error(risorsaNonDisponibile+" "+e.getMessage(),e);
descrizione = risorsaNonDisponibile+" "+e.getMessage();
checkRisorseDisponibili = false;
}
}
// Registro dei Servizi
if(checkRisorseDisponibili && this.propertiesReader.isAbilitatoControlloRisorseRegistriServizi()){
try{
this.logDebug("Controllo Registri dei Servizi (iterazioni:"+this.propertiesReader.getNumeroIterazioniFalliteControlloRisorseRegistriServizi()+" checkInterval:"+this.propertiesReader.getIterazioniFalliteCheckIntervalControlloRisorseRegistriServizi()+")");
Throwable t = null;
for (int j = 0; j < this.propertiesReader.getNumeroIterazioniFalliteControlloRisorseRegistriServizi(); j++) {
try {
this.logDebug("Registri dei Servizi check '"+j+"' ...");
this.registriPdDReader.isAlive(this.propertiesReader.isControlloRisorseRegistriRaggiungibilitaTotale());
this.logDebug("Registri dei Servizi check '"+j+"' ok");
t=null;
break;
}catch(Throwable tAlive) { // Volutamente Throwable
this.logDebug("Registri dei Servizi check '"+j+"' failed: "+tAlive.getMessage());
t = tAlive;
// faccio un altro tentativo
Utilities.sleep(this.propertiesReader.getIterazioniFalliteCheckIntervalControlloRisorseRegistriServizi());
}
}
if(t!=null) {
throw t;
}
}catch(Throwable e){ // Volutamente Throwable
risorsaNonDisponibile = "[Registri dei Servizi]";
TimerMonitoraggioRisorseThread.setRisorsaNonDisponibile(new CoreException(risorsaNonDisponibile+" "+e.getMessage(),e));
this.logger.error(risorsaNonDisponibile+" "+e.getMessage(),e);
descrizione = risorsaNonDisponibile+" "+e.getMessage();
checkRisorseDisponibili = false;
}
}
// Registro dei Servizi, validazione semantica
if(checkRisorseDisponibili && this.propertiesReader.isAbilitatoControlloValidazioneSemanticaRegistriServizi()){
try{
ProtocolFactoryManager pFactoryManager = ProtocolFactoryManager.getInstance();
this.logDebug("Controllo Validazione semantica del Registri dei Servizi");
this.registriPdDReader.validazioneSemantica(this.propertiesReader.isControlloRisorseRegistriRaggiungibilitaTotale(),
this.propertiesReader.isValidazioneSemanticaRegistroServiziCheckURI(),
pFactoryManager.getOrganizationTypesAsArray(),
pFactoryManager.getServiceTypesAsArray(ServiceBinding.SOAP),
pFactoryManager.getServiceTypesAsArray(ServiceBinding.REST),
ClassNameProperties.getInstance().getConnettore(),
true,
true,
null);
}catch(Throwable e){ // Volutamente Throwable
risorsaNonDisponibile = "[Validazione semantica del Registri dei Servizi]";
TimerMonitoraggioRisorseThread.setRisorsaNonDisponibile(new CoreException(risorsaNonDisponibile+" "+e.getMessage(),e));
this.logger.error(risorsaNonDisponibile+" "+e.getMessage(),e);
descrizione = risorsaNonDisponibile+" "+e.getMessage();
checkRisorseDisponibili = false;
}
}
// Tracciamenti personalizzati
if(checkRisorseDisponibili && this.propertiesReader.isAbilitatoControlloRisorseTracciamentiPersonalizzati()){
String tipoTracciamento = null;
try{
for(int i=0; i< this.tipiTracciamentiPersonalizzati.size(); i++){
tipoTracciamento = this.tipiTracciamentiPersonalizzati.get(i);
this.logDebug("Controllo TracciamentoPersonalizzato ["+tipoTracciamento+"] (iterazioni:"+this.propertiesReader.getNumeroIterazioniFalliteControlloRisorseTracciamentiPersonalizzati()+" checkInterval:"+this.propertiesReader.getIterazioniFalliteCheckIntervalControlloRisorseTracciamentiPersonalizzati()+")");
Throwable t = null;
for (int j = 0; j < this.propertiesReader.getNumeroIterazioniFalliteControlloRisorseTracciamentiPersonalizzati(); j++) {
try {
this.logDebug("TracciamentoPersonalizzato ["+tipoTracciamento+"] check '"+j+"' ...");
this.tracciamentiPersonalizzati.get(i).isAlive();
this.logDebug("TracciamentoPersonalizzato ["+tipoTracciamento+"] check '"+j+"' ok");
t=null;
break;
}catch(Throwable tAlive) { // Volutamente Throwable
this.logDebug("TracciamentoPersonalizzato ["+tipoTracciamento+"] check '"+j+"' failed: "+tAlive.getMessage());
t = tAlive;
// faccio un altro tentativo
Utilities.sleep(this.propertiesReader.getIterazioniFalliteCheckIntervalControlloRisorseTracciamentiPersonalizzati());
}
}
if(t!=null) {
throw t;
}
}
}catch(Throwable e){ // Volutamente Throwable
risorsaNonDisponibile = "[TracciamentoAppender "+tipoTracciamento+"]";
TimerMonitoraggioRisorseThread.setRisorsaNonDisponibile(new CoreException(risorsaNonDisponibile+" "+e.getMessage(),e));
this.logger.error(risorsaNonDisponibile+" "+e.getMessage(),e);
descrizione = risorsaNonDisponibile+" "+e.getMessage();
checkRisorseDisponibili = false;
}
// nel tracciamento considero anche le transazioni
if(checkRisorseDisponibili && this.propertiesReader.isTransazioniUsePddRuntimeDatasource()==false) {
try{
this.logDebug("Controllo Database Transazioni (iterazioni:"+this.propertiesReader.getNumeroIterazioniFalliteControlloRisorseTracciamentiPersonalizzati()+" checkInterval:"+this.propertiesReader.getIterazioniFalliteCheckIntervalControlloRisorseTracciamentiPersonalizzati()+")");
Throwable t = null;
for (int j = 0; j < this.propertiesReader.getNumeroIterazioniFalliteControlloRisorseTracciamentiPersonalizzati(); j++) {
try {
this.logDebug("Database Transazioni check '"+j+"' ...");
this.dbTransazioniManager.isAlive();
this.logDebug("Database Transazioni check '"+j+"' ok");
t=null;
break;
}catch(Throwable tAlive) { // Volutamente Throwable
this.logDebug("Database Transazioni check '"+j+"' failed: "+tAlive.getMessage());
t = tAlive;
// faccio un altro tentativo
Utilities.sleep(this.propertiesReader.getIterazioniFalliteCheckIntervalControlloRisorseTracciamentiPersonalizzati());
}
}
if(t!=null) {
throw t;
}
}catch(Throwable e){ // Volutamente Throwable
risorsaNonDisponibile = "[DatabaseTransazioni]";
TimerMonitoraggioRisorseThread.setRisorsaNonDisponibile(new CoreException(risorsaNonDisponibile+" "+e.getMessage(),e));
this.logger.error(risorsaNonDisponibile+" "+e.getMessage(),e);
descrizione = risorsaNonDisponibile+" "+e.getMessage();
checkRisorseDisponibili = false;
}
}
}
// avvisi
if(risorsaNonDisponibile!=null)
this.msgDiag.addKeyword(CostantiPdD.KEY_RISORSA_NON_DISPONIBILE, risorsaNonDisponibile);
if(!checkRisorseDisponibili && this.lastCheck){
if(risorsaNonDisponibile!=null && (risorsaNonDisponibile.startsWith("[MessaggioDiagnosticoAppender")==false) ){
if(risorsaNonDisponibile.startsWith("[Validazione semantica")){
this.msgDiag.logPersonalizzato("validazioneSemanticaFallita");
}else{
this.msgDiag.logPersonalizzato("risorsaNonDisponibile");
}
}
else
this.logWarn("Il Monitoraggio delle risorse ha rilevato che la risorsa "+risorsaNonDisponibile+" non e' raggiungibile, tutti i servizi/moduli della porta di dominio sono momentanemanete sospesi.");
registraEvento(false, descrizione);
}else if(checkRisorseDisponibili && !this.lastCheck){
this.msgDiag.logPersonalizzato("risorsaRitornataDisponibile");
risorsaNonDisponibile = null;
registraEvento(true, this.msgDiag.getMessaggio_replaceKeywords("risorsaRitornataDisponibile"));
}
this.lastCheck = checkRisorseDisponibili;
TimerMonitoraggioRisorseThread.setRisorseDisponibili(checkRisorseDisponibili);
}
else {
this.logger.info("Timer "+ID_MODULO+" disabilitato");
}
// CheckInterval
this.sleepForNextCheck((int) this.propertiesReader.getControlloRisorseCheckInterval(), 1000);
}
}finally {
this.finished();
}
}
private void registraEvento(boolean risorseDisponibili, String descrizione) {
String clusterID = this.propertiesReader.getClusterId(false);
Logger log = OpenSPCoop2Logger.getLoggerOpenSPCoopResources();
Evento evento = null;
try{
if(this.gestoreEventi!=null &&
this.propertiesReader.isControlloRisorseRegistrazioneEvento()){
evento = new Evento();
evento.setTipo(TipoEvento.STATO_GATEWAY.getValue());
evento.setCodice(risorseDisponibili ? CodiceEventoStatoGateway.RISORSE_SISTEMA_DISPONIBILI.getValue() : CodiceEventoStatoGateway.RISORSE_SISTEMA_NON_DISPONIBILI.getValue());
evento.setSeverita(risorseDisponibili ? SeveritaConverter.toIntValue(TipoSeverita.INFO) : SeveritaConverter.toIntValue(TipoSeverita.ERROR));
evento.setClusterId(clusterID);
evento.setDescrizione(descrizione);
this.gestoreEventi.log(evento,true);
}
}catch(Throwable e){ // Volutamente Throwable
// L'errore puo' avvenire poiche' lo shutdown puo' anche disattivare il datasource
log.debug("Errore durante la registrazione dell'evento (risorse disponibili:"+descrizione+" '"+descrizione+"'): "+e.getMessage(),e);
if(evento!=null){
try{
if(evento.getOraRegistrazione()==null){
evento.setOraRegistrazione(DateManager.getDate());
}
ByteArrayOutputStream bout = new ByteArrayOutputStream();
evento.writeTo(bout, WriteToSerializerType.XML_JAXB);
bout.flush();
bout.close();
FileSystemSerializer.getInstance().registraEvento(bout.toByteArray(), evento.getOraRegistrazione());
}catch(Exception eSerializer){
log.error("Errore durante la registrazione su file system dell'evento: "+eSerializer.getMessage(),eSerializer);
}
}
}
}
}