/*******************************************************************************
* Copyright 2016 Observational Health Data Sciences and Informatics
*
* This file is part of WhiteRabbit
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package org.ohdsi.whiteRabbit;
import java.io.File;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;
import org.ohdsi.utilities.StringUtilities;
import org.ohdsi.utilities.files.WriteTextFile;
public class ErrorReport {
public static String generate(String folder, Exception e) {
String filename = folder + "/Error.txt";
int i = 1;
while (new File(filename).exists())
filename = folder + "/Error" + (i++) + ".txt";
DecimalFormat df = new DecimalFormat();
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setGroupingSeparator(',');
df.setDecimalFormatSymbols(dfs);
WriteTextFile out = new WriteTextFile(filename);
out.writeln("*** Generic error information ***");
out.writeln("Message: " + e.getMessage());
out.writeln("Time: " + StringUtilities.now());
Runtime runTime = Runtime.getRuntime();
out.writeln("Processor type: " + System.getProperty("sun.cpu.isalist"));
out.writeln("Available processors: " + runTime.availableProcessors());
out.writeln("Maximum available memory: " + df.format(runTime.maxMemory()) + " bytes");
out.writeln("Used memory: " + df.format(runTime.totalMemory() - runTime.freeMemory()) + " bytes");
out.writeln("Java version: " + System.getProperty("java.version"));
out.writeln("Java vendor: " + System.getProperty("java.vendor"));
out.writeln("OS architecture: " + System.getProperty("os.arch"));
out.writeln("OS name: " + System.getProperty("os.name"));
out.writeln("OS version: " + System.getProperty("os.version"));
out.writeln("OS patch level: " + System.getProperty("sun.os.patch.level"));
out.writeln("");
out.writeln("*** Stack trace ***");
for (StackTraceElement element : e.getStackTrace())
out.writeln(element.toString());
out.writeln("");
out.writeln("*** Console ***");
out.writeln(ObjectExchange.console.getText());
out.writeln("");
out.writeln("*** Working folder contents ***");
out.writeln("Directory of " + folder);
out.writeln("");
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
File[] files = new File(folder).listFiles();
Arrays.sort(files, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return Long.valueOf(o1.lastModified()).compareTo(o2.lastModified());
}
});
for (File file : files) {
String name = file.getName();
String length = df.format(file.length());
String dir = file.isDirectory() ? "<DIR>" : " ";
String modifiedDate = sdf.format(new Date(file.lastModified()));
StringBuilder filler = new StringBuilder();
for (int x = 0; x < (80 - name.length() - length.length()); x++)
filler.append(' ');
out.writeln(name + filler.toString() + length + " " + dir + " " + modifiedDate);
}
out.writeln("");
out.writeln("Available disc space: " + df.format(new File(folder).getFreeSpace()) + " bytes");
out.close();
return filename;
}
}