package org.araqne.logdb.cep.logger;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.araqne.log.api.AbstractLogger;
import org.araqne.log.api.Log;
import org.araqne.log.api.LoggerFactory;
import org.araqne.log.api.LoggerSpecification;
import org.araqne.log.api.LoggerStartReason;
import org.araqne.log.api.LoggerStopReason;
import org.araqne.log.api.Reconfigurable;
import org.araqne.log.api.SimpleLog;
import org.araqne.logdb.Row;
import org.araqne.logdb.cep.Event;
import org.araqne.logdb.cep.EventContextService;
import org.araqne.logdb.cep.EventKey;
import org.araqne.logdb.cep.EventSubscriber;
/**
* generate event context operation event. e.g. removal, expire, timeout
*
* @author xeraph
*
*/
public class CepEventLogger extends AbstractLogger implements EventSubscriber, Reconfigurable {
private EventContextService eventContextService;
public CepEventLogger(LoggerSpecification spec, LoggerFactory factory, EventContextService eventContextService) {
super(spec, factory);
this.eventContextService = eventContextService;
}
@Override
public void onConfigChange(Map<String, String> oldConfigs, Map<String, String> newConfigs) {
}
@Override
public boolean isPassive() {
return true;
}
@Override
protected void onStart(LoggerStartReason reason) {
String topics = getConfigs().get("topics");
for (String topic : topics.split(",")) {
topic = topic.trim();
eventContextService.addSubscriber(topic, this);
}
}
@Override
protected void onStop(LoggerStopReason reason) {
String topics = getConfigs().get("topics");
for (String topic : topics.split(",")) {
topic = topic.trim();
eventContextService.removeSubscriber(topic, this);
}
}
@Override
protected void runOnce() {
}
@Override
public void onEvent(Event event) {
Map<String, Object> m = new HashMap<String, Object>();
List<Object> rows = new ArrayList<Object>(event.getRows().size());
for (Row row : event.getRows()) {
rows.add(row.map());
}
EventKey key = event.getKey();
m.put("topic", key.getTopic());
m.put("key", key.getKey());
m.put("host", key.getHost());
m.put("counter", event.getCounter());
m.put("vars", event.getVariables());
m.put("created", event.getCreated());
m.put("cause", event.getCause().toString().toLowerCase());
m.put("rows", rows);
Log log = new SimpleLog(new Date(), getFullName(), m);
write(log);
}
}