All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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;

@SuppressWarnings("WeakerAccess")
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);
      }
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy