package nl.us2.cloudpelican.stormprocessor; import org.apache.commons.codec.binary.Base64; import org.apache.storm.http.HttpResponse; import org.apache.storm.http.client.HttpClient; import org.apache.storm.http.client.methods.HttpPut; import org.apache.storm.http.entity.ByteArrayEntity; import org.apache.storm.http.impl.client.HttpClientBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.zip.GZIPOutputStream; /** * Created by robin on 16/07/15. */ public class SupervisorResultWriterRunnable implements Runnable { private static final Logger LOG = LoggerFactory.getLogger(SupervisorResultWriterRunnable.class); private final SupervisorResultWriterBolt parent; private final String data; private final String url; public SupervisorResultWriterRunnable(SupervisorResultWriterBolt parent, String url, String data) { this.parent = parent; this.url = url; this.data = data; } public void run() { try { HttpClient client = HttpClientBuilder.create().build(); HttpPut put = new HttpPut(url); // Gzip ByteArrayOutputStream baos = new ByteArrayOutputStream(); GZIPOutputStream gzos = null; try { gzos = new GZIPOutputStream(baos); gzos.write(data.getBytes("UTF-8")); } finally { if (gzos != null) try { gzos.close(); } catch (IOException ignore) {} } byte[] gzipBytes = baos.toByteArray(); put.setEntity(new ByteArrayEntity(gzipBytes)); put.setHeader("Content-Encoding", "gzip"); // Token String token = new String(Base64.encodeBase64((parent.settings.get("supervisor_username") + ":" + parent.settings.get("supervisor_password")).getBytes())); LOG.debug(token); put.setHeader("Authorization", "Basic " + token); // Execute HttpResponse resp = client.execute(put); int status = resp.getStatusLine().getStatusCode(); if (status >= 400) { throw new Exception("Invalid status " + status); } } catch (Exception e) { LOG.error("Failed to write to SuperVisor", e); } } }