Permalink
Browse files

Merge branch 'refactoring' into master

  • Loading branch information...
roam committed Jan 20, 2013
2 parents 42c58fc + 82ee6e7 commit f4982f5eca6bc3149854b408436c1847ed0a0729
Showing with 5,174 additions and 64 deletions.
  1. +3 −1 .gitignore
  2. +235 −0 README.md
  3. 0 { → old}/README.rst
  4. +124 −0 old/pom.xml
  5. +1 −1 { → old}/src/main/java/net/kencochrane/sentry/RavenClient.java
  6. 0 { → old}/src/main/java/net/kencochrane/sentry/RavenConfig.java
  7. +18 −0 { → old}/src/main/java/net/kencochrane/sentry/RavenUtils.java
  8. +0 −1 { → old}/src/main/java/net/kencochrane/sentry/SentryAppender.java
  9. 0 { → old}/src/main/java/net/kencochrane/sentry/SentryQueue.java
  10. 0 { → old}/src/main/java/net/kencochrane/sentry/SentryWorker.java
  11. +0 −1 { → old}/src/test/java/net/kencochrane/sentry/PerformanceTest.java
  12. 0 { → old}/src/test/java/net/kencochrane/sentry/RavenConfigTest.java
  13. +0 −1 { → old}/src/test/java/net/kencochrane/sentry/SentryClientTest.java
  14. 0 { → old}/src/test/java/net/kencochrane/sentry/SentryExample.java
  15. +1 −1 { → old}/src/test/resources/log4j_configuration.txt
  16. +10 −58 pom.xml
  17. +22 −0 raven-integration-tests/README.md
  18. +111 −0 raven-integration-tests/pom.xml
  19. +187 −0 raven-integration-tests/src/main/java/net/kencochrane/raven/SentryApi.java
  20. +2 −0 raven-integration-tests/src/main/resources/Procfile
  21. BIN raven-integration-tests/src/main/resources/boot_sentry.db
  22. +49 −0 raven-integration-tests/src/main/resources/default_config.py
  23. +5 −0 raven-integration-tests/src/main/resources/run_sentry.sh
  24. +145 −0 raven-integration-tests/src/test/java/net/kencochrane/raven/integration/ClientTest.java
  25. +35 −0 raven-integration-tests/src/test/java/net/kencochrane/raven/integration/IntegrationContext.java
  26. +153 −0 ...egration-tests/src/test/java/net/kencochrane/raven/integration/log4j/AsyncSentryAppenderTest.java
  27. +148 −0 ...n-integration-tests/src/test/java/net/kencochrane/raven/integration/log4j/SentryAppenderTest.java
  28. +15 −0 raven-integration-tests/src/test/resources/asyncsentryappender.log4j.properties
  29. +23 −0 raven-integration-tests/src/test/resources/sentryappender.log4j.properties
  30. +65 −0 raven-log4j/pom.xml
  31. +76 −0 raven-log4j/src/main/java/net/kencochrane/raven/log4j/AsyncSentryAppender.java
  32. +39 −0 raven-log4j/src/main/java/net/kencochrane/raven/log4j/Log4jMDC.java
  33. +173 −0 raven-log4j/src/main/java/net/kencochrane/raven/log4j/SentryAppender.java
  34. +182 −0 raven-log4j/src/test/java/net/kencochrane/raven/log4j/AsyncSentryAppenderTest.java
  35. +250 −0 raven-log4j/src/test/java/net/kencochrane/raven/log4j/SentryAppenderTest.java
  36. +24 −0 raven-log4j/src/test/resources/asyncsentryappender-no-dsn.log4j.properties
  37. +23 −0 raven-log4j/src/test/resources/asyncsentryappender.log4j.properties
  38. +24 −0 raven-log4j/src/test/resources/sentryappender-no-dsn.log4j.properties
  39. +23 −0 raven-log4j/src/test/resources/sentryappender.log4j.properties
  40. +77 −0 raven/pom.xml
  41. +203 −0 raven/src/main/java/net/kencochrane/raven/AsyncTransport.java
  42. +492 −0 raven/src/main/java/net/kencochrane/raven/Client.java
  43. +127 −0 raven/src/main/java/net/kencochrane/raven/Events.java
  44. +412 −0 raven/src/main/java/net/kencochrane/raven/SentryDsn.java
  45. +301 −0 raven/src/main/java/net/kencochrane/raven/Transport.java
  46. +108 −0 raven/src/main/java/net/kencochrane/raven/Utils.java
  47. +35 −0 raven/src/main/java/net/kencochrane/raven/ext/RavenServletRequestListener.java
  48. +137 −0 raven/src/main/java/net/kencochrane/raven/ext/ServletJSONProcessor.java
  49. +47 −0 raven/src/main/java/net/kencochrane/raven/spi/JSONProcessor.java
  50. +70 −0 raven/src/main/java/net/kencochrane/raven/spi/RavenMDC.java
  51. +57 −0 raven/src/test/java/net/kencochrane/raven/AsyncTransportTest.java
  52. +53 −0 raven/src/test/java/net/kencochrane/raven/ClientExample.java
  53. +237 −0 raven/src/test/java/net/kencochrane/raven/ClientSetupTest.java
  54. +167 −0 raven/src/test/java/net/kencochrane/raven/HttpTransportTest.java
  55. +70 −0 raven/src/test/java/net/kencochrane/raven/JSONProcessorTest.java
  56. +150 −0 raven/src/test/java/net/kencochrane/raven/SentryDsnTest.java
  57. +92 −0 raven/src/test/java/net/kencochrane/raven/UdpTransportTest.java
  58. +17 −0 raven/src/test/java/net/kencochrane/raven/UtilsTest.java
  59. +152 −0 raven/src/test/java/net/kencochrane/raven/ext/ServletJSONProcessorTest.java
  60. +4 −0 raven/src/test/resources/java.util.logging.properties
View
@@ -1,6 +1,8 @@
*.DS_Store
out/*
target/*
+**/target/*
.idea/*
*.iml
-example.log
+example.log
+raven-integration-tests/src/main/resources/sentry.db
View
235 README.md
@@ -0,0 +1,235 @@
+# Raven-Java
+
+Raven-Java is a Java client for [Sentry](https://www.getsentry.com/). Besides a regular client you can use within your application code, Raven-Java also provides the `raven-log4j` package you can use to send logging to Sentry via [log4j](http://logging.apache.org/log4j/).
+
+Raven-Java supports both HTTP(S) and UDP transport of messages.
+
+## Sentry Versions Supported
+This client supports Sentry protocol version 2.0 (which is Sentry >= 2.0).
+
+Since version 4.6.0 of Sentry, signed messages have been deprecated. If you still use an earlier version, have a look at the client options below to find out how to enable signed messages.
+
+* * *
+
+## Using the client
+
+````java
+import net.kencochrane.raven.Client
+import net.kencochrane.raven.SentryDsn
+
+public class Example {
+
+ public static void main(String[] args) {
+ // The DSN from Sentry: "http://public:private@host:port/1"
+ String rawDsn = args[0];
+ SentryDsn dsn = SentryDsn.build(rawDsn);
+ Client = new Client(dsn);
+ client.captureMessage("Hello from Raven-Java!");
+ }
+
+}
+
+````
+
+A full example is available in `raven/src/main/test/net/kencochrane/raven/ClientExample`.
+
+Note that `SentryDsn` will first examine the environment variables and system properties for a variable called `SENTRY_DSN`. If such a variable is available, *that* value will be used instead of the DSN you supply (the `rawDsn` variable in the example above).
+
+This allows flexible usage of the library on PaaS providers such as Heroku. This also means the above example can be simplified to the following *if* you specify `SENTRY_DSN` in your:
+
+- environment variables — e.g. `export SENTRY_DSN=yoursentrydsn` or `setenv SENTRYDSN yoursentrydsn`; or
+- system properties — `-DSENTRY_DSN=yoursentrydsn`
+
+````java
+import net.kencochrane.raven.Client
+import net.kencochrane.raven.SentryDsn
+
+public class Example {
+
+ public static void main(String[] args) {
+ // DSN is determined by the client from system properties or env
+ Client = new Client();
+ client.captureMessage("Hello from Raven-Java!");
+ }
+
+}
+
+````
+
+* * *
+
+## Using the log4j appender
+You can either utilize the `net.kencochrane.raven.log4j.SentryAppender` or `net.kencochrane.raven.log4j.AsyncSentryAppender` as an appender in your log4j configuration just like you would use any other appender.
+
+ log4j.appender.sentry=net.kencochrane.raven.log4j.SentryAppender
+ log4j.appender.sentry.sentryDsn=http://b4935bdd7862409:7a37d9ad47654281@localhost:8000/1
+
+Like the client, these appenders will examine the system properties and environment variables for a better `SENTRY_DSN` candidate. Which log messages are ultimately sent to your Sentry instance, depends on the configuration of your Sentry appender. If you only want to send error messages, use the following:
+
+ log4j.appender.sentry.Threshold=ERROR
+
+### Asynchronous logging
+If you use log4j's XML configuration, you can use its [AsyncAppender](http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/AsyncAppender.html) to wrap Raven-Java's `SentryAppender`.
+
+But even if you use a properties file to configure log4j, you can log asynchronously by using the `net.kencochrane.raven.log4j.AsyncSentryAppender` instead.
+
+* * *
+
+## Client configuration
+Client configuration is completely driven through the Sentry DSN. The DSN you can copy-paste from your Sentry instance looks like this:
+
+ http://public:private@host:port/1
+
+Changing the behavior of the client is done through the *scheme* and *querystring* of the DSN.
+
+### Transport protocols
+
+#### HTTPS
+If you're using https, your DSN should look like this:
+
+ https://public:private@host:port/1
+
+#### Naive HTTPS
+If you're using https with a wildcard certificate (which most Java versions can't handle) and you're too lazy
+to add the certificate to your truststore, you can tell the client to be naive and allow it to ignore the
+hostname verification:
+
+ naive+https://public:private@host:port/1
+
+#### UDP
+Prefer udp? Change your DSN to this:
+
+ udp://public:private@host:port/1
+
+#### Asynchronous
+The client can use a separate thread to actually send the messages to Sentry. To enable this feature, add `async+` to the scheme in your DSN:
+
+ async+http://public:private@host:port/1
+ # Or
+ async+https://public:private@host:port/1
+ # Or
+ async+naive+https://public:private@host:port/1
+ # Or
+ async+udp://public:private@host:port/1
+
+#### Adding other schemes
+You can add your own custom transport and scheme through the `register` method of the client.
+
+### Client options
+More client configuration can be specified through the querystring of the DSN like this:
+
+ http://public:private@host:port/1?optionA=true&optionB=20
+
+#### Enabling signed messages
+Signed messages have been deprecated in Sentry 4.6.0. If you're using an earlier version, you'll have to tell the client to sign messages through the option `raven.includeSignature`:
+
+ http://public:private@host:port/1?raven.includeSignature=true
+
+#### HTTP/HTTPS timeout
+The default timeout for HTTP/HTTPS transport is set to 10 seconds. If you want to change this value, use the `raven.timeout` option to specify the timeout in milliseconds.
+
+ http://public:private@host:port/1?raven.timeout=10000
+
+#### Async queue configuration
+When using the async transport (this is not the same as using the `AsyncSentryAppender`), you can configure the behavior of the underlying `java.util.concurrent.BlockingQueue` through the `raven.waitWhenFull` and `raven.capacity` options.
+
+By default the client will **not** block when the queue is full and will use a queue at maximum capacity. If instead you want to use a blocking queue with a capacity of 20 messages, change your DSN to something like this:
+
+ async+http://public:private@host:port/1?raven.waitWhenFull=true&raven.capacity=20
+
+#### Enabling ServletJSONProcessor
+In a servlet environment, Raven can append request information to logs sent to Sentry when logs are created on request threads. Information sent to Sentry include:
+
+* Request URL
+* POST parameters
+* Request headers
+* Cookies
+* Environment variables, including:
+ * Remote address
+ * Server name
+ * Server port
+ * Server protocol
+
+Please be aware that sensitive information, such as user passwords or credit card numbers, may potentially be logged. Common security measures, such as protecting the Sentry installation, should be practiced. To enable this support, add the following line to Log4j configuration:
+
+ log4j.appender.sentry.jsonProcessors=net.kencochrane.raven.ext.ServletJSONProcessor
+
+Then, add the following lines to web.xml:
+
+ <listener>
+ <listener-class>
+ net.kencochrane.raven.ext.RavenServletRequestListener
+ </listener-class>
+ </listener>
+
+* * *
+
+## Installation
+
+This version isn't available in the Central Maven repository yet. The easiest
+way to get started is to clone this repository and install the artifacts into
+your local repository or proxy like Nexus:
+
+ $ git clone https://github.com/kencochrane/raven-java.git
+ $ cd raven-java
+ $ mvn clean install
+
+This will build and test the Raven client and Log4J appender and install it
+into your local repository. You shouldn't worry about stacktraces appearing in
+the output unless tests are failing; they are *supposed* to be there.
+
+Then add the correct dependency to your POM file:
+
+ <dependency>
+ <groupId>net.kencochrane</groupId>
+ <artifactId>raven</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ </dependency>
+
+Or if you simply want to log to Sentry from Log4J:
+
+ <dependency>
+ <groupId>net.kencochrane</groupId>
+ <artifactId>raven-log4j</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ </dependency>
+
+* * *
+
+## History
+
+- 2.0-SNAPSHOT
+ - Version increment to reduce confusion about releases
+- 1.0
+ - Rewrite
+ - Support tags
+ - Added support for JSON processors (see bundled `ServletJSONProcessor`)
+- 0.6
+ - Added support for sending messages through UDP
+- 0.5
+ - Added async support
+ - Fixed issue with parsing of path and port in DSN
+- 0.4
+ - Added the ability to get the SENTRY_DSN from the ENV
+ - Added RavenClient.captureMessage
+ - Added RavenClient.captureException
+- 0.3
+ - Added Maven support
+ - Merged with log4sentry project by Kevin Wetzels
+ - Added Proxy support
+ - Added full stack trace to logs
+
+- 0.2
+ - code refactor and cleanup
+
+- 0.1
+ - initial version
+
+
+## Contributors
+
+- Ken Cochrane (@KenCochrane)
+- Kevin Wetzels (@roambe)
+- David Cramer (@zeeg)
+- Mark Philpot (@griphiam)
+- Brad Chen (@vvasabi)
File renamed without changes.
View
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>net.kencochrane</groupId>
+ <artifactId>raven-java</artifactId>
+ <version>0.6-SNAPSHOT</version>
+ <packaging>jar</packaging>
+ <name>raven-java</name>
+ <description>Java Raven client and log4j appender.</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.5</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>1.6</version>
+ </dependency>
+ <dependency>
+ <groupId>com.googlecode.json-simple</groupId>
+ <artifactId>json-simple</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.16</version>
+ </dependency>
+ <dependency>
+ <groupId>com.googlecode.jmockit</groupId>
+ <artifactId>jmockit</artifactId>
+ <version>0.999.12</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.3.2</version>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ <encoding>UTF-8</encoding>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.5</version>
+ <configuration>
+ <encoding>UTF-8</encoding>
+ <outputDirectory/>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.3</version>
+ <configuration>
+ <descriptorRefs>
+ <descriptorRef>jar-with-dependencies</descriptorRef>
+ </descriptorRefs>
+ </configuration>
+ <executions>
+ <execution>
+ <id>make-assembly</id> <!-- this is used for inheritance merges -->
+ <phase>package</phase> <!-- bind to the packaging phase -->
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+
+ <resources>
+ <resource>
+ <directory>${basedir}/src/main/java</directory>
+ <includes>
+ <include>**/*.json</include>
+ <include>**/*.yml</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>${basedir}/src/main/resources</directory>
+ <includes>
+ <include>**/*.*</include>
+ </includes>
+ </resource>
+ </resources>
+
+ <testResources>
+ <testResource>
+ <directory>${basedir}/src/test/java</directory>
+ <includes>
+ <include>**/*.json</include>
+ <include>**/*.yml</include>
+ <include>**/*.txt</include>
+ </includes>
+ </testResource>
+ <testResource>
+ <directory>${basedir}/src/test/resources</directory>
+ <includes>
+ <include>**/*.*</include>
+ </includes>
+ </testResource>
+ </testResources>
+ </build>
+
+</project>
@@ -21,7 +21,7 @@
public class RavenClient {
- private static final String RAVEN_JAVA_VERSION = "Raven-Java 0.6";
+ public static final String RAVEN_JAVA_VERSION = "Raven-Java 0.6";
private RavenConfig config;
private String sentryDSN;
private String lastID;
Oops, something went wrong.

0 comments on commit f4982f5

Please sign in to comment.