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 ,[Note; Statements in bold indicate the
> class i am trying to invoke]
>
DRL file is in the below path
/wls_domains/Graylog/GraylogServer/graylog-1.2.1/etc
************************************************************************************************************************************************************************************************************************
DRL file (Graylog.DRL) :
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 {
*
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("&gt;",">").replace(">",">").replace("&lt;","<").replace("<","<").replace(""","\"").replace("'","\'");
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
*********************************************************************************************************************************************************************************************************
Singleton PropertiesCache class which i am trying to import
PropertiesCache.java ( is in this 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;
}
}
***********************************************************************************************************************************************************************************************************************************************
I have exported my classpath to reflect the below classpath export
CLASSPATH=/wls_domains/Graylog/GraylogServer/graylog-1.2.1/etc/code/PropertiesCache.java;
ECHO $CLASSPATH value is 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
I am not sure whether what i am trying to achieve is possible within
graylog drools engine setup and if its a drools issue/environment issue or
a graylog issue . Please advice if you have any insights
--
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/graylog2/0ab6fc47-7a10-4c9d-842c-6bbcbd47da75%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.