com.groupbyinc.common.blip.BlipClientTask Maven / Gradle / Ivy
package com.groupbyinc.common.blip;
import com.fasterxml.jackson.databind.ObjectMapper;
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.conn.ConnectTimeoutException;
import org.apache.http.entity.StringEntity;
import org.apache.http.util.EntityUtils;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.SocketTimeoutException;
import java.net.URI;
import java.nio.charset.Charset;
import java.util.Map;
import static org.joda.time.DateTime.now;
import static org.joda.time.DateTimeZone.UTC;
public class BlipClientTask implements Runnable {
private static final transient Logger LOG = LoggerFactory.getLogger(BlipClientTask.class);
private static final ObjectMapper OM = new ObjectMapper();
private static final Charset UTF8 = Charset.forName("UTF-8");
private static final String APPLICATION_JSON = "application/json";
private static final DateTimeFormatter ISO8601 = ISODateTimeFormat.dateTime();
private final String service;
private final URI uri;
private final String environment;
private final HttpClient httpClient;
private Map values;
public BlipClientTask(URI uri, String environment, String service, HttpClient httpClient) {
this.uri = uri;
this.environment = environment;
this.service = service;
this.httpClient = httpClient;
}
public BlipClientTask setValues(Map values) {
this.values = values;
return this;
}
public void run() {
HttpEntity responseEntity = null;
try {
values.put("environment", environment);
values.put("service", service);
if (!values.containsKey("date")) {
values.put("date", now(UTC).toString(ISO8601));
}
String json = OM.writeValueAsString(values);
StringEntity entity = new StringEntity(json, UTF8);
entity.setContentType(APPLICATION_JSON);
HttpPost post = new HttpPost(uri);
post.setEntity(entity);
HttpResponse response = httpClient.execute(post);
responseEntity = response.getEntity();
StatusLine statusLine = response.getStatusLine();
LOG.trace("Got: {}", statusLine.getStatusCode());
} catch (SocketTimeoutException e) {
LOG.trace("Dropped blip: {}", e.getMessage());
} catch (ConnectTimeoutException e) {
LOG.warn("Could not send blip: {}", e.getMessage());
} catch (Exception e) {
LOG.warn("Could not send blip", e);
} finally {
if (responseEntity != null) {
EntityUtils.consumeQuietly(responseEntity);
}
}
}
}