package net.acesinc.data.json.generator.log; import nats.client.Nats; import nats.client.NatsConnector; import net.acesinc.data.json.util.JsonUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.io.IOException; import java.util.Map; /** * Created by betselot on 6/27/16. */ public class NatsLogger implements EventLogger { private static final Logger log = LogManager.getLogger(NatsLogger.class); public static final String NATS_SERVER_PROP_NAME = "broker.server"; public static final String NATS_PORT_PROP_NAME = "broker.port"; private final String topic; private final boolean sync; private final boolean flatten; private JsonUtils jsonUtils; private Nats nats; private NatsConnector natsConnector = new NatsConnector(); StringBuilder natsURL = new StringBuilder("nats://"); public NatsLogger(Map<String, Object> props) { String brokerHost = (String) props.get(NATS_SERVER_PROP_NAME); Integer brokerPort = (Integer) props.get(NATS_PORT_PROP_NAME); natsURL.append(brokerHost); natsURL.append(":"); natsURL.append(brokerPort); nats= natsConnector.addHost(natsURL.toString()).connect(); this.topic = props.get("topic").toString(); this.sync = (Boolean) props.get("sync"); this.flatten = (Boolean) props.get("flatten"); this.jsonUtils = new JsonUtils(); } @Override public void logEvent(String event, Map<String, Object> producerConfig) { logEvent(event); } private void logEvent(String event) { String output = event; if (flatten) { try { output = jsonUtils.flattenJson(event); } catch (IOException ex) { log.error("Error flattening json. Unable to send event [ " + event + " ]", ex); return; } } log.debug("Sending event to ["+ topic +"] on gnatsd: [ " + output + " ]"); nats.publish(topic,output); } @Override public void shutdown() { nats.close(); } }