Skip to content

Commit

Permalink
Update README
Browse files Browse the repository at this point in the history
  • Loading branch information
tbouron committed Oct 26, 2016
1 parent 7024c84 commit 85f8b35
Showing 1 changed file with 98 additions and 0 deletions.
98 changes: 98 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,100 @@
# java-stack-parser
Parse Java stack traces and transform them into comprehensive JS objects

## Install

You can install this package either with `npm`, `yarn` or `bower`.

### npm / yarn

For npm:
```sh
~$ npm install java-stack-parser
```

For yarn:
```sh
~$ yarn add java-stack-parser
```

Then, you can `require('java-stack-parser')`, `import from 'java-stack-parser'` or include the library in your web page directly via a `<script>` tag
```html
<script src="/node_modules/java-stack-parser/lib/java-stack-parser.min.js"></script>
```

### bower

```sh
~$ bower install java-stack-parser
```

Then, you can include the library in your web page directly via a `<script>` tag
```html
<script src="/bower_components/java-stack-parser/lib/java-stack-parser.min.js"></script>
```

## Documentation

The library defines 3 objects:
- `Stack`: represents the full stacktrace. It is compose of a list of `StackGroup`s.
- `StackGroup` represents a group of consecutive `StackLine`s with the same `StackPackage`.
- `StackLine` represents a line of the full stacktrace, e.g. `at java.net.SocketInputStream.read(SocketInputStream.java:185)`.
- `StackPackage` represents the package of the current `StackLine`. Taking the `StackLine` above, the resulting `StackPackage` will be `java.net`.

### `Stack` Object

This object is used to parse and transform a string representing a Java stack trace. Here is an example of how to use it. Alternatively, you can check out [the working demo](http:https://codepen.io/tbouron/pen/wzOkwr/):
```js
import {Stack} from 'java-stack-parser';

let stacktrace = '...';
let stack = new Stack();

stack.parse(stacktrace);

// Display stack trace information into the console
stack.groups.forEach((group)=> {
if (group.exception) {
console.log('[' + group.exception.exception + '] ' + group.exception.message);
}
console.log('Package: ' + group.stackPackage.name + ' contains ' + group.lines.length + ' lines');
group.lines.forEach((line)=> {
console.log(line.javaClass + '.' + line.method + ' (Source: ' + line.source + ' at line: ' + line.line + ')');
});
});
```

The `Stack` object gives you the ability of defining your own "vendor" packages, resulting of a better grouping. For example, if your application uses 2 libraries with a groupId of `com.acme` and `my.library`, you can pass this as an optional parameter to the constructor:
```js
let stack = new Stack({
'My libraries': ['com.acme', 'my.library'],
"Java/Sun/Oracle": ["java", "javax", "sun", "sunw", "com.sun", "com.oracle"],
"Apache": ["org.apache"],
});
```
Now, if the stack trace contains consecutive lin with the package `com.acme` or `my.library`, they will be group under the same `StackGroup`.


## Development

To build the library in development mode (non-uglified, with a watch on the source) simply do:
```sh
~$ npm run dev
```

For the production version:
```sh
~$ npm run build
```

You can run tests and check the coverage with the following 2 commands:
```sh
# Run tests
~$ npm test
# Check covergae
~$ npm run coverage
```

## License

This library is released under [Apache 2.0 license](LICENSE)

0 comments on commit 85f8b35

Please sign in to comment.