package cn.edu.sjtu.omnilab.syslogcleanser.apps;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import cn.edu.sjtu.omnilab.syslogcleanser.wifilogfilter.Utils;
import org.apache.commons.io.FilenameUtils;
/**
* Separate the filtered logs (output by RawLogFilter.java) into individual users.
*
* @author chenxm
*
*/
public class UserSplitter {
public static void main(String[] args) throws IOException {
//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: UserSplitter -i <source> -o <destination>");
System.exit(-1);
}
// for statistics
long start = System.currentTimeMillis();
// split the raw data into individual users
System.out.println("Split syslogs into users...");
splitUsers(input_location, output_location);
// print time
System.out.println(String.format("Total time: %.3f sec",
(System.currentTimeMillis() - start)/1000.0));
}
/**
* Split the whole wifilogs into individual users.
*
* @param input
* @param output
* @throws IOException
*/
private static void splitUsers(String input, String output) throws IOException{
File[] files = Utils.getInputFiles(input);
Utils.createFolder(output);
Arrays.sort(files);
for ( File file : files){
long start = System.currentTimeMillis();
System.out.println(start/1000 + " " + file.getName());
String line = null;
BufferedReader iReader = new BufferedReader(new FileReader(file));
while ((line = iReader.readLine()) != null) {
String[] parts = line.split("\t", 2);
if (parts.length == 2){
String userMac = parts[0];
File outUserFile = Utils.createFile(FilenameUtils.concat(output, userMac));
FileWriter oFileWriter = new FileWriter(outUserFile, true);
oFileWriter.write(line + "\n");
oFileWriter.close();
}
}
iReader.close();
System.out.println(String.format(
"Elapsed time: %.3f sec",
(System.currentTimeMillis() - start)/1000.0));
}
}
}