package com.github.jamesnorris.ablockalypse;
public class Tracker {
private String application, version, reportLink;
private int totalFatality, maxFatality = 100;
public Tracker(String application, String version, String reportLink, int maxFatality) {
this.application = application;
this.version = version;
this.reportLink = reportLink;
this.maxFatality = maxFatality;
}
public void error(String reason, int fatality) {
error(reason, fatality, null);
}
public void error(String reason, int fatality, Exception ex) {
totalFatality += fatality;
System.err.println("An aspect of " + application + " is broken, please report it at: \n" + reportLink + " \n" + "--------------------------[ERROR REPORT]--------------------------\n" + "VERSION: " + version + " \n" + "BREAK REASON: " + reason + " \n" + "------------------------------------------------------------------\n" + "ERROR STACKTRACE: \n");
ex.printStackTrace();
System.out.println("------------------------------------------------------------------\n" + "FATALITY: " + fatality + " \n" + "TOTAL FATALITY: " + totalFatality + " / " + maxFatality + " \n" + "---------------------------[END REPORT]---------------------------\n");
if (totalFatality >= maxFatality) {
System.err.print(application + " has reached the maximum fatality level allowed. It will now kill itself to prevent more serious or recurring errors.\n");
}
}
public int getMaxFatality() {
return maxFatality;
}
public String getReportLink() {
return reportLink;
}
public int getTotalFatality() {
return totalFatality;
}
public void setMaxFatality(int maxFatality) {
this.maxFatality = maxFatality;
}
protected String stackTraceToString(StackTraceElement[] elements) {
String total = "";
for (StackTraceElement element : elements) {
total += element.toString() + "\n";
}
return total;
}
}