On Wed, 2009-04-22 at 13:47 -0430, Alejandro Galue wrote:
> Hello All,
> 
> I'm creating a web service that returns a Json Tree with 
> the availability of all services, and I found something 
> weird on how isDown is implemented on OnmsNode, 
> OnmsIpInterface and OnmsMonitoredService.
> 
>  From the code, the implementation of 
> OnmsMonitoredService.isDown return false (i.e service is 
> up) only if service has no current outages or status is 
> different of "Managed". The current code is:
> 
> @Transient
> public boolean isDown() {
>    boolean down = true;
>    if (!"A".equals(getStatus()) || 
> m_currentOutages.isEmpty()) {
>      return !down;
>    }
>    return down;
> }
> 
> So, if a service has a status of "Not Monitored", isDown() 
> will return false. I understand here that if a service is 
> not managed will be trated always as "Up" (am I right?)
> 
> Let's see OnmsIpInterface isDown implementation:
> 
> @Transient
> @XmlElement(name="isDown")
> public boolean isDown() {
>    boolean down = true;
>    for (OnmsMonitoredService svc : m_monitoredServices) {
>      if (!svc.isDown()) {
>        return !down;
>      }
>    }
>    return down;
> }
> 
> This method return false, only if at least one service is 
> "Up".... (interface down = all service down, am I right?)
> 
> Now imagine this scenario:
> 
> I have 6 services on one interface: 3 are "Not Monitored", 
> and 3 are "Monitored", for example:
> 
> Postgres - Monitored
> SNMP - Not Monitored
> StrafePing - Not Monitored
> SSH - Monitored
> Router - Not Monitored
> ICMP - Monitored
> 
> Now suppose that all services are down, because node is 
> unreachable. In this case, ICMP, Postgres and SHH will be 
> down and I will have 3 outages (apart from nodeDown alarm).
> 
> The problem is that ipinterface.isDown() will return false 
> and node.isDown() will also return false (node down = all 
> interfaces down), because of the existance of two "Not 
> Monitored" service.....
> 
> I think that this is wrong. Am I right ? or am I missing 
> something ?
> 
> I think that OnmsIpInterface.isDown must be check 
> service.getStatus().equals("A").
> 
> Maybe this method must be implemented like this:
> 
> @Transient
> @XmlElement(name="isDown")
> public boolean isDown() {
>    boolean down = true;
>    for (OnmsMonitoredService svc : m_monitoredServices) {
>      if (!svc.isDown() && svc.getStatus().equals("A")) {
>        return !down;
>      }
>    }
>    return down;
> }
> 
> or like this:
> 
> @Transient
> @XmlElement(name="isDown")
> public boolean isDown() {
>    boolean down = true;
>    if (!isManaged())
>      return !down;
>    for (OnmsMonitoredService svc : m_monitoredServices) {
>      if (!svc.isDown() && svc.getStatus().equals("A")) {
>        return !down;
>      }
>    }
>    return down;
> }
> 
> If this second suggestion sounds good, then isDown for 
> OnmsNode must be changed like this:
> 
> @Transient
> public boolean isDown() {
>    boolean down = true;
>    for (OnmsIpInterface ipIf : m_ipInterfaces) {
>      if (!ipIf.isDown() && ipIf.isManaged()) {
>        return !down;
>      }
>    }
>    return down;
> }
> 
> 
> I included an example picture of part of the result after 
> applying only the FIRST change (this is a ExtJS Column 
> Tree, Second Column is Status and Thrird Column is 
> Availability). As you can see, the behavior looks correct. 
> Without this, the ip address and node appears UP.
> 
> 
> Alejandro.
> 
> 

Your analysis looks correct to me. The problem appeared to me quite a
while back in a slightly different form. I expected nodes to age out and
get deleted according to the downtime configuration in
poller-configuration.xml when delete="true". However, if any service is
unmanaged, its interface is not considered to be down. If any interface
is not down, the node is not down, and hence the node never gets deleted
by the downtime model if there are any unmanaged services. I had a patch
for this, but an objection arose because some users wanted to collect
snmp data from nodes that are not being polled, and didn't want those
nodes to get deleted. So no further work took place. I would like to see
this issue revisited, and see if a satisfactory solution could be
devised to meet everyone's needs.

--Bill--




------------------------------------------------------------------------------
Stay on top of everything new and different, both inside and 
around Java (TM) technology - register by April 22, and save
$200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
300 plus technical and hands-on sessions. Register today. 
Use priority code J9JMT32. http://p.sf.net/sfu/p
_______________________________________________
Please read the OpenNMS Mailing List FAQ:
http://www.opennms.org/index.php/Mailing_List_FAQ

opennms-devel mailing list

To *unsubscribe* or change your subscription options, see the bottom of this 
page:
https://lists.sourceforge.net/lists/listinfo/opennms-devel

Reply via email to