package org.infosec.ismp.syslogd;
/**
* syslog模块侦听内部事件的listener,syslog模块的配置修改和重启等命令通过该listener,
* 是syslogd模块和外部交互的渠道。
*/
import java.util.ArrayList;
import java.util.List;
import org.infosec.ismp.eventd.EventIpcManagerFactory;
import org.infosec.ismp.model.Parm;
import org.infosec.ismp.model.Parms;
import org.infosec.ismp.model.event.Event;
import org.infosec.ismp.model.event.EventConstants;
import org.infosec.ismp.model.event.EventListener;
import org.infosec.ismp.util.ThreadCategory;
final class BroadcastEventProcessor implements EventListener {
// private final Syslogd m_syslogd;
private final SyslogNodeManager m_nodeManager;
/**
* Create message selector to set to the subscription
*/
BroadcastEventProcessor(SyslogNodeManager nodeManager) {
m_nodeManager = nodeManager;
List<String> ueiList = new ArrayList<String>();
// interfaceDeleted
ueiList.add(EventConstants.SYSLOGD_CONFIG_NODE_ADD_EVENT_UEI);
ueiList.add(EventConstants.SYSLOGD_CONFIG_NODE_DELETE_EVENT_UEI);
EventIpcManagerFactory.init();
EventIpcManagerFactory.getIpcManager().addEventListener(this, ueiList);
}
/**
* Unsubscribe from eventd
*/
public void close() {
EventIpcManagerFactory.getIpcManager().removeEventListener(this);
}
/**
* This method is invoked by the EventIpcManager when a new event is
* available for processing. Each message is examined for its Universal
* Event Identifier and the appropriate action is taking based on each UEI.
*
* @param event
* The event
*/
@Override
public void onEvent(Event event) {
ThreadCategory log = ThreadCategory.getInstance(getClass());
String eventUei = event.getUei();
if (eventUei == null)
return;
if (log.isDebugEnabled())
log.debug("Received event: " + eventUei);
if (eventUei.equals(EventConstants.SYSLOGD_CONFIG_NODE_ADD_EVENT_UEI)) {
String nodeId = event.getNodeid();
String ipAddr = event.getIpAddr();
SyslogNode node = new SyslogNode(nodeId, ipAddr);
m_nodeManager.addSyslogNode(node);
if (log.isDebugEnabled()) {
log.debug("add syslog source to nodeManager : " + node);
}
} else if (eventUei
.equals(EventConstants.SYSLOGD_CONFIG_NODE_DELETE_EVENT_UEI)) {
String nodeId = event.getNodeid();
m_nodeManager.removeSyslogNode(nodeId);
if (log.isDebugEnabled()) {
log.debug("remove syslog source from nodeManager: " + nodeId);
}
}
}
/**
* Return an id for this event listener
*/
@Override
public String getName() {
return "Syslogd:BroadcastEventProcessor";
}
// String getValue(Parms parms, String parmName) {
// Parm[] parm = parms.getParam();
// String value = null;
// if (parm != null && parm.length > 0) {
// for (int i = 0, count = parm.length; i < count; i++) {
// if (parm[i].getParmName().equalsIgnoreCase(parmName)) {
// value = parm[i].getValue().getContent();
// break;
// }
// }
// }
//
// return value;
// }
}