ConfigurazioneTracciamento.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.logger.transazioni;
import java.io.File;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.openspcoop2.core.commons.CoreException;
import org.openspcoop2.core.config.ConfigurazioneTracciamentoPorta;
import org.openspcoop2.core.config.PortaApplicativa;
import org.openspcoop2.core.config.PortaDelegata;
import org.openspcoop2.core.config.PortaTracciamento;
import org.openspcoop2.core.config.Tracciamento;
import org.openspcoop2.core.config.TracciamentoConfigurazioneFiletrace;
import org.openspcoop2.core.config.TracciamentoConfigurazioneFiletraceConnector;
import org.openspcoop2.core.config.Transazioni;
import org.openspcoop2.core.config.constants.StatoFunzionalita;
import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
import org.openspcoop2.core.config.utils.TracciamentoCompatibilitaFiltroEsiti;
import org.openspcoop2.core.constants.TipoPdD;
import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
import org.openspcoop2.protocol.sdk.ProtocolException;
import org.openspcoop2.protocol.utils.EsitiConfigUtils;
import org.slf4j.Logger;
/**
* ConfigurazioneTracciamento
*
* @author Andrea Poli (apoli@link.it)
* @author Giuliano Pintori (pintori@link.it)
* @author $Author$
* @version $Rev$, $Date$
*
*/
public class ConfigurazioneTracciamento {
private Logger log;
private TracciamentoCompatibilitaFiltroEsiti regole;
private boolean dbEnabled = false;
private TracciamentoConfigurazioneFiletrace configurazioneFileTrace;
private boolean fileTraceEnabled = false;
private File fileTraceConfig = null;
private boolean fileTraceConfigGlobal = true;
private TracciamentoConfigurazioneFiletraceConnector fileTraceConfigDumpIn;
private TracciamentoConfigurazioneFiletraceConnector fileTraceConfigDumpOut;
private String esitiConfig;
private List<String> esitiDaRegistrare;
private Transazioni informazioniSalvareTransazioni;
public Transazioni getInformazioniSalvareTransazioni() {
return this.informazioniSalvareTransazioni;
}
private OpenSPCoop2Properties op2Properties;
private ConfigurazionePdDManager configPdDManager;
private boolean isConfig=false;
private boolean isPD=false;
private PortaDelegata pd;
private boolean isPA=false;
private PortaApplicativa pa;
public ConfigurazioneTracciamento(Logger log, ConfigurazionePdDManager configPdDManager, PortaDelegata pd) throws DriverConfigurazioneException, CoreException {
this.pd = pd;
this.isPD = true;
this.init(
log, configPdDManager,
(pd!=null ? pd.getTracciamento() : null));
}
public ConfigurazioneTracciamento(Logger log, ConfigurazionePdDManager configPdDManager, PortaApplicativa pa) throws DriverConfigurazioneException, CoreException {
this.pa = pa;
this.isPA = true;
this.init(
log, configPdDManager,
(pa!=null ? pa.getTracciamento() : null));
}
public ConfigurazioneTracciamento(Logger log, ConfigurazionePdDManager configPdDManager, TipoPdD tipoPdD) throws DriverConfigurazioneException, CoreException {
this.isConfig = true;
if(tipoPdD==null) {
throw new CoreException("TipoPdD non indicato");
}
switch (tipoPdD) {
case DELEGATA:
this.isPD = true;
break;
case APPLICATIVA:
this.isPA = true;
break;
default:
break;
}
this.init(
log, configPdDManager,
null);
}
private void init(Logger log, ConfigurazionePdDManager configPdDManager, PortaTracciamento porta) throws DriverConfigurazioneException, CoreException {
this.log = log;
this.configPdDManager = configPdDManager;
this.op2Properties = OpenSPCoop2Properties.getInstance();
Tracciamento configTracciamento = this.configPdDManager.getOpenSPCoopAppenderTracciamento();
ConfigurazioneTracciamentoPorta config = null;
if(this.isPA) {
config = configTracciamento.getPortaApplicativa();
}
if(this.isPD) {
config = configTracciamento.getPortaDelegata();
}
if(porta!=null && StatoFunzionalita.ABILITATO.equals(porta.getStato())) {
// ridefinito
this.regole = new TracciamentoCompatibilitaFiltroEsiti(porta.getDatabase(), porta.getFiletrace());
this.configurazioneFileTrace = porta.getFiletraceConfig();
this.esitiConfig = porta.getEsiti();
this.informazioniSalvareTransazioni = porta.getTransazioni();
}
else {
this.regole = new TracciamentoCompatibilitaFiltroEsiti(config!=null ? config.getDatabase() : null,
config!=null ? config.getFiletrace() : null);
if(config!=null) {
this.configurazioneFileTrace = config.getFiletraceConfig();
this.esitiConfig = config.getEsiti();
this.informazioniSalvareTransazioni = config.getTransazioni();
}
}
this.initDB();
this.initFileTrace();
}
public TracciamentoCompatibilitaFiltroEsiti getRegole() {
return this.regole;
}
private void initDB() {
this.dbEnabled = this.regole.isTracciamentoDBEnabled();
}
public boolean isDbEnabled() {
return this.dbEnabled;
}
private void initFileTrace() throws DriverConfigurazioneException, CoreException {
if(this.regole.isTracciamentoFileTraceEnabled()) {
if(this.regole.isTracciamentoFileTraceEnabledByExternalProperties()){
this.initFileTraceExternalConfig();
}
else {
this.fileTraceEnabled = true;
initFileTraceInternalConfig();
initFileTraceInternalDumpConfig();
}
}
else {
initFileTraceExternalConfig();
if(!this.fileTraceEnabled) {
this.fileTraceEnabled = false;
this.fileTraceConfig = null;
this.fileTraceConfigDumpIn = null;
this.fileTraceConfigDumpOut = null;
}
}
}
private void initFileTraceExternalConfig() throws DriverConfigurazioneException, CoreException {
this.fileTraceEnabled = this.op2Properties.isTransazioniFileTraceEnabled();
if(this.fileTraceEnabled) {
this.fileTraceConfig = this.op2Properties.getTransazioniFileTraceConfig();
}
if(!this.isConfig) {
initFileTraceExternalConfigPorta();
}
}
private boolean initFileTraceByExternalPropertyPort = false;
public boolean isInitFileTraceByExternalPropertyPort() {
return this.initFileTraceByExternalPropertyPort;
}
private void initFileTraceExternalConfigPorta() throws DriverConfigurazioneException, CoreException {
if(this.isPA && this.pa!=null) {
this.fileTraceEnabled = this.configPdDManager.isTransazioniFileTraceEnabled(this.pa);
if(this.fileTraceEnabled) {
this.initFileTraceByExternalPropertyPort = true;
initFileTraceExternalConfigPortaApplicativa();
}
else {
this.fileTraceConfig = null;
}
}
else if(this.isPD && this.pd!=null) {
this.fileTraceEnabled = this.configPdDManager.isTransazioniFileTraceEnabled(this.pd);
if(this.fileTraceEnabled) {
this.initFileTraceByExternalPropertyPort = true;
initFileTraceExternalConfigPortaDelegata();
}
else {
this.fileTraceConfig = null;
}
}
}
private void initFileTraceExternalConfigPortaApplicativa() throws DriverConfigurazioneException, CoreException {
this.fileTraceConfig = this.configPdDManager.getFileTraceConfig(this.pa);
this.fileTraceConfigGlobal = this.op2Properties.isTransazioniFileTraceEnabled() &&
this.op2Properties.getTransazioniFileTraceConfig().getAbsolutePath().equals(this.fileTraceConfig.getAbsolutePath());
initFileTraceConfigPortaApplicativaDefaultDumpIn();
initFileTraceConfigPortaApplicativaDefaultDumpOut();
}
private void initFileTraceExternalConfigPortaDelegata() throws DriverConfigurazioneException, CoreException {
this.fileTraceConfig = this.configPdDManager.getFileTraceConfig(this.pd);
this.fileTraceConfigGlobal = this.op2Properties.isTransazioniFileTraceEnabled() &&
this.op2Properties.getTransazioniFileTraceConfig().getAbsolutePath().equals(this.fileTraceConfig.getAbsolutePath());
initFileTraceConfigPortaDelegataDefaultDumpIn();
initFileTraceConfigPortaDelegataDefaultDumpOut();
}
private void initFileTraceInternalConfig() throws DriverConfigurazioneException, CoreException {
if(this.configurazioneFileTrace!=null && this.configurazioneFileTrace.getConfig()!=null && StringUtils.isNotEmpty(this.configurazioneFileTrace.getConfig())) {
this.fileTraceConfig = ConfigurazioneTracciamento.toFileTraceConfig(this.configurazioneFileTrace.getConfig(), this.op2Properties.getRootDirectory(),true);
this.fileTraceConfigGlobal = this.op2Properties.isTransazioniFileTraceEnabled() &&
this.op2Properties.getTransazioniFileTraceConfig().getAbsolutePath().equals(this.fileTraceConfig.getAbsolutePath());
}
else {
// utilizzo la configurazione di default
this.fileTraceConfig = this.op2Properties.getTransazioniFileTraceConfig();
if(!this.isConfig) {
if(this.isPA && this.pa!=null) {
this.fileTraceConfig = this.configPdDManager.getFileTraceConfig(this.pa);
this.fileTraceConfigGlobal = this.op2Properties.isTransazioniFileTraceEnabled() &&
this.op2Properties.getTransazioniFileTraceConfig().getAbsolutePath().equals(this.fileTraceConfig.getAbsolutePath());
}
else if(this.isPD && this.pd!=null) {
this.fileTraceConfig = this.configPdDManager.getFileTraceConfig(this.pd);
this.fileTraceConfigGlobal = this.op2Properties.isTransazioniFileTraceEnabled() &&
this.op2Properties.getTransazioniFileTraceConfig().getAbsolutePath().equals(this.fileTraceConfig.getAbsolutePath());
}
}
}
}
private void initFileTraceInternalDumpConfig() throws DriverConfigurazioneException {
if(this.configurazioneFileTrace!=null && this.configurazioneFileTrace.getDumpIn()!=null) {
this.fileTraceConfigDumpIn = this.configurazioneFileTrace.getDumpIn();
this.fileTraceConfigDumpOut = this.configurazioneFileTrace.getDumpOut();
}
else {
if(this.isConfig) {
// utilizzo la configurazione di default
if(this.isPA && this.pa!=null) {
initFileTraceConfigPortaApplicativaDefaultDumpIn();
initFileTraceConfigPortaApplicativaDefaultDumpOut();
}
else if(this.isPD && this.pd!=null) {
initFileTraceConfigPortaDelegataDefaultDumpIn();
initFileTraceConfigPortaDelegataDefaultDumpOut();
}
}
else {
initFileTraceInternalDumpConfigPorte();
}
}
}
private void initFileTraceInternalDumpConfigPorte() throws DriverConfigurazioneException {
if(this.isPA && this.pa!=null) {
if(this.pa.getTracciamento()!=null && this.pa.getTracciamento().getFiletraceConfig()!=null) {
this.fileTraceConfigDumpIn = this.pa.getTracciamento().getFiletraceConfig().getDumpIn();
this.fileTraceConfigDumpOut = this.pa.getTracciamento().getFiletraceConfig().getDumpOut();
}
else {
initFileTraceConfigPortaApplicativaDefaultDumpIn();
initFileTraceConfigPortaApplicativaDefaultDumpOut();
}
}
else if(this.isPD && this.pd!=null) {
if(this.pd.getTracciamento()!=null && this.pd.getTracciamento().getFiletraceConfig()!=null) {
this.fileTraceConfigDumpIn = this.pd.getTracciamento().getFiletraceConfig().getDumpIn();
this.fileTraceConfigDumpOut = this.pd.getTracciamento().getFiletraceConfig().getDumpOut();
}
else {
initFileTraceConfigPortaDelegataDefaultDumpIn();
initFileTraceConfigPortaDelegataDefaultDumpOut();
}
}
}
private void initFileTraceConfigPortaApplicativaDefaultDumpIn() throws DriverConfigurazioneException {
boolean fileTraceHeaders = this.configPdDManager.isTransazioniFileTraceDumpBinarioHeadersEnabled(this.pa);
boolean fileTracePayload = this.configPdDManager.isTransazioniFileTraceDumpBinarioPayloadEnabled(this.pa);
this.fileTraceConfigDumpIn = new TracciamentoConfigurazioneFiletraceConnector();
this.fileTraceConfigDumpIn.setStato((fileTraceHeaders || fileTracePayload) ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
this.fileTraceConfigDumpIn.setHeader(fileTraceHeaders ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
this.fileTraceConfigDumpIn.setPayload(fileTracePayload ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
}
private void initFileTraceConfigPortaApplicativaDefaultDumpOut() throws DriverConfigurazioneException {
boolean fileTraceHeaders = this.configPdDManager.isTransazioniFileTraceDumpBinarioConnettoreHeadersEnabled(this.pa);
boolean fileTracePayload = this.configPdDManager.isTransazioniFileTraceDumpBinarioConnettorePayloadEnabled(this.pa);
this.fileTraceConfigDumpOut = new TracciamentoConfigurazioneFiletraceConnector();
this.fileTraceConfigDumpOut.setStato((fileTraceHeaders || fileTracePayload) ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
this.fileTraceConfigDumpOut.setHeader(fileTraceHeaders ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
this.fileTraceConfigDumpOut.setPayload(fileTracePayload ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
}
private void initFileTraceConfigPortaDelegataDefaultDumpIn() throws DriverConfigurazioneException {
boolean fileTraceHeaders = this.configPdDManager.isTransazioniFileTraceDumpBinarioHeadersEnabled(this.pd);
boolean fileTracePayload = this.configPdDManager.isTransazioniFileTraceDumpBinarioPayloadEnabled(this.pd);
this.fileTraceConfigDumpIn = new TracciamentoConfigurazioneFiletraceConnector();
this.fileTraceConfigDumpIn.setStato((fileTraceHeaders || fileTracePayload) ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
this.fileTraceConfigDumpIn.setHeader(fileTraceHeaders ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
this.fileTraceConfigDumpIn.setPayload(fileTracePayload ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
}
private void initFileTraceConfigPortaDelegataDefaultDumpOut() throws DriverConfigurazioneException {
boolean fileTraceHeaders = this.configPdDManager.isTransazioniFileTraceDumpBinarioConnettoreHeadersEnabled(this.pd);
boolean fileTracePayload = this.configPdDManager.isTransazioniFileTraceDumpBinarioConnettorePayloadEnabled(this.pd);
this.fileTraceConfigDumpOut = new TracciamentoConfigurazioneFiletraceConnector();
this.fileTraceConfigDumpOut.setStato((fileTraceHeaders || fileTracePayload) ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
this.fileTraceConfigDumpOut.setHeader(fileTraceHeaders ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
this.fileTraceConfigDumpOut.setPayload(fileTracePayload ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
}
public boolean isFileTraceEnabled() {
return this.fileTraceEnabled;
}
public File getFileTraceConfig() {
return this.fileTraceConfig;
}
public boolean isFileTraceConfigGlobal() {
return this.fileTraceConfigGlobal;
}
public TracciamentoConfigurazioneFiletraceConnector getFileTraceConfigDumpIn() {
return this.fileTraceConfigDumpIn;
}
public TracciamentoConfigurazioneFiletraceConnector getFileTraceConfigDumpOut() {
return this.fileTraceConfigDumpOut;
}
public boolean isTransazioniFileTraceDumpBinarioPayloadEnabled(){
return this.fileTraceConfigDumpIn!=null && StatoFunzionalita.ABILITATO.equals(this.fileTraceConfigDumpIn.getStato()) &&
StatoFunzionalita.ABILITATO.equals(this.fileTraceConfigDumpIn.getPayload());
}
public boolean isTransazioniFileTraceDumpBinarioHeaderEnabled(){
return this.fileTraceConfigDumpIn!=null && StatoFunzionalita.ABILITATO.equals(this.fileTraceConfigDumpIn.getStato()) &&
StatoFunzionalita.ABILITATO.equals(this.fileTraceConfigDumpIn.getHeader());
}
public boolean isTransazioniFileTraceDumpBinarioConnettorePayloadEnabled(){
return this.fileTraceConfigDumpOut!=null && StatoFunzionalita.ABILITATO.equals(this.fileTraceConfigDumpOut.getStato()) &&
StatoFunzionalita.ABILITATO.equals(this.fileTraceConfigDumpOut.getPayload());
}
public boolean isTransazioniFileTraceDumpBinarioConnettoreHeaderEnabled(){
return this.fileTraceConfigDumpOut!=null && StatoFunzionalita.ABILITATO.equals(this.fileTraceConfigDumpOut.getStato()) &&
StatoFunzionalita.ABILITATO.equals(this.fileTraceConfigDumpOut.getHeader());
}
public static File toFileTraceConfig(String name, String rootDir, boolean check) throws CoreException {
File getTransazioniFileTraceConfig = new File(name);
if(!getTransazioniFileTraceConfig.exists() &&
rootDir!=null && !"".equals(rootDir)) {
getTransazioniFileTraceConfig = new File(rootDir, name);
}
if(check) {
if(!getTransazioniFileTraceConfig.exists()) {
throw ConfigurazioneTracciamentoUtils.newCoreExceptionNotExists(getTransazioniFileTraceConfig, false);
}
if(getTransazioniFileTraceConfig.isDirectory()) {
throw ConfigurazioneTracciamentoUtils.newCoreExceptionNotFile(getTransazioniFileTraceConfig, false);
}
if(!getTransazioniFileTraceConfig.canRead()) {
throw ConfigurazioneTracciamentoUtils.newCoreExceptionCannotRead(getTransazioniFileTraceConfig, false);
}
}
return getTransazioniFileTraceConfig;
}
public List<String> getEsitiDaRegistrare(StringBuilder bf) throws ProtocolException{
if(this.regole.isFilterEnabled()) {
if(this.esitiDaRegistrare==null) {
this.esitiDaRegistrare = EsitiConfigUtils.getRegistrazioneEsiti(this.esitiConfig, this.log, bf);
}
}
else {
this.esitiDaRegistrare = null;
}
return this.esitiDaRegistrare;
}
public String getTipoFiltroEsiti() {
StringBuilder sb = new StringBuilder();
if(this.regole.isFilterDBEnabled()) {
sb.append("db");
}
if(this.regole.isFilterFileTraceEnabled()) {
if(sb.length()>0) {
sb.append(",");
}
sb.append("db");
}
return sb.toString();
}
public boolean isFiltroEsitiDB() {
return this.regole.isFilterDBEnabled();
}
public boolean isFiltroEsitiFileTrace() {
return this.regole.isFilterFileTraceEnabled();
}
}