OpenNMS API 1.1.3

org.opennms.netmgt.poller
Class IcmpMonitor

java.lang.Object
  extended byorg.opennms.netmgt.poller.IPv4LatencyMonitor
      extended byorg.opennms.netmgt.poller.IcmpMonitor
All Implemented Interfaces:
ServiceMonitor

final class IcmpMonitor
extends IPv4LatencyMonitor

This class is designed to be used by the service poller framework to test the availability of the ICMP service on remote interfaces. The class implements the ServiceMonitor interface that allows it to be used along with other plug-ins by the service poller framework.

Author:
Tarus Balog, OpenNMS

Nested Class Summary
private static class IcmpMonitor.Ping
          This class is used to encapsulate a ping request.
 
Field Summary
private static int DEFAULT_RETRY
          Default retries.
private static int DEFAULT_TIMEOUT
          Default timeout.
(package private) static java.lang.String DS_NAME
          RRD data source name which doubles as the RRD file name.
private static short FILTER_ID
          The filter identifier for the ping reply receiver
private static IcmpSocket m_icmpSock
          The ICMP socket used to send/receive replies
private static ReplyReceiver m_receiver
          The singular reply receiver
(package private)  Interface m_rrdInterface
          Interface object which provides access to RRD functions via JNI.
private static short m_seqid
          The sequence number for pings
private static java.util.Map m_waiting
          The set used to lookup thread identifiers The map of long thread identifiers to Packets that must be signaled.
private static java.lang.Thread m_worker
          The thread used to receive and process replies.
 
Fields inherited from interface org.opennms.netmgt.poller.ServiceMonitor
SERVICE_AVAILABLE, SERVICE_STATUS_MASK, SERVICE_UNAVAILABLE, SERVICE_UNRESPONSIVE, SURPRESS_EVENT_MASK
 
Constructor Summary
(package private) IcmpMonitor()
          Construts a new monitor.
 
Method Summary
 boolean createRRD(Interface rrdJniInterface, java.lang.String repository, java.net.InetAddress addr, java.lang.String dsName, Package pkg)
          Create an RRD database file for storing latency/response time data.
private static java.net.DatagramPacket getDatagram(java.net.InetAddress addr, long tid)
          Builds a datagram compatable with the ping ReplyReceiver class.
 void initialize(java.util.Map parameters)
          This method is called after the framework creates an instance of the plug-in.
 void initialize(NetworkInterface iface)
          This method is called whenever a new interface that supports the plug-in service is added to the scheduling system.
 int poll(NetworkInterface iface, java.util.Map parameters, Package pkg)
          Poll the specified address for ICMP service availability.
 void release()
          This method is called whenever the plug-in is being unloaded, normally during framework exit.
 void release(NetworkInterface iface)
          This method is the called whenever an interface is being removed from the scheduler.
 void updateRRD(Interface rrdJniInterface, java.lang.String repository, java.net.InetAddress addr, java.lang.String dsName, long value, Package pkg)
          Update an RRD database file with latency/response time data.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_RETRY

private static final int DEFAULT_RETRY
Default retries.

See Also:
Constant Field Values

DEFAULT_TIMEOUT

private static final int DEFAULT_TIMEOUT
Default timeout. Specifies how long (in milliseconds) to block waiting for data from the monitored interface.

See Also:
Constant Field Values

FILTER_ID

private static final short FILTER_ID
The filter identifier for the ping reply receiver


m_seqid

private static short m_seqid
The sequence number for pings


m_receiver

private static ReplyReceiver m_receiver
The singular reply receiver


m_icmpSock

private static IcmpSocket m_icmpSock
The ICMP socket used to send/receive replies


m_waiting

private static java.util.Map m_waiting
The set used to lookup thread identifiers The map of long thread identifiers to Packets that must be signaled. The mapped objects are instances of the Reply class.


m_worker

private static java.lang.Thread m_worker
The thread used to receive and process replies.


m_rrdInterface

Interface m_rrdInterface
Interface object which provides access to RRD functions via JNI.


DS_NAME

static java.lang.String DS_NAME
RRD data source name which doubles as the RRD file name.

Constructor Detail

IcmpMonitor

IcmpMonitor()
      throws java.io.IOException
Construts a new monitor.

Method Detail

getDatagram

private static java.net.DatagramPacket getDatagram(java.net.InetAddress addr,
                                                   long tid)
Builds a datagram compatable with the ping ReplyReceiver class.


poll

public int poll(NetworkInterface iface,
                java.util.Map parameters,
                Package pkg)

Poll the specified address for ICMP service availability.

The ICMP service monitor relies on Discovery for the actual generation of IMCP 'ping' requests. A JSDT session with two channels (send/recv) is utilized for passing poll requests and receiving poll replies from discovery. All exchanges are SOAP/XML compliant.

Parameters:
iface - The network interface to test the service on.
parameters - The package parameters (timeout, retry, etc...) to be used for this poll.
Returns:
The availibility of the interface and if a transition event should be supressed.
See Also:
ServiceMonitor.SURPRESS_EVENT_MASK, ServiceMonitor.SERVICE_AVAILABLE, ServiceMonitor.SERVICE_UNAVAILABLE

initialize

public void initialize(java.util.Map parameters)

This method is called after the framework creates an instance of the plug-in. The framework passes the object a proxy object that can be used to retreive configuration information specific to the plug-in. Additionally, any parameters for the plug-in from the package definition are passed using the parameters element.

If there is a critical error, like missing service libraries, the the montior may throw a ServiceMonitorException. If the plug-in throws an exception then the plug-in will be disabled in the framework.

Specified by:
initialize in interface ServiceMonitor
Parameters:
parameters - Not currently used
Throws:
java.lang.RuntimeException - Thrown if an unrecoverable error occurs that prevents the plug-in from functioning.

release

public void release()

This method is called whenever the plug-in is being unloaded, normally during framework exit. During this time the framework may release any resource and save any state information using the proxy object from the initialization routine.

Even if the plug-in throws a monitor exception, it will not prevent the plug-in from being unloaded. The plug-in should not return until all of its state information is saved. Once the plug-in returns from this call its configuration proxy object is considered invalid.

Specified by:
release in interface ServiceMonitor
Throws:
java.lang.RuntimeException - Thrown if an error occurs during deallocation.

initialize

public void initialize(NetworkInterface iface)

This method is called whenever a new interface that supports the plug-in service is added to the scheduling system. The plug-in has the option to load and/or associate configuration information with the interface before the framework begins scheduling the new device.

Should a monitor exception be thrown during an initialization call then the framework will log an error and discard the interface from scheduling.

Specified by:
initialize in interface ServiceMonitor
Parameters:
iface - The network interface to be added to the scheduler.
Throws:
java.lang.RuntimeException - Thrown if an unrecoverable error occurs that prevents the interface from being monitored.
NetworkInterfaceNotSupportedException - Thrown if the passed interface is invalid for this monitor.

release

public void release(NetworkInterface iface)

This method is the called whenever an interface is being removed from the scheduler. For example, if a service is determined as being no longer supported then this method will be invoked to cleanup any information associated with this device. This gives the implementor of the interface the ability to serialize any data prior to the interface being discarded.

If an exception is thrown during the release the exception will be logged, but the interface will still be discarded for garbage collection.

Specified by:
release in interface ServiceMonitor
Parameters:
iface - The network interface that was being monitored.
Throws:
java.lang.RuntimeException - Thrown if an unrecoverable error occurs that prevents the interface from being monitored.

createRRD

public boolean createRRD(Interface rrdJniInterface,
                         java.lang.String repository,
                         java.net.InetAddress addr,
                         java.lang.String dsName,
                         Package pkg)
Create an RRD database file for storing latency/response time data.

Parameters:
rrdJniInterface - interface used to issue RRD commands.
repository - path to the RRD file repository
addr - interface address
dsName - data source/RRD file name
Returns:
true if RRD file successfully created, false otherwise

updateRRD

public void updateRRD(Interface rrdJniInterface,
                      java.lang.String repository,
                      java.net.InetAddress addr,
                      java.lang.String dsName,
                      long value,
                      Package pkg)
Update an RRD database file with latency/response time data.

Parameters:
rrdJniInterface - interface used to issue RRD commands.
repository - path to the RRD file repository
addr - interface address
value - value to update the RRD file with
Returns:
true if RRD file successfully created, false otherwise

OpenNMS API 1.1.3

Generated by root on August 19 2004 0130.