LP#1711194: avoid division by zero errors
authorGalen Charlton <gmc@equinoxinitiative.org>
Fri, 18 Aug 2017 15:11:29 +0000 (11:11 -0400)
committerBill Erickson <berickxx@gmail.com>
Fri, 18 Aug 2017 16:34:23 +0000 (12:34 -0400)
Under some circumstances, osrf_control --diagnostic may not
be able to deduce the correct max_children setting for a service,
e.g., if it's run without --localhost on a system that doesn't
have a opensrf.xml config section specifying active apps for a
specific hostname. When that happens, just display the count
of running drones rather than displaying error messages about
undefined $dmax values and divisions by zero.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
bin/opensrf-perl.pl.in

index 021f00e..40015e3 100755 (executable)
@@ -267,8 +267,12 @@ sub do_diagnostic {
                 my @drones = `pgrep -f "Drone \\[$svc\\]"`;
                 my $dcount = scalar(@drones);
                 my $dmax = $max_children_map{$svc};
                 my @drones = `pgrep -f "Drone \\[$svc\\]"`;
                 my $dcount = scalar(@drones);
                 my $dmax = $max_children_map{$svc};
-                $str .= "#drones=$dcount/$dmax ";
-                $str .= sprintf('%3d%%', (int(($dcount / $dmax) * 100)));
+                if (defined($dmax) && $dmax > 0) {
+                    $str .= "#drones=$dcount/$dmax ";
+                    $str .= sprintf('%3d%%', (int(($dcount / $dmax) * 100)));
+                } else {
+                    $str .= "#drones=$dcount";
+                }
                 msg($str);
                 msg("\tERR $svc has no running drones.") unless @drones;
             }
                 msg($str);
                 msg("\tERR $svc has no running drones.") unless @drones;
             }