summaryrefslogtreecommitdiffstats
path: root/packages/arquillian-unit-tests/src/test/java/org/openecomp/mso/filesearching/LogFileSearching.java
blob: 2321b3fff04a4256f6307f9b8103903cc2f3831f (plain)
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;
	}
}