ConfigurazioneTracciamento.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */

  20. package org.openspcoop2.pdd.logger.transazioni;

  21. import java.io.File;
  22. import java.util.List;

  23. import org.apache.commons.lang.StringUtils;
  24. import org.openspcoop2.core.commons.CoreException;
  25. import org.openspcoop2.core.config.ConfigurazioneTracciamentoPorta;
  26. import org.openspcoop2.core.config.PortaApplicativa;
  27. import org.openspcoop2.core.config.PortaDelegata;
  28. import org.openspcoop2.core.config.PortaTracciamento;
  29. import org.openspcoop2.core.config.Tracciamento;
  30. import org.openspcoop2.core.config.TracciamentoConfigurazioneFiletrace;
  31. import org.openspcoop2.core.config.TracciamentoConfigurazioneFiletraceConnector;
  32. import org.openspcoop2.core.config.Transazioni;
  33. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  34. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  35. import org.openspcoop2.core.config.utils.TracciamentoCompatibilitaFiltroEsiti;
  36. import org.openspcoop2.core.constants.TipoPdD;
  37. import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
  38. import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
  39. import org.openspcoop2.protocol.sdk.ProtocolException;
  40. import org.openspcoop2.protocol.utils.EsitiConfigUtils;
  41. import org.slf4j.Logger;

  42. /**
  43.  * ConfigurazioneTracciamento
  44.  *
  45.  * @author Andrea Poli (apoli@link.it)
  46.  * @author Giuliano Pintori (pintori@link.it)
  47.  * @author $Author$
  48.  * @version $Rev$, $Date$
  49.  *
  50.  */
  51. public class ConfigurazioneTracciamento {

  52.     private Logger log;
  53.    
  54.     private TracciamentoCompatibilitaFiltroEsiti regole;

  55.     private boolean dbEnabled = false;
  56.        
  57.     private TracciamentoConfigurazioneFiletrace configurazioneFileTrace;
  58.     private boolean fileTraceEnabled = false;
  59.     private File fileTraceConfig = null;
  60.     private boolean fileTraceConfigGlobal = true;
  61.     private TracciamentoConfigurazioneFiletraceConnector fileTraceConfigDumpIn;
  62.     private TracciamentoConfigurazioneFiletraceConnector fileTraceConfigDumpOut;
  63.    
  64.     private String esitiConfig;
  65.     private List<String> esitiDaRegistrare;
  66.    
  67.     private Transazioni informazioniSalvareTransazioni;
  68.     public Transazioni getInformazioniSalvareTransazioni() {
  69.         return this.informazioniSalvareTransazioni;
  70.     }
  71.    
  72.     private OpenSPCoop2Properties op2Properties;
  73.    
  74.     private ConfigurazionePdDManager configPdDManager;
  75.     private boolean isConfig=false;
  76.     private boolean isPD=false;
  77.     private PortaDelegata pd;
  78.     private boolean isPA=false;
  79.     private PortaApplicativa pa;
  80.    
  81.     public ConfigurazioneTracciamento(Logger log, ConfigurazionePdDManager configPdDManager, PortaDelegata pd) throws DriverConfigurazioneException, CoreException {
  82.         this.pd = pd;
  83.         this.isPD = true;
  84.         this.init(
  85.                 log, configPdDManager,
  86.                 (pd!=null ? pd.getTracciamento() : null));
  87.     }
  88.     public ConfigurazioneTracciamento(Logger log, ConfigurazionePdDManager configPdDManager, PortaApplicativa pa) throws DriverConfigurazioneException, CoreException {
  89.         this.pa = pa;
  90.         this.isPA = true;
  91.         this.init(
  92.                 log, configPdDManager,
  93.                 (pa!=null ? pa.getTracciamento() : null));
  94.     }
  95.     public ConfigurazioneTracciamento(Logger log, ConfigurazionePdDManager configPdDManager, TipoPdD tipoPdD) throws DriverConfigurazioneException, CoreException {
  96.         this.isConfig = true;
  97.         if(tipoPdD==null) {
  98.             throw new CoreException("TipoPdD non indicato");
  99.         }
  100.         switch (tipoPdD) {
  101.         case DELEGATA:
  102.             this.isPD = true;
  103.             break;
  104.         case APPLICATIVA:
  105.             this.isPA = true;
  106.             break;
  107.         default:
  108.             break;
  109.         }
  110.         this.init(
  111.                 log, configPdDManager,
  112.                 null);
  113.     }
  114.     private void init(Logger log, ConfigurazionePdDManager configPdDManager, PortaTracciamento porta) throws DriverConfigurazioneException, CoreException {
  115.        
  116.         this.log = log;
  117.         this.configPdDManager = configPdDManager;
  118.         this.op2Properties = OpenSPCoop2Properties.getInstance();
  119.        
  120.         Tracciamento configTracciamento = this.configPdDManager.getOpenSPCoopAppenderTracciamento();
  121.         ConfigurazioneTracciamentoPorta config = null;
  122.         if(this.isPA) {
  123.             config = configTracciamento.getPortaApplicativa();
  124.         }
  125.         if(this.isPD) {
  126.             config = configTracciamento.getPortaDelegata();
  127.         }
  128.        
  129.         if(porta!=null && StatoFunzionalita.ABILITATO.equals(porta.getStato())) {
  130.             // ridefinito
  131.             this.regole = new TracciamentoCompatibilitaFiltroEsiti(porta.getDatabase(), porta.getFiletrace());
  132.             this.configurazioneFileTrace = porta.getFiletraceConfig();
  133.             this.esitiConfig = porta.getEsiti();
  134.             this.informazioniSalvareTransazioni = porta.getTransazioni();
  135.         }
  136.         else {
  137.             this.regole = new TracciamentoCompatibilitaFiltroEsiti(config!=null ? config.getDatabase() : null,
  138.                     config!=null ? config.getFiletrace() : null);
  139.             if(config!=null) {
  140.                 this.configurazioneFileTrace = config.getFiletraceConfig();
  141.                 this.esitiConfig = config.getEsiti();
  142.                 this.informazioniSalvareTransazioni = config.getTransazioni();
  143.             }
  144.         }
  145.        
  146.         this.initDB();
  147.        
  148.         this.initFileTrace();
  149.     }
  150.    
  151.    
  152.     public TracciamentoCompatibilitaFiltroEsiti getRegole() {
  153.         return this.regole;
  154.     }
  155.    

  156.     private void initDB() {
  157.         this.dbEnabled = this.regole.isTracciamentoDBEnabled();
  158.     }
  159.     public boolean isDbEnabled() {
  160.         return this.dbEnabled;
  161.     }
  162.    
  163.    
  164.    
  165.     private void initFileTrace() throws DriverConfigurazioneException, CoreException {
  166.         if(this.regole.isTracciamentoFileTraceEnabled()) {
  167.             if(this.regole.isTracciamentoFileTraceEnabledByExternalProperties()){
  168.                 this.initFileTraceExternalConfig();
  169.             }
  170.             else {
  171.                 this.fileTraceEnabled = true;
  172.                 initFileTraceInternalConfig();
  173.                 initFileTraceInternalDumpConfig();
  174.             }
  175.         }
  176.         else {
  177.             initFileTraceExternalConfig();
  178.             if(!this.fileTraceEnabled) {
  179.                 this.fileTraceEnabled = false;
  180.                 this.fileTraceConfig = null;
  181.                 this.fileTraceConfigDumpIn = null;
  182.                 this.fileTraceConfigDumpOut = null;
  183.             }
  184.         }
  185.     }
  186.     private void initFileTraceExternalConfig() throws DriverConfigurazioneException, CoreException {
  187.         this.fileTraceEnabled = this.op2Properties.isTransazioniFileTraceEnabled();
  188.         if(this.fileTraceEnabled) {
  189.             this.fileTraceConfig = this.op2Properties.getTransazioniFileTraceConfig();
  190.         }
  191.        
  192.         if(!this.isConfig) {
  193.             initFileTraceExternalConfigPorta();
  194.         }
  195.     }
  196.     private boolean initFileTraceByExternalPropertyPort = false;
  197.     public boolean isInitFileTraceByExternalPropertyPort() {
  198.         return this.initFileTraceByExternalPropertyPort;
  199.     }
  200.     private void initFileTraceExternalConfigPorta() throws DriverConfigurazioneException, CoreException {
  201.         if(this.isPA && this.pa!=null) {
  202.             this.fileTraceEnabled = this.configPdDManager.isTransazioniFileTraceEnabled(this.pa);
  203.             if(this.fileTraceEnabled) {
  204.                 this.initFileTraceByExternalPropertyPort = true;
  205.                 initFileTraceExternalConfigPortaApplicativa();
  206.             }
  207.             else {
  208.                 this.fileTraceConfig = null;
  209.             }
  210.         }
  211.         else if(this.isPD && this.pd!=null) {
  212.             this.fileTraceEnabled = this.configPdDManager.isTransazioniFileTraceEnabled(this.pd);
  213.             if(this.fileTraceEnabled) {
  214.                 this.initFileTraceByExternalPropertyPort = true;
  215.                 initFileTraceExternalConfigPortaDelegata();
  216.             }
  217.             else {
  218.                 this.fileTraceConfig = null;
  219.             }
  220.         }
  221.     }
  222.     private void initFileTraceExternalConfigPortaApplicativa() throws DriverConfigurazioneException, CoreException {
  223.         this.fileTraceConfig = this.configPdDManager.getFileTraceConfig(this.pa);
  224.         this.fileTraceConfigGlobal = this.op2Properties.isTransazioniFileTraceEnabled() &&
  225.                 this.op2Properties.getTransazioniFileTraceConfig().getAbsolutePath().equals(this.fileTraceConfig.getAbsolutePath());
  226.        
  227.         initFileTraceConfigPortaApplicativaDefaultDumpIn();
  228.         initFileTraceConfigPortaApplicativaDefaultDumpOut();
  229.        
  230.     }
  231.     private void initFileTraceExternalConfigPortaDelegata() throws DriverConfigurazioneException, CoreException {
  232.         this.fileTraceConfig = this.configPdDManager.getFileTraceConfig(this.pd);
  233.         this.fileTraceConfigGlobal = this.op2Properties.isTransazioniFileTraceEnabled() &&
  234.                 this.op2Properties.getTransazioniFileTraceConfig().getAbsolutePath().equals(this.fileTraceConfig.getAbsolutePath());
  235.        
  236.         initFileTraceConfigPortaDelegataDefaultDumpIn();
  237.         initFileTraceConfigPortaDelegataDefaultDumpOut();
  238.     }
  239.     private void initFileTraceInternalConfig() throws DriverConfigurazioneException, CoreException {
  240.         if(this.configurazioneFileTrace!=null && this.configurazioneFileTrace.getConfig()!=null && StringUtils.isNotEmpty(this.configurazioneFileTrace.getConfig())) {
  241.             this.fileTraceConfig = ConfigurazioneTracciamento.toFileTraceConfig(this.configurazioneFileTrace.getConfig(), this.op2Properties.getRootDirectory(),true);
  242.             this.fileTraceConfigGlobal = this.op2Properties.isTransazioniFileTraceEnabled() &&
  243.                     this.op2Properties.getTransazioniFileTraceConfig().getAbsolutePath().equals(this.fileTraceConfig.getAbsolutePath());
  244.         }
  245.         else {
  246.             // utilizzo la configurazione di default
  247.             this.fileTraceConfig = this.op2Properties.getTransazioniFileTraceConfig();
  248.             if(!this.isConfig) {
  249.                 if(this.isPA && this.pa!=null) {
  250.                     this.fileTraceConfig = this.configPdDManager.getFileTraceConfig(this.pa);
  251.                     this.fileTraceConfigGlobal = this.op2Properties.isTransazioniFileTraceEnabled() &&
  252.                             this.op2Properties.getTransazioniFileTraceConfig().getAbsolutePath().equals(this.fileTraceConfig.getAbsolutePath());
  253.                 }
  254.                 else if(this.isPD && this.pd!=null) {
  255.                     this.fileTraceConfig = this.configPdDManager.getFileTraceConfig(this.pd);
  256.                     this.fileTraceConfigGlobal = this.op2Properties.isTransazioniFileTraceEnabled() &&
  257.                             this.op2Properties.getTransazioniFileTraceConfig().getAbsolutePath().equals(this.fileTraceConfig.getAbsolutePath());
  258.                 }
  259.             }
  260.         }
  261.     }
  262.     private void initFileTraceInternalDumpConfig() throws DriverConfigurazioneException {
  263.         if(this.configurazioneFileTrace!=null && this.configurazioneFileTrace.getDumpIn()!=null) {
  264.             this.fileTraceConfigDumpIn = this.configurazioneFileTrace.getDumpIn();
  265.             this.fileTraceConfigDumpOut = this.configurazioneFileTrace.getDumpOut();
  266.         }
  267.         else {
  268.             if(this.isConfig) {
  269.                 // utilizzo la configurazione di default
  270.                 if(this.isPA && this.pa!=null) {
  271.                     initFileTraceConfigPortaApplicativaDefaultDumpIn();
  272.                     initFileTraceConfigPortaApplicativaDefaultDumpOut();
  273.                 }
  274.                 else if(this.isPD && this.pd!=null) {
  275.                     initFileTraceConfigPortaDelegataDefaultDumpIn();
  276.                     initFileTraceConfigPortaDelegataDefaultDumpOut();
  277.                 }
  278.             }
  279.             else {
  280.                 initFileTraceInternalDumpConfigPorte();
  281.             }
  282.         }
  283.     }
  284.     private void initFileTraceInternalDumpConfigPorte() throws DriverConfigurazioneException {
  285.         if(this.isPA && this.pa!=null) {
  286.             if(this.pa.getTracciamento()!=null && this.pa.getTracciamento().getFiletraceConfig()!=null) {
  287.                 this.fileTraceConfigDumpIn = this.pa.getTracciamento().getFiletraceConfig().getDumpIn();
  288.                 this.fileTraceConfigDumpOut = this.pa.getTracciamento().getFiletraceConfig().getDumpOut();
  289.             }
  290.             else {
  291.                 initFileTraceConfigPortaApplicativaDefaultDumpIn();
  292.                 initFileTraceConfigPortaApplicativaDefaultDumpOut();
  293.             }
  294.         }
  295.         else if(this.isPD && this.pd!=null) {
  296.             if(this.pd.getTracciamento()!=null && this.pd.getTracciamento().getFiletraceConfig()!=null) {
  297.                 this.fileTraceConfigDumpIn = this.pd.getTracciamento().getFiletraceConfig().getDumpIn();
  298.                 this.fileTraceConfigDumpOut = this.pd.getTracciamento().getFiletraceConfig().getDumpOut();
  299.             }
  300.             else {
  301.                 initFileTraceConfigPortaDelegataDefaultDumpIn();
  302.                 initFileTraceConfigPortaDelegataDefaultDumpOut();
  303.             }
  304.         }
  305.     }
  306.     private void initFileTraceConfigPortaApplicativaDefaultDumpIn() throws DriverConfigurazioneException {
  307.         boolean fileTraceHeaders = this.configPdDManager.isTransazioniFileTraceDumpBinarioHeadersEnabled(this.pa);
  308.         boolean fileTracePayload = this.configPdDManager.isTransazioniFileTraceDumpBinarioPayloadEnabled(this.pa);
  309.         this.fileTraceConfigDumpIn = new TracciamentoConfigurazioneFiletraceConnector();
  310.         this.fileTraceConfigDumpIn.setStato((fileTraceHeaders || fileTracePayload) ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  311.         this.fileTraceConfigDumpIn.setHeader(fileTraceHeaders ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  312.         this.fileTraceConfigDumpIn.setPayload(fileTracePayload ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);    
  313.     }
  314.     private void initFileTraceConfigPortaApplicativaDefaultDumpOut() throws DriverConfigurazioneException {
  315.         boolean fileTraceHeaders = this.configPdDManager.isTransazioniFileTraceDumpBinarioConnettoreHeadersEnabled(this.pa);
  316.         boolean fileTracePayload = this.configPdDManager.isTransazioniFileTraceDumpBinarioConnettorePayloadEnabled(this.pa);
  317.         this.fileTraceConfigDumpOut = new TracciamentoConfigurazioneFiletraceConnector();
  318.         this.fileTraceConfigDumpOut.setStato((fileTraceHeaders || fileTracePayload) ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  319.         this.fileTraceConfigDumpOut.setHeader(fileTraceHeaders ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  320.         this.fileTraceConfigDumpOut.setPayload(fileTracePayload ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  321.     }
  322.     private void initFileTraceConfigPortaDelegataDefaultDumpIn() throws DriverConfigurazioneException {
  323.         boolean fileTraceHeaders = this.configPdDManager.isTransazioniFileTraceDumpBinarioHeadersEnabled(this.pd);
  324.         boolean fileTracePayload = this.configPdDManager.isTransazioniFileTraceDumpBinarioPayloadEnabled(this.pd);
  325.         this.fileTraceConfigDumpIn = new TracciamentoConfigurazioneFiletraceConnector();
  326.         this.fileTraceConfigDumpIn.setStato((fileTraceHeaders || fileTracePayload) ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  327.         this.fileTraceConfigDumpIn.setHeader(fileTraceHeaders ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  328.         this.fileTraceConfigDumpIn.setPayload(fileTracePayload ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  329.     }
  330.     private void initFileTraceConfigPortaDelegataDefaultDumpOut() throws DriverConfigurazioneException {
  331.         boolean fileTraceHeaders = this.configPdDManager.isTransazioniFileTraceDumpBinarioConnettoreHeadersEnabled(this.pd);
  332.         boolean fileTracePayload = this.configPdDManager.isTransazioniFileTraceDumpBinarioConnettorePayloadEnabled(this.pd);
  333.         this.fileTraceConfigDumpOut = new TracciamentoConfigurazioneFiletraceConnector();
  334.         this.fileTraceConfigDumpOut.setStato((fileTraceHeaders || fileTracePayload) ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  335.         this.fileTraceConfigDumpOut.setHeader(fileTraceHeaders ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  336.         this.fileTraceConfigDumpOut.setPayload(fileTracePayload ? StatoFunzionalita.ABILITATO : StatoFunzionalita.DISABILITATO);
  337.     }
  338.    
  339.     public boolean isFileTraceEnabled() {
  340.         return this.fileTraceEnabled;
  341.     }
  342.     public File getFileTraceConfig() {
  343.         return this.fileTraceConfig;
  344.     }
  345.     public boolean isFileTraceConfigGlobal() {
  346.         return this.fileTraceConfigGlobal;
  347.     }
  348.     public TracciamentoConfigurazioneFiletraceConnector getFileTraceConfigDumpIn() {
  349.         return this.fileTraceConfigDumpIn;
  350.     }
  351.     public TracciamentoConfigurazioneFiletraceConnector getFileTraceConfigDumpOut() {
  352.         return this.fileTraceConfigDumpOut;
  353.     }
  354.     public boolean isTransazioniFileTraceDumpBinarioPayloadEnabled(){
  355.         return this.fileTraceConfigDumpIn!=null && StatoFunzionalita.ABILITATO.equals(this.fileTraceConfigDumpIn.getStato()) &&
  356.                 StatoFunzionalita.ABILITATO.equals(this.fileTraceConfigDumpIn.getPayload());
  357.     }
  358.     public boolean isTransazioniFileTraceDumpBinarioHeaderEnabled(){
  359.         return this.fileTraceConfigDumpIn!=null && StatoFunzionalita.ABILITATO.equals(this.fileTraceConfigDumpIn.getStato()) &&
  360.                 StatoFunzionalita.ABILITATO.equals(this.fileTraceConfigDumpIn.getHeader());
  361.     }
  362.     public boolean isTransazioniFileTraceDumpBinarioConnettorePayloadEnabled(){
  363.         return this.fileTraceConfigDumpOut!=null && StatoFunzionalita.ABILITATO.equals(this.fileTraceConfigDumpOut.getStato()) &&
  364.                 StatoFunzionalita.ABILITATO.equals(this.fileTraceConfigDumpOut.getPayload());
  365.     }
  366.     public boolean isTransazioniFileTraceDumpBinarioConnettoreHeaderEnabled(){
  367.         return this.fileTraceConfigDumpOut!=null && StatoFunzionalita.ABILITATO.equals(this.fileTraceConfigDumpOut.getStato()) &&
  368.                 StatoFunzionalita.ABILITATO.equals(this.fileTraceConfigDumpOut.getHeader());
  369.     }
  370.     public static File toFileTraceConfig(String name, String rootDir, boolean check) throws CoreException {
  371.         File getTransazioniFileTraceConfig = new File(name);
  372.         if(!getTransazioniFileTraceConfig.exists() &&
  373.             rootDir!=null && !"".equals(rootDir)) {
  374.             getTransazioniFileTraceConfig = new File(rootDir, name);
  375.         }
  376.        
  377.         if(check) {
  378.             if(!getTransazioniFileTraceConfig.exists()) {
  379.                 throw ConfigurazioneTracciamentoUtils.newCoreExceptionNotExists(getTransazioniFileTraceConfig, false);
  380.             }
  381.             if(getTransazioniFileTraceConfig.isDirectory()) {
  382.                 throw ConfigurazioneTracciamentoUtils.newCoreExceptionNotFile(getTransazioniFileTraceConfig, false);
  383.             }
  384.             if(!getTransazioniFileTraceConfig.canRead()) {
  385.                 throw ConfigurazioneTracciamentoUtils.newCoreExceptionCannotRead(getTransazioniFileTraceConfig, false);
  386.             }
  387.         }
  388.         return getTransazioniFileTraceConfig;
  389.     }
  390.    
  391.     public List<String> getEsitiDaRegistrare(StringBuilder bf) throws ProtocolException{
  392.         if(this.regole.isFilterEnabled()) {
  393.             if(this.esitiDaRegistrare==null) {
  394.                 this.esitiDaRegistrare = EsitiConfigUtils.getRegistrazioneEsiti(this.esitiConfig, this.log, bf);
  395.             }
  396.         }
  397.         else {
  398.             this.esitiDaRegistrare = null;
  399.         }
  400.         return this.esitiDaRegistrare;
  401.     }
  402.     public String getTipoFiltroEsiti() {
  403.         StringBuilder sb = new StringBuilder();
  404.         if(this.regole.isFilterDBEnabled()) {
  405.             sb.append("db");
  406.         }
  407.         if(this.regole.isFilterFileTraceEnabled()) {
  408.             if(sb.length()>0) {
  409.                 sb.append(",");
  410.             }
  411.             sb.append("db");
  412.         }
  413.         return sb.toString();
  414.     }
  415.     public boolean isFiltroEsitiDB() {
  416.         return this.regole.isFilterDBEnabled();
  417.     }
  418.     public boolean isFiltroEsitiFileTrace() {
  419.         return this.regole.isFilterFileTraceEnabled();
  420.     }
  421.    
  422. }