On Wednesday, 6 April 2016 15:20:32 UTC+5:30, rajarshi bhattacharjee wrote:
>
>  I am actually new to graylog and frankly not quite aware of how graylog 
> is triggering the drools rule engine so it might be a very simple question 
> with an obvious solution which is somehow escaping me .
>
>
>  I am  trying to improve an already existing (drl code) by invoking 
> another java class , which is residing within a different directory as 
> compared to my drl file. Understood that graylog doesnt allow adding other 
> packages definitions(
> https://github.com/Graylog2/graylog2-server/issues/1213) , so tried with 
> a direct import by putting the java class in a different directory, but 
> when i try to invoke this java class my drl fails with the following 
> exception `Rule Compilation error : [Rule name='BPTM logs filter']
> org/graylog2/rules/Rule_BPTM_logs_filter508671689.java (42:2371) : 
> *PropertiesCache 
> cannot be resolved*
>
> 2016-04-06 09:11:09,601 WARN : org.graylog2.rules.DroolsEngine - Unable to 
> add rules due to compilation errors.
> org.graylog2.rules.RulesCompilationException: Message [id=1, level=ERROR, 
> path=r1.drl, line=30, column=0
> text=Rule Compilation error PropertiesCache cannot be resolved]
>
> Note :PropertiesCache is my  java class and my drl file exists in 
> different directories. Pretty much its not able to resolve the import and 
> fails with compilation error
>
> Any insights would be valuable ,
>

Attached DRL file , along with PropertiesCache.java file (external class i 
am trying to invoke)
 
Please advice , i am not sure whether this error is due to 
environment/drools/or graylog restrictions as i m new to both drools and 
graylog and just trying to improve this code from java perspective

-- 
You received this message because you are subscribed to the Google Groups 
"Graylog Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to graylog2+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/graylog2/ea4946a4-f7fe-4163-9986-57e3097f0d74%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
GRAYLOG.DRL (Available in directory 
/wls_domains/Graylog/GraylogServer/graylog-1.2.1/etc)

*******************************************

import org.graylog2.plugin.Message;
      import java.util.regex.Matcher;
      import java.util.regex.Pattern;
      import java.io.FileInputStream;
      import java.io.IOException;
      import java.io.InputStream;
      import java.util.Properties;
      import java.io.BufferedWriter;
      import java.io.File;
      import java.io.FileWriter;
      import java.util.Enumeration;
      import java.text.SimpleDateFormat;
      import java.util.Calendar;
      import java.util.Date;
      import java.io.IOException;
      import java.io.FileNotFoundException;
      import java.util.Arrays; 
      import etc.code.PropertiesCache;
      
         
          
          

      rule "BPTM logs filter"
          when
              m:Message(getField("type")!=null && getField("type")!="" && 
getField("type")=="BPTM" && getField("message")!="" && 
getField("message")!=null)
          then
              String patternString=null;
              String pathOfMetaFile=null;
              String metaFileName=null;
              String dontIndexInGraylogFlag=null;
              String dontFilterFlag=null;
              String messageId=null;
              String messageIdVal=null;
              String msgIdToBeFilter=null;
              String capabilityName=null;
              String configFileName=null;
              String notApplicableConstant=null;
              String filterMsgBasedOnMessageIdFlag=null;
              String msgIdSplitFlag=null;
              String msgIdSpliterVal=null;
              String capabilityrequiredFlag=null;
              String matchedCapability=null;
              String foundError="No";
              int errorLoopCount=0;
              int capabilityLoopCount=0;
              boolean foundCapability=false;
              boolean containsError=false;
              StringBuilder sb=new StringBuilder();
              Properties properties;
              


              configFileName=(m.getField("configFileName")).toString();
              configFileName=configFileName+"_metaFileFields.properties";

              capabilityName=(m.getField("capability")).toString();

              metaFileName=(m.getField("source_file")).toString();

              try {
                           
                            // this is where trying to invoke external 
singleton class and getting unresolved errors
                              
properties=PropertiesCache.getInstance().getProperty();
                              String workingDir = 
System.getProperty("user.dir");
                              File file = new 
File(workingDir+"/properties/"+configFileName);
                              FileInputStream fileInput = new 
FileInputStream(file);
                              properties.load(fileInput);
                              fileInput.close();

                              
pathOfMetaFile=properties.getProperty("_pathOfMetaFile");
                              
dontIndexInGraylogFlag=properties.getProperty("_dontIndexInGraylog");
                              
dontFilterFlag=properties.getProperty("_dontFilter");
                              
msgIdToBeFilter=properties.getProperty("_msgIdToBeFilter");
                              
notApplicableConstant=properties.getProperty("_notApplicableConstant");
                              
errorLoopCount=Integer.valueOf(properties.getProperty("_error_loop_count"));
                              
capabilityLoopCount=Integer.valueOf(properties.getProperty("_capability_loop_count"));
                              
capabilityrequiredFlag=properties.getProperty("_Capability_required");
                              
filterMsgBasedOnMessageIdFlag=properties.getProperty("_filterMsgBasedOnMessageId");
                              
msgIdSplitFlag=properties.getProperty("_Mes_Id_Split");
                              
msgIdSpliterVal=properties.getProperty("_Mes_Id_Spliter");
                              
                              // Code changes to extract the capabilityName 
Starts //
                              if(!(foundCapability))
                              {
                                for(int c=0;c<capabilityLoopCount;c++)
                                   {
                                        Matcher capabilityMatcher = 
(Pattern.compile(properties.getProperty("_matchedCapability"+c),Pattern.CASE_INSENSITIVE)).matcher(metaFileName);
                                        if 
(capabilityrequiredFlag.equalsIgnoreCase("true") && (capabilityMatcher.find()))
                                        {
                                                
matchedCapability=(capabilityMatcher.group()).toString();
                                                foundCapability=true;
                                        }
                                                                                
                                   
                                        if(foundCapability)
                                        {
                                                break;
                                        }
                                    }
                               }
                               // Code changes to extract the capability 
NameEnds

                              Matcher messageIdMatcher = 
(Pattern.compile(properties.getProperty("_Mes_Id"),Pattern.CASE_INSENSITIVE)).matcher(m.getMessage());
                              if (messageIdMatcher.find())
                              {
                                      
messageId=(messageIdMatcher.group(1)).toString();
                                      
if(msgIdSplitFlag.equalsIgnoreCase("true") && 
messageId.contains(msgIdSpliterVal)){
                                              
messageId=messageId.substring(messageId.lastIndexOf(msgIdSpliterVal)+1,messageId.length());}
                              }

                              
if(dontIndexInGraylogFlag.equalsIgnoreCase("true")){
                                      m.setFilterOut(true);}

                              
if(filterMsgBasedOnMessageIdFlag.equalsIgnoreCase("false"))
                                 messageIdVal="*";
                              else
                                 messageIdVal=messageId;

                              if(msgIdToBeFilter.contains(messageIdVal) && 
dontFilterFlag.equalsIgnoreCase("false"))
                              {
                                      String wholeMessage=null;
                                      wholeMessage=(m.getMessage()).toString();
                                      
wholeMessage=wholeMessage.replace("\n","").replace("\r","").replace("&amp;gt;",">").replace("&gt;",">").replace("&amp;lt;","<").replace("&lt;","<").replace("&quot;","\"").replace("&apos;","\'");

                                      Matcher dateMatcher = 
(Pattern.compile(properties.getProperty("_Date"),Pattern.CASE_INSENSITIVE)).matcher(wholeMessage);
                                      if (dateMatcher.find())
                                      {
                                         
sb.append(properties.getProperty("_Date_Key"));
                                         sb.append("=");
                                         
sb.append(((dateMatcher.group(1)).toString()).replace("-","/"));

                                         Matcher timeMatcher = 
(Pattern.compile(properties.getProperty("_Time"),Pattern.CASE_INSENSITIVE)).matcher(wholeMessage);
                                         if (timeMatcher.find())
                                         {
                                              sb.append(" ");
                                              sb.append(timeMatcher.group(1));
                                         }
                                         sb.append(",");
                                      }

                                      
sb.append(properties.getProperty("_Mes_Id_key"));
                                      sb.append("=");
                                      sb.append(messageId);
                                      sb.append(",");

                                      
if((properties.getProperty("_Mes_Type_Required")).equalsIgnoreCase("true"))
                                      {
                                              
sb.append(properties.getProperty("_Mes_Type_key"));
                                              sb.append("=");
                                              
if(properties.getProperty("_"+messageId)!=null)
                                                      
sb.append(properties.getProperty("_"+messageId));
                                              else
                                                      sb.append(messageId);
                                              sb.append(",");
                                      }

                                      Enumeration enuKeys = properties.keys();
                                      while (enuKeys.hasMoreElements())
                                      {
                                              String key = (String) 
enuKeys.nextElement();
                                              if(!key.startsWith("_"))
                                               {
                                                      
if(key.equalsIgnoreCase("FT"))
                                                      {
                                                              Matcher 
textMatcher = 
(Pattern.compile(properties.getProperty(key),Pattern.CASE_INSENSITIVE)).matcher(wholeMessage);
                                                              if 
(textMatcher.find())
                                                              {
                                                                 
sb.append(properties.getProperty("_size_key"));
                                                                 sb.append("=");
                                                                 String 
textValue=null;
                                                                 
textValue=(textMatcher.group(1)).toString();

                                                                 
if(textValue!="")
                                                                 {
                                                                      
sb.append(textValue.length());
                                                                      
                                                                      
//Checking the error string in text value
                                                                      String[] 
errorKeywords=(properties.getProperty("_Error_Keyword")).split(",");
                                                                        
                                                                      for(int 
p=0;p<errorKeywords.length;p++)
                                                                      {
                                                                        
if(textValue.contains(errorKeywords[p]))
                                                                          {
                                                                                
containsError=true;
                                                                                
break;
                                                                          }
                                                                       }
                                                                 }
                                                                 else
                                                                 {
                                                                      
sb.append(notApplicableConstant);
                                                                 }

                                                                 sb.append(",");

                                                              if(containsError) 
                
                                                              {
                                                                 for(int 
g=0;g<errorLoopCount;g++)
                                                                 {
                                                                      Matcher 
errorCodeMatcher = 
(Pattern.compile(properties.getProperty("_errorCode"+g),Pattern.CASE_INSENSITIVE)).matcher(textValue);
                                                                      if 
(errorCodeMatcher.find())
                                                                      {
                                                                         
sb.append(properties.getProperty("_error_key"));
                                                                         
sb.append("=");
                                                                         
sb.append(errorCodeMatcher.group(1));

                                                                         
Matcher errorDescMatcher = 
(Pattern.compile(properties.getProperty("_errorDesc"+g),Pattern.CASE_INSENSITIVE)).matcher(textValue);
                                                                         if 
(errorDescMatcher.find())
                                                                         {
                                                                              
sb.append("-");
                                                                              
sb.append(((errorDescMatcher.group(1)).toString()).trim());
                                                                         }
                                                                         
sb.append(",");
                                                                         
foundError="Yes";
                                                                         break;
                                                                      }
                                                                 }
                        
                                                                  
sb.append(properties.getProperty("_Error_Flag"));
                                                                  
sb.append("=");
                                                                  
sb.append("1");
                                                                  
sb.append(",");
                                                               }

                                                              
if(foundError.equalsIgnoreCase("No"))
                                                                 {
                                                                     
sb.append(properties.getProperty("_error_key"));
                                                                     
sb.append("=");
                                                                     
sb.append(notApplicableConstant);
                                                                     
sb.append(",");
                                                                 }
                                                              }

                                                              else
                                                              {
                                                                 
sb.append(properties.getProperty("_size_key"));
                                                                 sb.append("=");
                                                                 
sb.append(notApplicableConstant);
                                                                 sb.append(",");

                                                                 
sb.append(properties.getProperty("_error_key"));
                                                                 sb.append("=");
                                                                 
sb.append(notApplicableConstant);
                                                                 sb.append(",");
                                                              }
                                                      }
                                                      else 
if(key.equalsIgnoreCase("SE"))
                                                      {
                                                              Matcher 
serviceMatcher = 
(Pattern.compile(properties.getProperty(key),Pattern.CASE_INSENSITIVE)).matcher(wholeMessage);
                                                              if 
(serviceMatcher.find())
                                                              {
                                                                 String 
serviceValue=(serviceMatcher.group(1)).toString();
                                                                 
if(serviceValue.contains("_"))
                                                                 {
                                                                          
String[] serviceValueSplits = serviceValue.split("_");

                                                                          
sb.append(key);
                                                                          
sb.append("=");
                                                                          
sb.append(serviceValueSplits[0]);
                                                                          
sb.append(",");

                                                                          
sb.append(properties.getProperty("_Version_Key"));
                                                                          
sb.append("=");
                                                                          
sb.append(serviceValueSplits[1]);
                                                                          
sb.append(",");
                                                                 }
                                                                 else
                                                                 {
                                                                          
sb.append(key);
                                                                          
sb.append("=");
                                                                          
sb.append(serviceValue);
                                                                          
sb.append(",");

                                                                          
sb.append(properties.getProperty("_Version_Key"));
                                                                          
sb.append("=");
                                                                          
sb.append(notApplicableConstant);
                                                                          
sb.append(",");
                                                                 }
                                                              }
                                                      }

                                                      // Code added for 
capability extractions starts //
                                                      else 
if(key.equalsIgnoreCase("capabilityKey")){
                                                        
if(capabilityrequiredFlag.equalsIgnoreCase("true")){
                                                                
if(properties.getProperty("capabilityKey")!=null){
                                                                      
sb.append(properties.getProperty("capabilityKey"));
                                                                      
sb.append("=");
                                                                      
sb.append(matchedCapability);
                                                                      
sb.append(",");
                                                                }
                                                              }
                                                        }
                                                      // Code added for 
capability extraction ends

                                                      else
                                                      {        
                                                              Matcher 
allMatcher = 
(Pattern.compile(properties.getProperty(key),Pattern.CASE_INSENSITIVE)).matcher(wholeMessage);
                                                              if 
(allMatcher.find())
                                                              {
                                                                 sb.append(key);
                                                                 sb.append("=");
                                                                 
sb.append(allMatcher.group(1));
                                                                 sb.append(",");
                                                              }
                                                                                
                                      
                                                              else
                                                              {
                                                                  
sb.append(key);
                                                                  
sb.append("=");
                                                                  
sb.append(notApplicableConstant);
                                                                  
sb.append(",");
                                                              }
                                                      }
                                               }
                                      }

                                      if (sb.length() > 0){
                                              sb.setLength(sb.length() - 1);}

                              }
                              else if(dontFilterFlag.equalsIgnoreCase("true"))
                              {
                                      sb.append(m.getMessage());
                              }

                              
metaFileName=metaFileName.substring(metaFileName.lastIndexOf("/")+1,metaFileName.indexOf("."));

                              File dir = new 
File(pathOfMetaFile+"/"+capabilityName);
                              if (!dir.exists()){
                                   dir.mkdir();}

                              String file1Name=null;
                              
file1Name=pathOfMetaFile+"/"+capabilityName+"/"+metaFileName+"_META.txt";

                              File file1 = new File(file1Name);
                              if (!file1.exists()){
                                   file1.createNewFile();}

                              BufferedWriter bw1 = new BufferedWriter(new 
FileWriter(file1,true));
                              bw1.write(sb.toString());
                              bw1.newLine();
                              bw1.close();
                      } catch (FileNotFoundException e) {
                              
if(dontIndexInGraylogFlag.equalsIgnoreCase("true")){
                                      m.setFilterOut(true);}

                              System.out.println("Not able to find property 
file:"+e);
                      } catch (IOException e) {
                               
if(dontIndexInGraylogFlag.equalsIgnoreCase("true")){
                                      m.setFilterOut(true);}

                               System.out.println("IOException occured:"+e);

                               File dir1 = new 
File(pathOfMetaFile+"/"+capabilityName);
                               if (!dir1.exists()){
                                   dir1.mkdir();}

                               String file2Name=null;
                               
file2Name=pathOfMetaFile+"/"+capabilityName+"/error.txt";

                               File file2 = new File(file2Name);
                               if (!file2.exists()){
                                   file2.createNewFile();}

                               BufferedWriter bw2 = new BufferedWriter(new 
FileWriter(file2,true));
                               bw2.write(m.getMessage());
                               bw2.newLine();
                               bw2.close();
                      }

end

***************************************************************************************************


PropertiesCache.java (Available in directory 
/wls_domains/Graylog/GraylogServer/graylog-1.2.1/code)


package etc.code;


import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Set;
 
public class PropertiesCache
{
   private final Properties configProp = new Properties();
    
   private PropertiesCache()
   {
      //Private constructor to restrict new instances
      InputStream in = 
this.getClass().getClassLoader().getResourceAsStream("RoBT_CMPS_metaFileFields.properties");
      
      System.out.println("Read all properties from file");
      try {
          configProp.load(in);
          
      } catch (IOException e) {
          e.printStackTrace();
      }
   }
 
   private static class LazyHolder
   {
      private static final PropertiesCache INSTANCE = new PropertiesCache();
   }
 
   public static PropertiesCache getInstance()
   {
      return LazyHolder.INSTANCE;
   }
    
   public String getProperty(String key){
      return configProp.getProperty(key);
   }
    
   public Set<String> getAllPropertyNames(){
      return configProp.stringPropertyNames();
   }
    
   public boolean containsKey(String key){
      return configProp.containsKey(key);
   }
   
   public Properties getProperty(){
           return configProp;
   }
}

***************************************************************************************************

below is my classpath details (so that i have the directory and java class i am 
invoking is available in the classpath)

echo $CLASSPATH
/wls_domains/Graylog/GraylogServer/graylog-1.2.1/etc:/wls_domains/Graylog/GraylogServer/graylog-1.2.1/etc/code:/wls_domains/Graylog/GraylogServer/graylog-1.2.1/etc/code/PropertiesCache.java

Reply via email to