package hudson.plugins.logparser;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import java.util.regex.Pattern;
public final class LogParserUtils {
public static String[] readParsingRules(final String parsingRulesPath) throws FileNotFoundException , IOException {
final StringBuffer result = new StringBuffer("");
final BufferedReader reader = new BufferedReader(new FileReader(parsingRulesPath));
String line = null;
while ((line=reader.readLine()) != null) {
result.append(line);
result.append('\n');
}
reader.close();
return result.toString().split("\n");
}
public static boolean skipParsingRule(final String parsingRule){
boolean skip = false;
if (parsingRule == null ||
parsingRule.equals("") ||
parsingRule.charAt(0) == '#' ||
parsingRule.startsWith("\\s") ||
parsingRule.startsWith("\r") ||// Carriage return
parsingRule.contains("$header")) { // for now - disregard rules with header in them
skip = true;
}
return skip;
}
public static String standardizeStatus(final String status){
String result = status;
if (result.equalsIgnoreCase("ok")) {
result = LogParserConsts.NONE;
}
else if (result.equalsIgnoreCase("end") ) {
result = LogParserConsts.INFO;
}
else if (result.equalsIgnoreCase("warn") ||
result.equalsIgnoreCase("end") ) {
result = LogParserConsts.WARNING;
}
else {
result = result.toUpperCase(Locale.ENGLISH);
}
// If some non-existent status is in the configuration - disregard it
final List<String> legals = LogParserConsts.LEGAL_STATUS;
if (!legals.contains(result)) {
result = LogParserConsts.DEFAULT;
}
return result;
}
public static Pattern[] compilePatterns(final String[] parsingRulesArray) {
Pattern[] result = new Pattern[parsingRulesArray.length];
for (int i=0;i<parsingRulesArray.length;i++){
final String parsingRule = parsingRulesArray[i];
result[i] = null;
if (!skipParsingRule(parsingRule)) {
final String ruleParts[] = parsingRule.split("\\s");
String regexp = ruleParts[1];
final int firstDash = parsingRule.indexOf('/');
final int lastDash = parsingRule.lastIndexOf('/');
if (firstDash != -1 && firstDash != -1){
regexp = parsingRule.substring(firstDash+1, lastDash);
final Pattern p = Pattern.compile(regexp);
result[i] = p;
}
}
}
return result;
}
public static String getSectionCountKey(final String status,final int sectionNumber) {
return Integer.toString(sectionNumber)+"-"+status;
}
private LogParserUtils() {
// PMD warning to use singleton or bypass by private empty constructor
}
}