DumpUtilities.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.utils.service.context.dump;


  21. import java.util.List;
  22. import java.util.Map;

  23. import org.apache.cxf.interceptor.Fault;
  24. import org.openspcoop2.utils.LoggerWrapperFactory;
  25. import org.openspcoop2.utils.logger.beans.Property;
  26. import org.openspcoop2.utils.logger.beans.context.application.ApplicationTransaction;
  27. import org.openspcoop2.utils.logger.beans.context.batch.BatchTransaction;
  28. import org.openspcoop2.utils.logger.beans.context.core.AbstractTransaction;
  29. import org.openspcoop2.utils.logger.beans.context.core.AbstractTransactionWithClient;
  30. import org.openspcoop2.utils.logger.beans.context.core.BaseServer;
  31. import org.openspcoop2.utils.logger.beans.context.core.ConnectionMessage;
  32. import org.openspcoop2.utils.logger.beans.context.core.HttpClient;
  33. import org.openspcoop2.utils.logger.beans.context.core.HttpServer;
  34. import org.openspcoop2.utils.logger.beans.context.core.Request;
  35. import org.openspcoop2.utils.logger.beans.context.core.Response;
  36. import org.openspcoop2.utils.logger.beans.context.proxy.ProxyTransaction;
  37. import org.openspcoop2.utils.logger.constants.MessageType;
  38. import org.openspcoop2.utils.service.context.ContextThreadLocal;
  39. import org.openspcoop2.utils.service.context.IContext;
  40. import org.openspcoop2.utils.service.context.server.ServerConfig;

  41. /**
  42.  * DumpUtilities
  43.  *
  44.  * @author Andrea Poli (apoli@link.it)
  45.  * @author $Author$
  46.  * @version $Rev$, $Date$
  47.  */
  48. public class DumpUtilities {
  49.    
  50.     private ServerConfig serverConfig;
  51.     private DumpConfig dumpConfig;

  52.     public DumpUtilities(DumpConfig dumpConfig) {
  53.         this.dumpConfig = dumpConfig;
  54.     }
  55.     public DumpUtilities(ServerConfig serverConfig) {
  56.         this.serverConfig = serverConfig;
  57.         this.dumpConfig = serverConfig.getDumpConfig();
  58.     }

  59.    
  60.     public void processBeforeSend(DumpRequest request) throws Fault {
  61.        
  62.         try {
  63.            
  64.             //
  65.             // Realizzo la stessa logica di MessageLoggingHandlerUtils
  66.             //
  67.             IContext ctx = ContextThreadLocal.get();
  68.    
  69.             AbstractTransaction transaction = ctx.getApplicationContext().getTransaction();
  70.            
  71.             AbstractTransactionWithClient transactionWithClient = null;
  72.             if(transaction instanceof AbstractTransactionWithClient) {
  73.                 transactionWithClient = (AbstractTransactionWithClient) transaction;
  74.             }
  75.            
  76.             org.openspcoop2.utils.logger.beans.Message msg = new org.openspcoop2.utils.logger.beans.Message();
  77.             if(request.getPayload()!=null) {
  78.                 msg.setContent(request.getPayload());
  79.             }
  80.             msg.setContentType(request.getContentType());
  81.             if(this.serverConfig!=null) {
  82.                 msg.setIdOperation(this.serverConfig.getOperationId());
  83.                 msg.setIdServer(this.serverConfig.getServerId());
  84.             }
  85.             msg.setIdTransaction(ctx.getTransactionId());
  86.             switch (this.dumpConfig.getRole()) {
  87.             case SERVER:
  88.                 msg.setType(MessageType.REQUEST_IN);
  89.                
  90.                 if(transactionWithClient!=null) {
  91.                     if(transactionWithClient.getRequest()==null) {
  92.                         transactionWithClient.setRequest(new Request());
  93.                     }
  94.                     if(msg.getContent()!=null ) {
  95.                         transactionWithClient.getRequest().setSize(Long.valueOf(msg.getContent().length));
  96.                     }
  97.                     else {
  98.                         transactionWithClient.getRequest().setSize(0l);
  99.                     }
  100.                 }
  101.                
  102.                 break;
  103.             case CLIENT:
  104.                 msg.setType(MessageType.REQUEST_OUT);
  105.                
  106.                 if(this.serverConfig!=null) {
  107.                    
  108.                     if(this.serverConfig.getOperationId()==null) {
  109.                         throw new Exception("ServerConfig.operationId undefined");
  110.                     }
  111.                        
  112.                     List<BaseServer> list = null;
  113.                     BaseServer server = null;
  114.                     if(transaction instanceof ApplicationTransaction) {
  115.                         list = ((ApplicationTransaction)transaction).getServers();
  116.                     }
  117.                     else if(transaction instanceof BatchTransaction) {
  118.                         list = ((BatchTransaction)transaction).getServers();
  119.                     }
  120.                     else if(transaction instanceof ProxyTransaction) {
  121.                         server = ((ProxyTransaction)transaction).getServer();
  122.                     }
  123.                     if(list!=null && list.size()>0) {
  124.                         for (BaseServer baseServer : list) {
  125.                             if(this.serverConfig.getOperationId().equals(baseServer.getIdOperation())) {
  126.                                 server = baseServer;
  127.                                 break;
  128.                             }
  129.                         }
  130.                     }
  131.                    
  132.                     if(server==null) {
  133.                         throw new Exception("Server '"+this.serverConfig.getOperationId()+"' not found");
  134.                     }
  135.                    
  136.                     if(server.getRequest()==null) {
  137.                         server.setRequest(new ConnectionMessage());
  138.                     }
  139.                     if(msg.getContent()!=null ) {
  140.                         server.getRequest().setSize(Long.valueOf(msg.getContent().length));
  141.                     }
  142.                     else {
  143.                         server.getRequest().setSize(0l);
  144.                     }
  145.                 }
  146.                
  147.                 break;
  148.             }
  149.            
  150.             Map<String, String> headers = request.getHeaders();
  151.             for (Map.Entry<String, String> entry : headers.entrySet())
  152.             {
  153.                 String key = entry.getKey();
  154.                 String value = entry.getValue();
  155.                 msg.addHeader(new Property(key, value));
  156.             }
  157.        
  158.             ctx.getApplicationLogger().log(msg);
  159.            
  160.         } catch (Throwable e) {
  161.             LoggerWrapperFactory.getLogger(DumpInInterceptor.class).error(e.getMessage(),e);
  162.             throw new Fault(e);
  163.         }
  164.        
  165.     }
  166.    
  167.     public void processAfterSend(DumpResponse response) throws Fault {
  168.        
  169.         try {
  170.            
  171.             // sender.send(event);
  172.             IContext ctx = ContextThreadLocal.get();

  173.             AbstractTransaction transaction = ctx.getApplicationContext().getTransaction();
  174.            
  175.             AbstractTransactionWithClient transactionWithClient = null;
  176.             if(transaction instanceof AbstractTransactionWithClient) {
  177.                 transactionWithClient = (AbstractTransactionWithClient) transaction;
  178.             }
  179.            
  180.             org.openspcoop2.utils.logger.beans.Message msg = new org.openspcoop2.utils.logger.beans.Message();
  181.             if(response.getPayload()!=null) {
  182.                 msg.setContent(response.getPayload());
  183.             }
  184.             msg.setContentType(response.getContentType());
  185.             if(this.serverConfig!=null) {
  186.                 msg.setIdOperation(this.serverConfig.getOperationId());
  187.                 msg.setIdServer(this.serverConfig.getServerId());
  188.             }
  189.             msg.setIdTransaction(ctx.getTransactionId());
  190.             switch (this.dumpConfig.getRole()) {
  191.             case SERVER:
  192.                 msg.setType(MessageType.RESPONSE_OUT);
  193.                
  194.                 if(transactionWithClient!=null) {
  195.                     if(transactionWithClient.getResponse()==null) {
  196.                         transactionWithClient.setResponse(new Response());
  197.                     }
  198.                     if(msg.getContent()!=null ) {
  199.                         transactionWithClient.getResponse().setSize(Long.valueOf(msg.getContent().length));
  200.                     }
  201.                     else {
  202.                         transactionWithClient.getResponse().setSize(0l);
  203.                     }
  204.                 }
  205.                
  206.                 if(transactionWithClient!=null && transactionWithClient.getClient() instanceof HttpClient) {
  207.                     try {
  208.                         if(response.getResponseCode()!=null) {
  209.                             ((HttpClient)transactionWithClient.getClient()).setResponseStatusCode(response.getResponseCode());
  210.                         }
  211.                     }catch(Throwable t) {
  212.                     }
  213.                 }
  214.                
  215.                 break;
  216.             case CLIENT:
  217.                 msg.setType(MessageType.RESPONSE_IN);
  218.                
  219.                 if(this.serverConfig!=null) {
  220.                    
  221.                     if(this.serverConfig.getOperationId()==null) {
  222.                         throw new Exception("ServerConfig.operationId undefined");
  223.                     }
  224.                        
  225.                     List<BaseServer> list = null;
  226.                     BaseServer server = null;
  227.                     if(transaction instanceof ApplicationTransaction) {
  228.                         list = ((ApplicationTransaction)transaction).getServers();
  229.                     }
  230.                     else if(transaction instanceof BatchTransaction) {
  231.                         list = ((BatchTransaction)transaction).getServers();
  232.                     }
  233.                     else if(transaction instanceof ProxyTransaction) {
  234.                         server = ((ProxyTransaction)transaction).getServer();
  235.                     }
  236.                     if(list!=null && list.size()>0) {
  237.                         for (BaseServer baseServer : list) {
  238.                             if(this.serverConfig.getOperationId().equals(baseServer.getIdOperation())) {
  239.                                 server = baseServer;
  240.                                 break;
  241.                             }
  242.                         }
  243.                     }
  244.                    
  245.                     if(server==null) {
  246.                         throw new Exception("Server '"+this.serverConfig.getOperationId()+"' not found");
  247.                     }
  248.                    
  249.                     if(server.getResponse()==null) {
  250.                         server.setResponse(new ConnectionMessage());
  251.                     }
  252.                     if(msg.getContent()!=null ) {
  253.                         server.getResponse().setSize(Long.valueOf(msg.getContent().length));
  254.                     }
  255.                     else {
  256.                         server.getResponse().setSize(0l);
  257.                     }
  258.                    
  259.                     if(server instanceof HttpServer) {
  260.                         try {
  261.                             if(response.getResponseCode()!=null) {
  262.                                 ((HttpServer)server).setResponseStatusCode(response.getResponseCode());
  263.                             }
  264.                         }catch(Throwable t) {
  265.                         }
  266.                     }
  267.                 }
  268.                
  269.                 break;
  270.             }
  271.            
  272.             Map<String, String> headers = response.getHeaders();
  273.             for (Map.Entry<String, String> entry : headers.entrySet())
  274.             {
  275.                 String key = entry.getKey();
  276.                 String value = entry.getValue();
  277.                 msg.addHeader(new Property(key, value));
  278.             }
  279.        
  280.             ctx.getApplicationLogger().log(msg);
  281.                            
  282.         } catch (Throwable e) {
  283.             LoggerWrapperFactory.getLogger(DumpInInterceptor.class).error(e.getMessage(),e);
  284.             throw new Fault(e);
  285.         }
  286.        
  287.     }
  288.    
  289. }