From 84f3dd2e61c33391e5284ba7382edd489a5280f0 Mon Sep 17 00:00:00 2001 From: parkotron Date: Mon, 10 Nov 2014 11:56:59 +0000 Subject: [PATCH 1/3] fix issue with longs being treated as doubles --- .../snowplowanalytics/snowplow/tracker/core/Tracker.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/Tracker.java b/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/Tracker.java index d7bf38a9..d9636927 100644 --- a/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/Tracker.java +++ b/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/Tracker.java @@ -93,14 +93,14 @@ public Tracker(Emitter emitter, Subject subject, String namespace, String appId, * @return A completed Payload */ protected Payload completePayload(Payload payload, List context, - double timestamp) { + long timestamp) { payload.add(Parameter.APPID, this.appId); payload.add(Parameter.NAMESPACE, this.namespace); payload.add(Parameter.TRACKER_VERSION, this.trackerVersion); // If timestamp is set to 0, generate one payload.add(Parameter.TIMESTAMP, - (timestamp == 0 ? Util.getTimestamp() : Double.toString(timestamp))); + (timestamp == 0 ? Util.getTimestamp() : Long.toString(timestamp))); // Encodes context data if (context != null) { @@ -176,7 +176,7 @@ public void trackPageView(String pageUrl, String pageTitle, String referrer, * @param timestamp Optional user-provided timestamp for the event */ public void trackPageView(String pageUrl, String pageTitle, String referrer, - double timestamp) { + long timestamp) { trackPageView(pageUrl, pageTitle, referrer, null, timestamp); } @@ -188,7 +188,7 @@ public void trackPageView(String pageUrl, String pageTitle, String referrer, * @param timestamp Optional user-provided timestamp for the event */ public void trackPageView(String pageUrl, String pageTitle, String referrer, - List context, double timestamp) { + List context, long timestamp) { // Precondition checks Preconditions.checkNotNull(pageUrl); Preconditions.checkArgument(!pageUrl.isEmpty(), "pageUrl cannot be empty"); From da6f867b54d5b5d9d3c613897249306e854d4035 Mon Sep 17 00:00:00 2001 From: parkotron Date: Thu, 13 Nov 2014 15:19:12 +0000 Subject: [PATCH 2/3] avoid a null issue on response --- build.gradle | 2 +- snowplow-java-tracker-core/build.gradle | 2 +- .../snowplow/tracker/core/Version.java | 4 ++-- .../snowplow/tracker/core/emitter/Emitter.java | 16 +++++++++------- .../snowplow/tracker/Version.java | 4 ++-- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index d6289d43..d090c415 100644 --- a/build.gradle +++ b/build.gradle @@ -26,7 +26,7 @@ dependencies { allprojects { apply plugin: 'java' group = 'com.snowplowanalytics' - version = '0.5.1' + version = '0.5.2-SNAPSHOT' repositories { // Use 'maven central' for resolving our dependencies mavenCentral() diff --git a/snowplow-java-tracker-core/build.gradle b/snowplow-java-tracker-core/build.gradle index 34b534c4..4ddca398 100644 --- a/snowplow-java-tracker-core/build.gradle +++ b/snowplow-java-tracker-core/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'java' apply plugin: 'maven-publish' group = 'com.snowplowanalytics' -version = '0.1.3' +version = '0.1.4-SNAPSHOT' // Where to find the dependencies of our project repositories { diff --git a/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/Version.java b/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/Version.java index 6040b656..18d1444b 100644 --- a/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/Version.java +++ b/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/Version.java @@ -14,6 +14,6 @@ package com.snowplowanalytics.snowplow.tracker.core; public class Version { - static final String TRACKER = "java-core-0.1.3"; - static final String VERSION = "0.1.3"; + static final String TRACKER = "java-core-0.1.4-SNAPSHOT"; + static final String VERSION = "0.1.4-SNAPSHOT"; } diff --git a/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/emitter/Emitter.java b/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/emitter/Emitter.java index 2d43cbd7..f1ea7931 100644 --- a/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/emitter/Emitter.java +++ b/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/emitter/Emitter.java @@ -160,11 +160,13 @@ public void flushBuffer() { LinkedList unsentPayloads = new LinkedList(); for (Payload payload : buffer) { - int status_code = sendGetData(payload).getStatusLine().getStatusCode(); - if (status_code == 200) - success_count++; - else + + HttpResponse response = sendGetData(payload); + if (response != null) { + if (response.getStatusLine().getStatusCode() == 200) success_count++; + } else { unsentPayloads.add(payload); + } } if (unsentPayloads.size() == 0) { @@ -186,8 +188,8 @@ else if (requestCallback != null) } postPayload.setData(eventMaps); - int status_code = sendPostData(postPayload).getStatusLine().getStatusCode(); - if (status_code == 200 && requestCallback != null) + HttpResponse response = sendPostData(postPayload); + if (response != null && response.getStatusLine().getStatusCode() == 200 && requestCallback != null) requestCallback.onSuccess(buffer.size()); else if (requestCallback != null){ unsentPayload.add(postPayload); @@ -260,7 +262,7 @@ protected HttpResponse sendGetData(Payload payload) { logger.error("Interruption error when sending HTTP GET request."); e.printStackTrace(); } catch (ExecutionException e) { - e.printStackTrace(); + logger.error("Error when sending HTTP GET error."); } return httpResponse; } diff --git a/src/main/java/com/snowplowanalytics/snowplow/tracker/Version.java b/src/main/java/com/snowplowanalytics/snowplow/tracker/Version.java index 4078abd1..da2ab50c 100644 --- a/src/main/java/com/snowplowanalytics/snowplow/tracker/Version.java +++ b/src/main/java/com/snowplowanalytics/snowplow/tracker/Version.java @@ -14,6 +14,6 @@ package com.snowplowanalytics.snowplow.tracker; public class Version { - static final String TRACKER = "java-0.5.1"; - static final String VERSION = "0.5.1"; + static final String TRACKER = "java-0.5.2-SNAPSHOT"; + static final String VERSION = "0.5.2-SNAPSHOT"; } From b7fa6283f29214a14e1bb202242e45c42a6198ee Mon Sep 17 00:00:00 2001 From: parkotron Date: Fri, 14 Nov 2014 18:00:39 +0000 Subject: [PATCH 3/3] updates --- build.gradle | 3 ++ snowplow-java-tracker-core/build.gradle | 3 ++ .../tracker/core/emitter/Emitter.java | 50 ++++++++++++++++--- 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index d090c415..9919a416 100644 --- a/build.gradle +++ b/build.gradle @@ -18,6 +18,9 @@ apply plugin: 'maven-publish' apply plugin: 'war' +sourceCompatibility = 1.6 +targetCompatibility = 1.6 + dependencies { compile project(':snowplow-java-tracker-core') runtime project(':snowplow-java-tracker-core') diff --git a/snowplow-java-tracker-core/build.gradle b/snowplow-java-tracker-core/build.gradle index 4ddca398..79ecf339 100644 --- a/snowplow-java-tracker-core/build.gradle +++ b/snowplow-java-tracker-core/build.gradle @@ -16,6 +16,9 @@ apply plugin: 'java' // As per http://www.gradle.org/docs/current/userguide/publishing_maven.html apply plugin: 'maven-publish' +sourceCompatibility = 1.6 +targetCompatibility = 1.6 + group = 'com.snowplowanalytics' version = '0.1.4-SNAPSHOT' diff --git a/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/emitter/Emitter.java b/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/emitter/Emitter.java index f1ea7931..0a3705d0 100644 --- a/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/emitter/Emitter.java +++ b/snowplow-java-tracker-core/src/main/java/com/snowplowanalytics/snowplow/tracker/core/emitter/Emitter.java @@ -26,6 +26,7 @@ import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.nio.client.CloseableHttpAsyncClient; import org.apache.http.impl.nio.client.HttpAsyncClients; +import org.apache.http.client.config.RequestConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,6 +55,13 @@ public class Emitter { protected RequestCallback requestCallback; protected HttpMethod httpMethod = HttpMethod.GET; + protected RequestConfig requestConfig = RequestConfig.custom() + .setConnectTimeout(1000) + .setSocketTimeout(1000) + .setConnectionRequestTimeout(1000) + .setStaleConnectionCheckEnabled(true) + .build(); + /** * Default constructor does nothing. */ @@ -107,7 +115,8 @@ public Emitter(String URI, HttpMethod httpMethod, RequestCallback callback) { } this.requestCallback = callback; this.httpMethod = httpMethod; - this.httpClient = HttpClients.createDefault(); + + this.httpClient = HttpClients.custom().setDefaultRequestConfig(requestConfig).build(); if (httpMethod == HttpMethod.GET) { this.setBufferOption(BufferOption.Instant); @@ -130,7 +139,7 @@ public void setBufferOption(BufferOption option) { */ public void setRequestMethod(RequestMethod option) { this.requestMethod = option; - this.httpAsyncClient = HttpAsyncClients.createDefault(); + this.httpAsyncClient = HttpAsyncClients.custom().setDefaultRequestConfig(requestConfig).build(); this.httpAsyncClient.start(); } @@ -215,7 +224,12 @@ protected HttpResponse sendPostData(Payload payload) { } else { httpResponse = httpClient.execute(httpPost); } - logger.debug(httpResponse.getStatusLine().toString()); + + if (httpResponse != null) { + logger.debug(httpResponse.getStatusLine().toString()); + } else { + logger.debug("HTTPResponse was null"); + } } catch (UnsupportedEncodingException e) { logger.error("Encoding exception with the payload."); e.printStackTrace(); @@ -227,15 +241,23 @@ protected HttpResponse sendPostData(Payload payload) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); + } finally { + try { + if (httpResponse != null) httpResponse.getEntity().getContent().close(); + httpPost.releaseConnection(); + } catch (IOException e) { + logger.error("Error when closing resource."); + } } + return httpResponse; } - @SuppressWarnings("unchecked") protected HttpResponse sendGetData(Payload payload) { HashMap hashMap = (HashMap) payload.getMap(); Iterator iterator = hashMap.keySet().iterator(); HttpResponse httpResponse = null; + HttpGet httpGet = null; while (iterator.hasNext()) { String key = iterator.next(); @@ -244,14 +266,21 @@ protected HttpResponse sendGetData(Payload payload) { } try { - HttpGet httpGet = new HttpGet(uri.build()); + httpGet = new HttpGet(uri.build()); if (requestMethod == RequestMethod.Asynchronous) { Future future = httpAsyncClient.execute(httpGet, null); httpResponse = future.get(); } else { httpResponse = httpClient.execute(httpGet); } - logger.debug(httpResponse.getStatusLine().toString()); + + if (httpResponse != null) { + logger.debug(httpResponse.getStatusLine().toString()); + } else { + logger.debug("HTTPResponse was null"); + } + } catch (org.apache.http.conn.HttpHostConnectException e) { + logger.error("Error when sending HTTP GET error."); } catch (IOException e) { logger.error("Error when sending HTTP GET error."); e.printStackTrace(); @@ -263,7 +292,16 @@ protected HttpResponse sendGetData(Payload payload) { e.printStackTrace(); } catch (ExecutionException e) { logger.error("Error when sending HTTP GET error."); + } finally { + try { + if (httpResponse != null) httpResponse.getEntity().getContent().close(); + if (httpGet != null) httpGet.releaseConnection(); + } catch (IOException e) { + logger.error("Error when closing resource."); + } } + + return httpResponse; } }