com.groupbyinc.common.directbeacon.DirectBeaconClientTask Maven / Gradle / Ivy
package com.groupbyinc.common.directbeacon;
import com.fasterxml.jackson.Mappers;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.SocketTimeoutException;
import java.net.URI;
import java.nio.charset.Charset;
@SuppressWarnings("WeakerAccess")
public class DirectBeaconClientTask implements Runnable {
private static final transient Logger LOG = LoggerFactory.getLogger(DirectBeaconClientTask.class);
private static final Charset UTF8 = Charset.forName("UTF-8");
private static final String APPLICATION_JSON = "application/json";
private final URI uri;
private final HttpClient httpClient;
private final String authToken;
private DirectBeacon beacon;
public DirectBeaconClientTask(HttpClient httpClient, URI uri, DirectBeacon beacon, String authToken) {
this.uri = uri;
this.httpClient = httpClient;
this.beacon = beacon;
this.authToken = authToken;
}
public void run() {
HttpEntity responseEntity = null;
try {
String json = Mappers.writeValueAsString(beacon);
StringEntity entity = new StringEntity(json, UTF8);
entity.setContentType(APPLICATION_JSON);
HttpPost post = new HttpPost(uri);
post.setEntity(entity);
post.setHeader("Authorization", authToken);
HttpResponse response = httpClient.execute(post);
responseEntity = response.getEntity();
StatusLine statusLine = response.getStatusLine();
LOG.trace("Got: {}", statusLine.getStatusCode());
} catch (SocketTimeoutException e) {
LOG.trace("Dropped beacon: {}", e.getMessage());
} catch (Exception e) {
LOG.warn("Could not send beacon", e);
} finally {
if (responseEntity != null) {
EntityUtils.consumeQuietly(responseEntity);
}
}
}
}