GeneratoreMessaggiDiagnostici.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.core.controllo_traffico;

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

  23. import org.slf4j.Logger;
  24. import org.openspcoop2.pdd.logger.MsgDiagnosticiProperties;
  25. import org.openspcoop2.pdd.logger.MsgDiagnostico;

  26. /**    
  27.  * GeneratoreMessaggiDiagnostici
  28.  *
  29.  * @author Poli Andrea (poli@link.it)
  30.  * @author $Author$
  31.  * @version $Rev$, $Date$
  32.  */
  33. public class GeneratoreMessaggiDiagnostici {

  34.    
  35.     public static final int NUMERO_TEMPLATE_DINAMICI_ERRORI_GENERICI = 4; // sono i diagnostici emessi dai moduli ricezione contenuti o buste
  36.     public static final int NUMERO_TEMPLATE_DINAMICI_DETTAGLI_SINGOLO_ERRORE = 10; // sono i diagnostici di "appoggio" registrati nel modulo 'all' utilizzati per generare l'errore
  37.     // NOTA: siccome tanto viene salvato direttamente il diagnostico emesso dai moduli ricezione contenuti o buste non sembra necessario salvare i singoli dettagli visto che sono già nell'errore generico
  38.    
  39.     public static final boolean saveSingleValueOfMessageError = false;
  40.    
  41.     public static void cleanPolicyValues(MsgDiagnostico msgDiag) throws Exception{
  42.        
  43.         Map<String, String> keywords = msgDiag.getKeywordLogPersonalizzati();
  44.         if(keywords==null || keywords.size()<=0){
  45.             return;
  46.         }
  47.         keywords.remove(GeneratoreMessaggiErrore.TEMPLATE_POLICY_ACTIVE_ID);
  48.         keywords.remove(GeneratoreMessaggiErrore.TEMPLATE_POLICY_VIOLATA_MOTIVO);
  49.         keywords.remove(GeneratoreMessaggiErrore.TEMPLATE_POLICY_FILTRATA_MOTIVO);
  50.         keywords.remove(GeneratoreMessaggiErrore.TEMPLATE_POLICY_NON_APPLICABILE_MOTIVO);
  51.         if(saveSingleValueOfMessageError){
  52.             keywords.remove(GeneratoreMessaggiErrore.TEMPLATE_POLICY_VALORE_SOGLIA);
  53.             keywords.remove(GeneratoreMessaggiErrore.TEMPLATE_POLICY_TIPOLOGIA_TEMPO_MEDIO);
  54.             keywords.remove(GeneratoreMessaggiErrore.TEMPLATE_POLICY_VALORE_RILEVATO);
  55.             keywords.remove(GeneratoreMessaggiErrore.TEMPLATE_POLICY_AVG_TIME_RILEVATO);
  56.             keywords.remove(GeneratoreMessaggiErrore.TEMPLATE_POLICY_VALORE_SOGLIA_DEGRADO_PRESTAZIONALE);
  57.             keywords.remove(GeneratoreMessaggiErrore.TEMPLATE_POLICY_GRUPPO);
  58.             keywords.remove(GeneratoreMessaggiErrore.TEMPLATE_POLICY_INTERVALLO_TEMPORALE);
  59.             keywords.remove(GeneratoreMessaggiErrore.TEMPLATE_POLICY_NOME_ALLARME);
  60.             keywords.remove(GeneratoreMessaggiErrore.TEMPLATE_POLICY_STATO_ALLARME);
  61.             keywords.remove(GeneratoreMessaggiErrore.TEMPLATE_POLICY_STATO_ALLARME_ATTESO);
  62.         }
  63.        
  64.     }
  65.    
  66.     public static void emitDiagnostic(MsgDiagnostico msgDiag,String idDiagnostico, Logger log) {
  67.        
  68.         Map<String, String> keywords = msgDiag.getKeywordLogPersonalizzati();
  69.         StringBuilder bf = new StringBuilder();
  70.         try{
  71.             if(keywords!=null && keywords.size()>0){
  72.                 addNextValue(keywords, bf, GeneratoreMessaggiErrore.TEMPLATE_POLICY_ACTIVE_ID);
  73.                 addNextValue(keywords, bf, GeneratoreMessaggiErrore.TEMPLATE_POLICY_VIOLATA_MOTIVO);
  74.                 addNextValue(keywords, bf, GeneratoreMessaggiErrore.TEMPLATE_POLICY_FILTRATA_MOTIVO);
  75.                 addNextValue(keywords, bf, GeneratoreMessaggiErrore.TEMPLATE_POLICY_NON_APPLICABILE_MOTIVO);
  76.                 if(saveSingleValueOfMessageError){
  77.                     addNextValue(keywords, bf, GeneratoreMessaggiErrore.TEMPLATE_POLICY_VALORE_SOGLIA);
  78.                     addNextValue(keywords, bf, GeneratoreMessaggiErrore.TEMPLATE_POLICY_TIPOLOGIA_TEMPO_MEDIO);
  79.                     addNextValue(keywords, bf, GeneratoreMessaggiErrore.TEMPLATE_POLICY_VALORE_RILEVATO);
  80.                     addNextValue(keywords, bf, GeneratoreMessaggiErrore.TEMPLATE_POLICY_AVG_TIME_RILEVATO);
  81.                     addNextValue(keywords, bf, GeneratoreMessaggiErrore.TEMPLATE_POLICY_VALORE_SOGLIA_DEGRADO_PRESTAZIONALE);
  82.                     addNextValue(keywords, bf, GeneratoreMessaggiErrore.TEMPLATE_POLICY_GRUPPO);
  83.                     addNextValue(keywords, bf, GeneratoreMessaggiErrore.TEMPLATE_POLICY_INTERVALLO_TEMPORALE);
  84.                     addNextValue(keywords, bf, GeneratoreMessaggiErrore.TEMPLATE_POLICY_NOME_ALLARME);
  85.                     addNextValue(keywords, bf, GeneratoreMessaggiErrore.TEMPLATE_POLICY_STATO_ALLARME);
  86.                     addNextValue(keywords, bf, GeneratoreMessaggiErrore.TEMPLATE_POLICY_STATO_ALLARME_ATTESO);
  87.                 }
  88.             }
  89.         }catch(Exception e){
  90.             log.error(e.getMessage(),e);
  91.         }
  92.                
  93.         if(bf.length()>0){
  94.             msgDiag.getProperties().put(MsgDiagnosticiProperties.DIAGNOSTIC_WITH_DYNAMIC_INFO_TYPE,MsgDiagnosticiProperties.DIAGNOSTIC_TYPE_POLICY_CONTROLLO_TRAFFICO);
  95.             msgDiag.getProperties().put(MsgDiagnosticiProperties.DIAGNOSTIC_WITH_DYNAMIC_INFO_VALUE,bf.toString());
  96.         }      
  97.        
  98.         msgDiag.logPersonalizzato(idDiagnostico);
  99.        
  100.         if(bf.length()>0){
  101.             msgDiag.getProperties().remove(MsgDiagnosticiProperties.DIAGNOSTIC_WITH_DYNAMIC_INFO_TYPE);
  102.             msgDiag.getProperties().remove(MsgDiagnosticiProperties.DIAGNOSTIC_WITH_DYNAMIC_INFO_VALUE);
  103.         }      
  104.        
  105.     }
  106.     private static void addNextValue(Map<String, String> keywords,StringBuilder bf, String keyId) throws Exception{
  107.         if(bf.length()>0){
  108.             bf.append(MsgDiagnosticiProperties.DIAGNOSTIC_WITH_DYNAMIC_INFO_SEPARATOR);
  109.         }
  110.         if(keywords.containsKey(keyId)){
  111.             String v = keywords.get(keyId);
  112.             if(v==null || v.length()<=0){
  113.                 bf.append(MsgDiagnosticiProperties.NON_PRESENTE);
  114.             }
  115.             else{
  116.                 if(v.contains(MsgDiagnosticiProperties.DIAGNOSTIC_WITH_DYNAMIC_INFO_SEPARATOR)){
  117.                     throw new Exception("Valore ["+v+"] della chiave ["+keyId+"] non simulabile poichè contiene il separatore ["+MsgDiagnosticiProperties.DIAGNOSTIC_WITH_DYNAMIC_INFO_SEPARATOR+"]");
  118.                 }
  119.                 if(v.contains(MsgDiagnosticiProperties.DIAGNOSTIC_WITH_DYNAMIC_INFO_DIAG_SEPARATOR)){
  120.                     throw new Exception("Valore ["+v+"] della chiave ["+keyId+"] non simulabile poichè contiene il separatore di diagnostici ["+MsgDiagnosticiProperties.DIAGNOSTIC_WITH_DYNAMIC_INFO_DIAG_SEPARATOR+"]");
  121.                 }
  122.                 bf.append(v);
  123.             }
  124.         }
  125.         else{
  126.             bf.append(MsgDiagnosticiProperties.NON_PRESENTE);
  127.         }
  128.     }
  129.    
  130.     public static Map<String, String> convertToProperties(String value) throws Exception{
  131.         if(value.contains(MsgDiagnosticiProperties.DIAGNOSTIC_WITH_DYNAMIC_INFO_SEPARATOR)){
  132.            
  133.             String [] tmp = value.split(MsgDiagnosticiProperties.DIAGNOSTIC_WITH_DYNAMIC_INFO_SEPARATOR);
  134.             if(tmp==null || tmp.length<=0){
  135.                 throw new Exception("Split value ["+value+"] with ["+MsgDiagnosticiProperties.DIAGNOSTIC_WITH_DYNAMIC_INFO_SEPARATOR+"] failed");
  136.             }
  137.             int NUMERO_TEMPLATE_DINAMICI = NUMERO_TEMPLATE_DINAMICI_ERRORI_GENERICI;
  138.             if(saveSingleValueOfMessageError){
  139.                 NUMERO_TEMPLATE_DINAMICI+=NUMERO_TEMPLATE_DINAMICI_DETTAGLI_SINGOLO_ERRORE;
  140.             }
  141.             if(tmp.length!=NUMERO_TEMPLATE_DINAMICI){
  142.                 throw new Exception("Split value ["+value+"] with ["+MsgDiagnosticiProperties.DIAGNOSTIC_WITH_DYNAMIC_INFO_SEPARATOR+
  143.                         "] failed (expected:"+NUMERO_TEMPLATE_DINAMICI+" found:"+tmp.length+")");
  144.             }
  145.            
  146.             Map<String, String> map = new HashMap<>();
  147.            
  148.             for (int i = 0; i < tmp.length; i++) {
  149.                
  150.                 String v = tmp[i];
  151.                 if(v==null || (v.length()==1 && MsgDiagnosticiProperties.NON_PRESENTE.equals(v))){
  152.                     continue;
  153.                 }
  154.                
  155.                 if(i==0)
  156.                     map.put(GeneratoreMessaggiErrore.TEMPLATE_POLICY_ACTIVE_ID,v);
  157.                 else if(i==1)
  158.                     map.put(GeneratoreMessaggiErrore.TEMPLATE_POLICY_VIOLATA_MOTIVO,v);
  159.                 else if(i==2)
  160.                     map.put(GeneratoreMessaggiErrore.TEMPLATE_POLICY_FILTRATA_MOTIVO,v);
  161.                 else if(i==3)
  162.                     map.put(GeneratoreMessaggiErrore.TEMPLATE_POLICY_NON_APPLICABILE_MOTIVO,v);
  163.                
  164.                 if(saveSingleValueOfMessageError){
  165.                     if(i==4)
  166.                         map.put(GeneratoreMessaggiErrore.TEMPLATE_POLICY_VALORE_SOGLIA,v);
  167.                     else if(i==5)
  168.                         map.put(GeneratoreMessaggiErrore.TEMPLATE_POLICY_TIPOLOGIA_TEMPO_MEDIO,v);
  169.                     else if(i==6)
  170.                         map.put(GeneratoreMessaggiErrore.TEMPLATE_POLICY_VALORE_RILEVATO,v);
  171.                     else if(i==7)
  172.                         map.put(GeneratoreMessaggiErrore.TEMPLATE_POLICY_AVG_TIME_RILEVATO,v);
  173.                     else if(i==8)
  174.                         map.put(GeneratoreMessaggiErrore.TEMPLATE_POLICY_VALORE_SOGLIA_DEGRADO_PRESTAZIONALE,v);
  175.                     else if(i==9)
  176.                         map.put(GeneratoreMessaggiErrore.TEMPLATE_POLICY_GRUPPO,v);
  177.                     else if(i==10)
  178.                         map.put(GeneratoreMessaggiErrore.TEMPLATE_POLICY_INTERVALLO_TEMPORALE,v);
  179.                     else if(i==11)
  180.                         map.put(GeneratoreMessaggiErrore.TEMPLATE_POLICY_NOME_ALLARME,v);
  181.                     else if(i==12)
  182.                         map.put(GeneratoreMessaggiErrore.TEMPLATE_POLICY_STATO_ALLARME,v);
  183.                     else if(i==13)
  184.                         map.put(GeneratoreMessaggiErrore.TEMPLATE_POLICY_STATO_ALLARME_ATTESO,v);
  185.                 }
  186.                
  187.             }
  188.            
  189.             return map;
  190.            
  191.         }
  192.         throw new Exception("Value is null");
  193.     }
  194. }