1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
package org.openecomp.mso.filesearching;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class LogFileSearching {
private static PrintWriter writer;
public static void initFile(String filePath) {
if (writer == null) {
try {
// This is to reopen an existing file
writer = new PrintWriter(new FileOutputStream(filePath,true));
} catch ( IOException e) {
System.out.println("Exception caught when trying to open the file /tmp/mso-log-checker.log to dump the result");
e.printStackTrace();
}
}
}
public static void closeFile() {
if (writer != null) {
writer.close();
writer = null;
}
}
public static boolean searchInFile(final String needle, final File file) throws FileNotFoundException {
Scanner logScanner = new Scanner(file);
try {
writer.println("Searching pattern " + needle + " in " + file.getAbsolutePath());
//System.out.println("Searching pattern " + needle + " in " + file.getAbsolutePath());
String filedata = logScanner.useDelimiter("\\Z").next();
int occurrences = 0;
int index = 0;
while (index < filedata.length() && (index = filedata.indexOf(needle, index)) >= 0) {
occurrences++;
int separatorIndex = filedata.indexOf(System.getProperty("line.separator"), index);
if (separatorIndex >=0){
writer.println("FOUND:" + filedata.substring(index, separatorIndex));
//System.out.println("FOUND:"
// + filedata.substring(index, separatorIndex));
} else {
writer.println("FOUND:" + filedata.substring(index, filedata.length()-1));
//System.out.println("FOUND:"
// + filedata.substring(index, filedata.length()-1));
}
index += needle.length();
}
writer.println("TOTAL:" + occurrences + " FOUND");
//System.out.println("TOTAL:" + occurrences + " FOUND");
if (occurrences > 0) {
return true;
} else {
return false;
}
} catch (NoSuchElementException e) {
writer.println("TOTAL:0 FOUND");
//System.out.println("TOTAL:0 FOUND");
return false;
} finally {
logScanner.close();
}
}
public static boolean searchInDirectory(final String needle, final File directory) throws FileNotFoundException {
boolean res = false;
String[] dirFiles = directory.list();
if (dirFiles != null) {
for (String dir : dirFiles) {
res = res || searchInDirectory(needle, new File(directory.getAbsolutePath() + "/" + dir));
}
} else {
return LogFileSearching.searchInFile(needle, directory);
}
return res;
}
public static boolean searchInDirectoryForCommonIssues(final String[] needles, final File directory) throws FileNotFoundException {
String[] defaultPatternsToUse = {"ClassNotFound","NullPointer","RuntimeException","IllegalStateException","FATAL"};
if (needles != null && needles.length>0) {
defaultPatternsToUse=needles;
}
boolean returnValue=false;
for (String needle:defaultPatternsToUse) {
returnValue |= LogFileSearching.searchInDirectory(needle,directory);
}
return returnValue;
}
}
|