package cn.edu.sjtu.omnilab.syslogcleanser.apps;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.ParseException;
import java.util.LinkedList;
import java.util.List;
import cn.edu.sjtu.omnilab.syslogcleanser.wifilogfilter.SessionExtraction;
import cn.edu.sjtu.omnilab.syslogcleanser.wifilogfilter.Utils;
import org.apache.commons.io.FilenameUtils;
/**
* This class extracts wifi sessions from filtered wifi logs.
*
* Input format: Filtered Aruba syslog output by RawLogFilter.java.
* Output format: SessionInfo (usermac, STime, ETime, Dur, AP)
*
* @author chenxm
*/
public class SessionExtractor {
public static void main(String[] args) throws IOException, ParseException {
// Initial options
String input_location = "";
String output_location = "";
// fetch command line options
int optSetting = 0;
for (; optSetting < args.length; optSetting++) {
if ("-i".equals(args[optSetting])) {
input_location = args[++optSetting];
} else if ("-o".equals(args[optSetting])) {
output_location = args[++optSetting];
}
}
if (input_location.length() == 0) {
System.out.println("Usage: SessionExtractor -i <source> -o <destination>>");
System.exit(-1);
}
// for statistics
long start = System.currentTimeMillis();
// reading filtered files one by one to extract user sessions
System.out.println("Extracting user trace sessions from raw logs ...");
Utils.createFolder(output_location);
File[] user_files = Utils.getInputFiles(input_location);
for (File file : user_files) {
String umac = file.getName();
System.out.println(System.currentTimeMillis() + " " + umac);
// read the file
BufferedReader reader = new BufferedReader(new FileReader(file));
String thisLine = "";
List<String> allLines = new LinkedList<String>();
// read each line
while ((thisLine = reader.readLine()) != null) {
thisLine = thisLine.replaceAll("[\\r\\n]", "");
if (thisLine.length() == 0) {
continue;
}
allLines.add(thisLine);
}
// extract session and save to file
allLines = SessionExtraction.extractSessions(allLines);
// write into file
BufferedWriter bw = new BufferedWriter(
new FileWriter(FilenameUtils.concat(output_location, umac)));
for (String l : allLines)
bw.write(l + "\n");
bw.close();
reader.close();
}
System.out.println(String.format("Total time: %.3f sec",
(System.currentTimeMillis() - start) / 1000.0));
}
}