The core of JRDS is a probe. An object whose purpose is to collect data, store then and provide graphs associated.
Each probe is described in a Probe description, usually a small xml file. This file provides the list of data sources used to store values, a list of graph used to display collected values. Each probe description must be associated to a java class that does the collect.
Probes are instantiated within an host, usually a network object that is monitored using different protocols like SNMP or WMI.
Jrds is fine tunned to avoid overload either the monitored hosts or the collecting server.
To avoid overloading the monitored hosts, all collect are done within one thread for an single host, that thread will connect to different probes and get values. It also cache connection to probes. For each different connections defined in the host configuration, a binding is one and kept for all the collect duration and then released at the end. The thread will then be reused for another host.
The load on the collecting server is managed by using a fixed number of thread, so whatever the number of different declared hosts is, the CPU load on the server is bonded. The impact of this it's that the collect can be too long if too much hosts are declared, or many of the onnections are hanged. To avoid this, the collect time is bonded to the step value. At the end of the collecting phase, every still waiting probes and hosts are dropped and will no be collected.
If a connection for a protocol can't be established, all probes using this protocol will not be collected. So if a host is down, this will be detected quickly and il will hang for too long, preventing other hosts to be collected.
The number of collecting threads, the step and timeout values and other poller parameters are defined using jrds' properties.