/*
* Copyright 2011 NCHOVY
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.krakenapps.siem.msgbus;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Requires;
import org.krakenapps.log.api.Logger;
import org.krakenapps.log.api.LoggerRegistry;
import org.krakenapps.msgbus.Marshaler;
import org.krakenapps.msgbus.Message;
import org.krakenapps.msgbus.MessageBus;
import org.krakenapps.msgbus.MsgbusException;
import org.krakenapps.msgbus.Request;
import org.krakenapps.msgbus.Response;
import org.krakenapps.msgbus.handler.MsgbusMethod;
import org.krakenapps.msgbus.handler.MsgbusPlugin;
import org.krakenapps.siem.LogFileScannerRegistry;
import org.krakenapps.siem.LogServer;
import org.krakenapps.siem.model.ManagedLogger;
@Component(name = "siem-logger-plugin")
@MsgbusPlugin
public class LoggerPlugin {
@Requires
private LogServer logServer;
@Requires
private LoggerRegistry loggerRegistry;
@Requires
private LogFileScannerRegistry scannerRegistry;
@Requires
private MessageBus msgbus;
@MsgbusMethod
public void getLoggers(Request req, Response resp) {
List<Map<String, Object>> loggers = new ArrayList<Map<String, Object>>();
for (ManagedLogger logger : logServer.getManagedLoggers()) {
Map<String, Object> m = logger.marshal();
Logger l = loggerRegistry.getLogger(logger.getFullName());
m.put("logger", org.krakenapps.log.api.msgbus.Marshaler.marshal(l));
loggers.add(m);
}
resp.put("loggers", loggers);
}
@MsgbusMethod
public void getLogFileScanners(Request req, Response resp) {
resp.put("scanners", Marshaler.marshal(scannerRegistry.getScanners()));
}
@MsgbusMethod
public void ensureLoggerOperation(Request req, Response resp) throws InterruptedException {
Message m = new Message();
m.setMethod("org.krakenapps.log.api.msgbus.LoggerPlugin.ensureLoggerOperation");
m.setParameters(req.getParams());
String loggerFullname = req.getString("logger");
msgbus.dispatch(req.getSession(), m);
int i = 0;
while (true) {
if (loggerRegistry.getLogger(loggerFullname) != null)
break;
Thread.sleep(100);
i++;
}
if (i > 20)
throw new MsgbusException("siem", "ensure-logger-timeout");
if (logServer.getManagedLogger(loggerFullname) == null)
createLogger(req, resp);
}
@SuppressWarnings("unchecked")
@MsgbusMethod
public void createLogger(Request req, Response resp) {
String orgDomain = req.getOrgDomain();
String loggerName = req.getString("logger");
Map<String, String> metadata = (Map<String, String>) req.get("metadata");
ManagedLogger ml = new ManagedLogger();
ml.setOrgDomain(orgDomain);
ml.setFullName(loggerName);
ml.setMetadata(metadata);
logServer.createManagedLogger(ml);
}
@MsgbusMethod
public void removeLogger(Request req, Response resp) {
String loggerName = req.getString("logger");
ManagedLogger ml = logServer.getManagedLogger(loggerName);
logServer.removeManagedLogger(ml);
}
}