Updated the exception handler to work with redmine

you can now specify the app and tracker you want in the prop file

Change-Id: Iee3c36865e395f7f3491fb8b2d82d8fe9e0c4297
Signed-off-by: Ricky Barrette <rickbarrette@gmail.com>
This commit is contained in:
2012-02-19 15:47:16 -05:00
parent b2d89ba22f
commit c9da00f0cb
5 changed files with 29 additions and 20 deletions

2
ExceptionHandlerLib/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/gen
/bin

View File

@@ -1,19 +1,22 @@
# exceptionhandler.properties # exceptionhandler.properties
# This is the default Twenty Codes, LLC Exception Handler properties file # @author ricky barrette <rickbarrette@gmail.com>
# # @author twenty codes <twentycodes@gmail.com>
# This file must be included in the main project's assets folder
#
# @author Twenty Codes, LLC
# @author ricky barrette
# This file is used to tell the Exception Handler LIbrary how to file
# The following is for using our custom server based exception handler web application # new exception reports
# HTTP ONLY
#
# Place this file in you project's assets folder and edit as needed
#
# server is the physical web address for your server # server is the physical web address for your server
# file is the path to your filing script # file is the path to your filing script
# get is the path to your json retrieval script # get is the path to your json retrieval script
server = http://powers.doesntexist.com:666/testing # app is the redmine project name
file = /index.php?post=1 # tracker is the redmine tracker
#get = /index.php?get=1 server = http://rickbarrette.dyndns.org:8080/
file = redmine/exceptionhandler
app = test
tracker = Bug
# uncomment the following if you want your application to use email to file reports. # uncomment the following if you want your application to use email to file reports.
# if this is uncommented, email will always be used. # if this is uncommented, email will always be used.

View File

@@ -49,6 +49,8 @@ public class ExceptionHandler implements UncaughtExceptionHandler, Runnable {
private static final String TAG = "ExceptionHandler"; private static final String TAG = "ExceptionHandler";
private String mURL = null; private String mURL = null;
private String mEmail; private String mEmail;
private String mAppName;
private String mTracker;
/** /**
* Creates a new ExceptionHandler * Creates a new ExceptionHandler
@@ -143,6 +145,8 @@ public class ExceptionHandler implements UncaughtExceptionHandler, Runnable {
properties.load(inputStream); properties.load(inputStream);
this.mURL = properties.getProperty("server") + properties.getProperty("file"); this.mURL = properties.getProperty("server") + properties.getProperty("file");
this.mEmail = properties.getProperty("email"); this.mEmail = properties.getProperty("email");
this.mAppName = properties.getProperty("app");
this.mTracker = properties.getProperty("tracker");
} catch (IOException e) { } catch (IOException e) {
Log.e(TAG, "Failed to open exceptionhandler.properties"); Log.e(TAG, "Failed to open exceptionhandler.properties");
e.printStackTrace(); e.printStackTrace();
@@ -166,8 +170,8 @@ public class ExceptionHandler implements UncaughtExceptionHandler, Runnable {
public void uncaughtException(Thread t, Throwable e) { public void uncaughtException(Thread t, Throwable e) {
Log.d(TAG, "uncaughtException()"); Log.d(TAG, "uncaughtException()");
Log.d(TAG,"mURL = "+ this.mURL); // Log.d(TAG,"mURL = "+ this.mURL);
Log.d(TAG,"mEmail = "+ this.mEmail); // Log.d(TAG,"mEmail = "+ this.mEmail);
Date theDate = new Date(); Date theDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd_HH.mm.ss_zzz"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd_HH.mm.ss_zzz");
@@ -197,7 +201,7 @@ public class ExceptionHandler implements UncaughtExceptionHandler, Runnable {
} }
//generate the report //generate the report
this.mReport = new Report(mURL).generateReport(e.toString(), report.toString(), causereport.toString(), sdf.format(theDate), Build.FINGERPRINT, pi.versionName+"b"+pi.versionCode, mContext.getPackageName()); this.mReport = new Report(mURL).generateReport(e.toString(), report.toString(), causereport.toString(), sdf.format(theDate), Build.FINGERPRINT, pi.versionName+"b"+pi.versionCode, mAppName != null ? mAppName : mContext.getPackageName(), this.mTracker);
//try to send file contents via email (need to do so via the UI thread) //try to send file contents via email (need to do so via the UI thread)
if(this.mApp != null){ if(this.mApp != null){

View File

@@ -34,7 +34,7 @@ import android.os.Parcelable;
*/ */
public class Report implements Parcelable{ public class Report implements Parcelable{
private String mUrl; private final String mUrl;
private ArrayList<ReportItem> mReport; private ArrayList<ReportItem> mReport;
public static final Parcelable.Creator<Report> CREATOR = new Parcelable.Creator<Report>() { public static final Parcelable.Creator<Report> CREATOR = new Parcelable.Creator<Report>() {
@@ -82,7 +82,6 @@ public class Report implements Parcelable{
HttpClient httpclient = new DefaultHttpClient(); HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(mUrl); HttpPost httppost = new HttpPost(mUrl);
httppost.setEntity(new UrlEncodedFormEntity(getNameValuePairs())); httppost.setEntity(new UrlEncodedFormEntity(getNameValuePairs()));
//return the results //return the results
HttpResponse response = httpclient.execute(httppost); HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity(); HttpEntity entity = response.getEntity();
@@ -128,7 +127,7 @@ public class Report implements Parcelable{
* @return this * @return this
* @author ricky barrette * @author ricky barrette
*/ */
public Report generateReport(String msg, String stackTrace, String cause, String date, String device, String appVersion, String app){ public Report generateReport(String msg, String stackTrace, String cause, String date, String device, String appVersion, String app, String tracker){
this.mReport = new ArrayList<ReportItem>(); this.mReport = new ArrayList<ReportItem>();
this.mReport.add(new ReportItem("app",app)); this.mReport.add(new ReportItem("app",app));
this.mReport.add(new ReportItem("version",appVersion)); this.mReport.add(new ReportItem("version",appVersion));
@@ -137,6 +136,7 @@ public class Report implements Parcelable{
this.mReport.add(new ReportItem("stackTrace",stackTrace)); this.mReport.add(new ReportItem("stackTrace",stackTrace));
this.mReport.add(new ReportItem("cause",cause)); this.mReport.add(new ReportItem("cause",cause));
this.mReport.add(new ReportItem("device",device)); this.mReport.add(new ReportItem("device",device));
this.mReport.add(new ReportItem("tracker",tracker));
return this; return this;
} }

View File

@@ -14,7 +14,7 @@ import android.os.Parcelable;
* This will allow for our report items to stay in the proper order. * This will allow for our report items to stay in the proper order.
* @author ricky * @author ricky
*/ */
public class ReportItem implements Parcelable { public final class ReportItem implements Parcelable {
public static final Parcelable.Creator<ReportItem> CREATOR = new Parcelable.Creator<ReportItem>() { public static final Parcelable.Creator<ReportItem> CREATOR = new Parcelable.Creator<ReportItem>() {
public ReportItem createFromParcel(Parcel in) { public ReportItem createFromParcel(Parcel in) {
@@ -26,8 +26,8 @@ public class ReportItem implements Parcelable {
} }
}; };
private String mKey; private final String mKey;
private String mValue; private final String mValue;
/** /**
* Creates a new ReportItem * Creates a new ReportItem