I have just committed an experimental SNMP trapd plugin for 
RHQ. Currently it is only able to listen for V1 traps at a fixed address, but I am sure this will change :)
Incoming traps will be forwarded as Events into the events subsystem, so you can view them in the GUI and even define alarms on them (that trigger SNMP traps :-)
The 
plugin has its own page within the 
RHQ plugin community pages. This page also shows the location in SVN. The plugin is marked as 
experimental, meaning that it is not linked in the parent pom. To build it, you need to go into the plugin base directory and build from there.
Events processing
This plugin is also an example for processing of Events. In addition to the three components that you already know from my 
plugin development series, you need an 
EventPoller - that is a class with a method that gets called at regular intervals and which pulls the event data in. Lets have a look at the Component class, the plugin descriptor and the Poller. As the discovery component more or less follows what you have seen in 
part 3 of the series, I am not going to show this again.
Plugin Descriptor
The plugin descriptor is mostly as we know it. There is now one new element:
  <event name="SnmpTrap" description="One single incoming trap"/>
The important part here is the 
name attribute, as we will need its content later again. The 
name is the key into the 
EventDefinition object.
Plugin Component
In the plugin component, we are using start() and stop() to start and stop polling for events:
   public void start(ResourceContext context) throws
        InvalidPluginConfigurationException, Exception {
 
        eventContext = context.getEventContext();
        snmpTrapEventPoller = new SnmpTrapEventPoller();
        eventContext.registerEventPoller(snmpTrapEventPoller, 60);
So first we are getting an 
EventContext from the passed 
ResourceContext, Instantiate an 
EventPoller and register this Poller with the EventContext (60 is the number of seconds between polls). 
The plugin container will start its timer when this registration is done.
In stop() we just unregister the poller again:
eventContext.unregisterEventPoller(TRAP_TYPE);
TRAP_TYPE is the 
ResourceType name as String - we will see this again in a second.
The remainder of this class is nothing special and if you have read the plugin development series, it should actually be no news at all.
Event Poller
This class is the only real new piece in the game.
public class SnmpTrapEventPoller implements EventPoller {
Implementing 
EventPoller means to implement two methods: 
    public String getEventType() {
        return SnmpTrapdComponent.TRAP_TYPE;
    }
Here we return the content of the name attribute from the <event> tag of the plugin descriptor. The plugin will not start if they don't match.
The other method to implement is poll():
    public Set<Event> poll() {
        Set<Event> eventSet = new HashSet<Event>();
      ...
      return eventSet;
    }
To create one 
Event object you just instantiate it. The needed type can just be obtained by a call to 
getEventType().
That's all
Well, that's all. Source is in the RHQ subversion repository - go and check out the sources yourself.
Feedback is always appreciated.
Technorati Tags:
Java, 
JBoss, 
RHQ