Git Product home page Git Product logo

squash-client-java's Introduction

Squash Client Library: Java

This client library reports exceptions to Squash, the Squarish exception reporting and management system.

Documentation

For an overview of the various components of Squash, see the website documentation at https://github.com/SquareSquash/web.

Compatibility

This library is compatible with J2SE 1.6 or newer. All dependencies are handled by Maven.

Usage

The SquashEntry class is meant to be extended and then serialized with your choice of json library for transmission to your Squash server. We recommend using gson, but any auto-field-name-detecting library will do.

First, extend SquashEntry and include any additional occurrence data you wish to send to Squash. See the Occurrence class documentation in the Squash web code for a list of known properties; you can also supply any arbitrary properties as well.

import com.squareup.squash.SquashEntry;

public class AndroidSquashEntry extends SquashEntry implements LogEntry {
    // The API key used for all Android Squash entries.
    private static final String API_KEY = "YOUR_API_KEY";
    private static final String CLIENT_ID = "android";
    private static final String DEBUG = "Debug";
    private static final String RELEASE = "Release";
    // Transient so it doesn't try to serialize itself.
    private transient Gson gson;

    // Device stuff.
    private final String device_id;
    private final String device_type;
    private final String operating_system;
    private final boolean rooted;
    private final String network_operator;
    private final String network_type;
    private final String connectivity;
    private final String orientation;

    // Location stuff.
    private final String lat;
    private final String lon;
    private final String altitude;
    private final String location_precision;
    private final String heading;
    private final String speed;

    // Which app am I?
    private final String app_id;
}

Build a constructor or whatever you need to set all these parameters, and then add the ability for the class to transmit itself to Squash:

public class AndroidSquashEntry extends SquashEntry implements LogEntry {
    @Override public void writeTo(OutputStream output) throws IOException {
      final String json = gson.toJson(this);
      output.write(Strings.getBytes(json));
    }
}

Add an exception handler that will generate these entry instances. (In the below example we're assuming that you've also built a factory that instantiates Squash entries, and a transmit method that transmits the JSON to Squash.)

public class SquashUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
	@Inject AndroidSquashEntryFactory squashEntryFactory;
	
	@Override public void uncaughtException(Thread thread, Throwable ex) {
		try {
			transmit(squashEntryFactory.create(message, ex));
	    } catch (Throwable ignored) {
			// write your internal failsafe handler
	    }
	}
}

... and install the exception handler.

final Thread.UncaughtExceptionHandler handler =
	Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(
	new SquashUncaughtExceptionHandler(this, handler));

De-Obfuscation and File Paths

The Squash Java Deobfuscator Ruby gem can be included into your build-and-release process to upload yGuard or ProGuard obfuscation maps to Squash.

Even if you are not using code obfuscation, you can still use this gem to map Java class names to their original file paths, as Java stack traces do not include the full path to source files, which Squash needs to perform its Git-blame magic.

squash-client-java's People

Contributors

jakewharton avatar riscfuture avatar

Stargazers

Wade avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.