package biz.karms.sinkit.ejb.elastic.logstash;
import biz.karms.sinkit.ejb.elastic.Indexable;
import biz.karms.sinkit.exception.ArchiveException;
import com.google.gson.Gson;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
/**
* Created by tkozel on 5/29/16.
*/
public class LogstashClient {
public static final String LOGSTASH_URL_ENV = "SINKIT_LOGSTASH_URL";
private static final String LOGSTASH_URL = (System.getenv().containsKey(LOGSTASH_URL_ENV)) ? System.getenv(LOGSTASH_URL_ENV) : "http://localhost:9090/";
private static final String RESPONSE_OK = "ok";
private Gson gson;
public LogstashClient(Gson gson) {
this.gson = gson;
}
public <T extends Indexable> boolean sentToLogstash(final T object, String index, String type) throws ArchiveException {
final Client client = ClientBuilder.newClient();
Response response = client.target(LOGSTASH_URL + "/" + index + "/" + type + "/")
.request()
.accept(MediaType.TEXT_PLAIN_TYPE)
.post(Entity.entity(gson.toJson(object), MediaType.APPLICATION_JSON_TYPE));
String responseMessage = response.readEntity(String.class);
if (!RESPONSE_OK.equals(responseMessage)) {
throw new ArchiveException("Unexpected Logstash response: " + responseMessage);
}
return true;
}
}