Division by Zero
Moderators: Developers, Moderators
Division by Zero
I am having a problem with division by zero when I create new graphs for any host. I have traced the problem down to switching the poller interval from one minute to five minutes. When the poller interval is set to one minute everything is fine. However, when I set the poller interval to 5 minutes that is when I receive the following error. Can someone please help with this? Is it a bug in Cacti or am I doing something wrong? I have searched and searched the forums but no luck.
ERROR MESSAGE:
-----------------------------------
Warning: Division by zero in /opt/cacti/lib/api_poller.php on line 119
Warning: Cannot modify header information - headers already sent by (output started at /opt/cacti/lib/api_poller.php:119) in /opt/cacti/graphs_new.php on line 323
CRONTAB SETTINGS:
---------------------------------------
Crontab used with one minute poller:
* * * * * /opt/php/bin/php /opt/cacti/poller.php > /dev/null 2>&1
Crontab used with five minute poller setting:
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /opt/php/bin/php /opt/cacti/poller.php > /dev/null 2>&1
I have also tried this one as well
5,10,15,20,25,30,35,40,45,50,55 * * * * /opt/php/bin/php /opt/cacti/poller.php > /dev/null 2>&1
ENVIRONMENT
---------------------------
OS: Solaris 10 update 5
Apache 2.2.8
PHP 5.2.5
libxml 2.6.31
MySQL 5.0.51a
rrdtool 1.2.x
Cacti 0.8.7b (with settings 0.5 and thold 0.3.9
Spine 0.8.7a
Perl 5.10.0
ERROR MESSAGE:
-----------------------------------
Warning: Division by zero in /opt/cacti/lib/api_poller.php on line 119
Warning: Cannot modify header information - headers already sent by (output started at /opt/cacti/lib/api_poller.php:119) in /opt/cacti/graphs_new.php on line 323
CRONTAB SETTINGS:
---------------------------------------
Crontab used with one minute poller:
* * * * * /opt/php/bin/php /opt/cacti/poller.php > /dev/null 2>&1
Crontab used with five minute poller setting:
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /opt/php/bin/php /opt/cacti/poller.php > /dev/null 2>&1
I have also tried this one as well
5,10,15,20,25,30,35,40,45,50,55 * * * * /opt/php/bin/php /opt/cacti/poller.php > /dev/null 2>&1
ENVIRONMENT
---------------------------
OS: Solaris 10 update 5
Apache 2.2.8
PHP 5.2.5
libxml 2.6.31
MySQL 5.0.51a
rrdtool 1.2.x
Cacti 0.8.7b (with settings 0.5 and thold 0.3.9
Spine 0.8.7a
Perl 5.10.0
- Attachments
-
- works.png (20.71 KiB) Viewed 5515 times
-
- broken.png (22.54 KiB) Viewed 5515 times
- TheWitness
- Developer
- Posts: 17007
- Joined: Tue May 14, 2002 5:08 pm
- Location: MI, USA
- Contact:
It looks as though poller.php is not creating a session file to maintain variable state. The error message seems to indicate that the variable $poller_interval is uninitialized, which it should not be due to the fact that it is initialized in the following:
A few lines before. You should attempt to patch Cacti. Goto the web site and look at the current patches for 0.8.7b. I think there is one in there specific to this problem maybe. Not 100% sure. It's definitely configuration related though.
TheWitness
Code: Select all
$poller_interval = read_config_option("poller_interval")
TheWitness
True understanding begins only when we realize how little we truly understand...
Life is an adventure, let yours begin with Cacti!
Author of dozens of Cacti plugins and customization's. Advocate of LAMP, MariaDB, IBM Spectrum LSF and the world of batch. Creator of IBM Spectrum RTM, author of quite a bit of unpublished work and most of Cacti's bugs.
_________________
Official Cacti Documentation
GitHub Repository with Supported Plugins
Percona Device Packages (no support)
Interesting Device Packages
For those wondering, I'm still here, but lost in the shadows. Yearning for less bugs. Who want's a Cacti 1.3/2.0? Streams anyone?
Life is an adventure, let yours begin with Cacti!
Author of dozens of Cacti plugins and customization's. Advocate of LAMP, MariaDB, IBM Spectrum LSF and the world of batch. Creator of IBM Spectrum RTM, author of quite a bit of unpublished work and most of Cacti's bugs.
_________________
Official Cacti Documentation
GitHub Repository with Supported Plugins
Percona Device Packages (no support)
Interesting Device Packages
For those wondering, I'm still here, but lost in the shadows. Yearning for less bugs. Who want's a Cacti 1.3/2.0? Streams anyone?
- TheWitness
- Developer
- Posts: 17007
- Joined: Tue May 14, 2002 5:08 pm
- Location: MI, USA
- Contact:
Make sure you are running 0.8.7b and not "a".
TheWitness
TheWitness
True understanding begins only when we realize how little we truly understand...
Life is an adventure, let yours begin with Cacti!
Author of dozens of Cacti plugins and customization's. Advocate of LAMP, MariaDB, IBM Spectrum LSF and the world of batch. Creator of IBM Spectrum RTM, author of quite a bit of unpublished work and most of Cacti's bugs.
_________________
Official Cacti Documentation
GitHub Repository with Supported Plugins
Percona Device Packages (no support)
Interesting Device Packages
For those wondering, I'm still here, but lost in the shadows. Yearning for less bugs. Who want's a Cacti 1.3/2.0? Streams anyone?
Life is an adventure, let yours begin with Cacti!
Author of dozens of Cacti plugins and customization's. Advocate of LAMP, MariaDB, IBM Spectrum LSF and the world of batch. Creator of IBM Spectrum RTM, author of quite a bit of unpublished work and most of Cacti's bugs.
_________________
Official Cacti Documentation
GitHub Repository with Supported Plugins
Percona Device Packages (no support)
Interesting Device Packages
For those wondering, I'm still here, but lost in the shadows. Yearning for less bugs. Who want's a Cacti 1.3/2.0? Streams anyone?
- TheWitness
- Developer
- Posts: 17007
- Joined: Tue May 14, 2002 5:08 pm
- Location: MI, USA
- Contact:
This may be PHP specific. Try the modified code below and see if the error goes away. Please post updates here.
TheWitness
Code: Select all
if ($modulus == 0) {
$rrd_next_step = 0;
}else{
$rrd_next_step = $poller_interval * ($rrd_step_counter % $modulus);
True understanding begins only when we realize how little we truly understand...
Life is an adventure, let yours begin with Cacti!
Author of dozens of Cacti plugins and customization's. Advocate of LAMP, MariaDB, IBM Spectrum LSF and the world of batch. Creator of IBM Spectrum RTM, author of quite a bit of unpublished work and most of Cacti's bugs.
_________________
Official Cacti Documentation
GitHub Repository with Supported Plugins
Percona Device Packages (no support)
Interesting Device Packages
For those wondering, I'm still here, but lost in the shadows. Yearning for less bugs. Who want's a Cacti 1.3/2.0? Streams anyone?
Life is an adventure, let yours begin with Cacti!
Author of dozens of Cacti plugins and customization's. Advocate of LAMP, MariaDB, IBM Spectrum LSF and the world of batch. Creator of IBM Spectrum RTM, author of quite a bit of unpublished work and most of Cacti's bugs.
_________________
Official Cacti Documentation
GitHub Repository with Supported Plugins
Percona Device Packages (no support)
Interesting Device Packages
For those wondering, I'm still here, but lost in the shadows. Yearning for less bugs. Who want's a Cacti 1.3/2.0? Streams anyone?
Thanks Witness, I'll try as soon as I get into work in 30min or so. What file is that, not that it matters I can grep for the text.TheWitness wrote:This may be PHP specific. Try the modified code below and see if the error goes away. Please post updates here.
TheWitnessCode: Select all
if ($modulus == 0) { $rrd_next_step = 0; }else{ $rrd_next_step = $poller_interval * ($rrd_step_counter % $modulus);
I get this when i try to reindex with your changes:
Parse error: syntax error, unexpected $end in /www/htdocs/cacti/lib/api_poller.php on line 145
Here is what api_poller.php looks like:
<?php
/*
+-------------------------------------------------------------------------+
| Copyright (C) 2004-2008 The Cacti Group |
| |
| This program is free software; you can redistribute it and/or |
| modify it under the terms of the GNU General Public License |
| as published by the Free Software Foundation; either version 2 |
| of the License, or (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
+-------------------------------------------------------------------------+
| Cacti: The Complete RRDTool-based Graphing Solution |
+-------------------------------------------------------------------------+
| This code is designed, written, and maintained by the Cacti Group. See |
| about.php and/or the AUTHORS file for specific developer information. |
+-------------------------------------------------------------------------+
| http://www.cacti.net/ |
+-------------------------------------------------------------------------+
*/
function api_poller_cache_item_add($host_id, $host_field_override, $local_data_id, $rrd_step, $poller_action_id, $data_source_item_name, $num_rrd_items, $arg1 = "", $arg2 = "", $arg3 = "") {
$host = db_fetch_row("select
host.id,
host.hostname,
host.snmp_community,
host.snmp_version,
host.snmp_username,
host.snmp_password,
host.snmp_auth_protocol,
host.snmp_priv_passphrase,
host.snmp_priv_protocol,
host.snmp_context,
host.snmp_port,
host.snmp_timeout,
host.disabled
from host
where host.id=$host_id");
/* the $host_field_override array can be used to override certain host fields in the poller cache */
if (isset($host)) {
$host = array_merge($host, $host_field_override);
}
if (isset($host["id"]) || (isset($host_id))) {
if (isset($host)) {
if ($host["disabled"] == "on") {
return true;
}
} else {
if ($poller_action_id == 0) {
return true;
}
$host["id"] = 0;
$host["snmp_community"] = "";
$host["snmp_timeout"] = "";
$host["snmp_username"] = "";
$host["snmp_password"] = "";
$host["snmp_auth_protocol"] = "";
$host["snmp_priv_passphrase"] = "";
$host["snmp_priv_protocol"] = "";
$host["snmp_context"] = "";
$host["snmp_version"] = "";
$host["snmp_port"] = "";
$host["hostname"] = "None";
}
if ($poller_action_id == 0) {
if (($host["snmp_version"] < 1) || ($host["snmp_version"] > 3) ||
($host["snmp_community"] == "" && $host["snmp_version"] != 3)) {
return true;
}
}
$rrd_next_step = api_poller_get_rrd_next_step($rrd_step, $num_rrd_items);
return db_execute("INSERT INTO poller_item (local_data_id, host_id, action,hostname,
snmp_community, snmp_version, snmp_timeout, snmp_username, snmp_password,
snmp_auth_protocol, snmp_priv_passphrase, snmp_priv_protocol, snmp_context, snmp_port, rrd_name, rrd_path,
rrd_num, rrd_step, rrd_next_step, arg1, arg2, arg3)
VALUES
($local_data_id, " . $host["id"] . ", $poller_action_id,'" . $host["hostname"] . "',
'" . $host["snmp_community"] . "', '" . $host["snmp_version"] . "', '" . $host["snmp_timeout"] . "',
'" . $host["snmp_username"] . "', '" . $host["snmp_password"] . "', '" . $host["snmp_auth_protocol"] . "',
'" . $host["snmp_priv_passphrase"] . "', '" . $host["snmp_priv_protocol"] . "', '" . $host["snmp_context"] . "',
'" . $host["snmp_port"] . "', '$data_source_item_name', '" . addslashes(clean_up_path(get_data_source_path($local_data_id, true))) . "',
'$num_rrd_items', '$rrd_step', '$rrd_next_step', '$arg1', '$arg2', '$arg3')");
}
}
function api_poller_get_rrd_next_step($rrd_step=300, $num_rrd_items=1) {
global $config;
$poller_interval = read_config_option("poller_interval");
$rrd_next_step = 0;
if (($rrd_step != $poller_interval) && (isset($poller_interval))){
if (!isset($config["rrd_step_counter"])) {
$rrd_step_counter = read_config_option("rrd_step_counter");
}else{
$rrd_step_counter = $config["rrd_step_counter"];
}
if ($num_rrd_items == 1) {
$config["rrd_num_counter"] = 0;
}else{
if (!isset($config["rrd_num_counter"])) {
$config["rrd_num_counter"] = 1;
}else{
$config["rrd_num_counter"]++;
}
}
$modulus = $rrd_step / $poller_interval;
if ($modulus == 0) {
$rrd_next_step = 0;
}else{
$rrd_next_step = $poller_interval * ($rrd_step_counter % $modulus);
if ($num_rrd_items == 1) {
$rrd_step_counter++;
}else{
if ($num_rrd_items == $config["rrd_num_counter"]) {
$rrd_step_counter++;
$config["rrd_num_counter"] = 0;
}
}
if ($rrd_step_counter >= $modulus) {
$rrd_step_counter = 0;
}
/* save rrd_step_counter */
$config["rrd_step_counter"] = $rrd_step_counter;
db_execute("replace into settings (name, value) values ('rrd_step_counter','$rrd_step_counter')");
}
return $rrd_next_step;
}
?>
Parse error: syntax error, unexpected $end in /www/htdocs/cacti/lib/api_poller.php on line 145
Here is what api_poller.php looks like:
<?php
/*
+-------------------------------------------------------------------------+
| Copyright (C) 2004-2008 The Cacti Group |
| |
| This program is free software; you can redistribute it and/or |
| modify it under the terms of the GNU General Public License |
| as published by the Free Software Foundation; either version 2 |
| of the License, or (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
+-------------------------------------------------------------------------+
| Cacti: The Complete RRDTool-based Graphing Solution |
+-------------------------------------------------------------------------+
| This code is designed, written, and maintained by the Cacti Group. See |
| about.php and/or the AUTHORS file for specific developer information. |
+-------------------------------------------------------------------------+
| http://www.cacti.net/ |
+-------------------------------------------------------------------------+
*/
function api_poller_cache_item_add($host_id, $host_field_override, $local_data_id, $rrd_step, $poller_action_id, $data_source_item_name, $num_rrd_items, $arg1 = "", $arg2 = "", $arg3 = "") {
$host = db_fetch_row("select
host.id,
host.hostname,
host.snmp_community,
host.snmp_version,
host.snmp_username,
host.snmp_password,
host.snmp_auth_protocol,
host.snmp_priv_passphrase,
host.snmp_priv_protocol,
host.snmp_context,
host.snmp_port,
host.snmp_timeout,
host.disabled
from host
where host.id=$host_id");
/* the $host_field_override array can be used to override certain host fields in the poller cache */
if (isset($host)) {
$host = array_merge($host, $host_field_override);
}
if (isset($host["id"]) || (isset($host_id))) {
if (isset($host)) {
if ($host["disabled"] == "on") {
return true;
}
} else {
if ($poller_action_id == 0) {
return true;
}
$host["id"] = 0;
$host["snmp_community"] = "";
$host["snmp_timeout"] = "";
$host["snmp_username"] = "";
$host["snmp_password"] = "";
$host["snmp_auth_protocol"] = "";
$host["snmp_priv_passphrase"] = "";
$host["snmp_priv_protocol"] = "";
$host["snmp_context"] = "";
$host["snmp_version"] = "";
$host["snmp_port"] = "";
$host["hostname"] = "None";
}
if ($poller_action_id == 0) {
if (($host["snmp_version"] < 1) || ($host["snmp_version"] > 3) ||
($host["snmp_community"] == "" && $host["snmp_version"] != 3)) {
return true;
}
}
$rrd_next_step = api_poller_get_rrd_next_step($rrd_step, $num_rrd_items);
return db_execute("INSERT INTO poller_item (local_data_id, host_id, action,hostname,
snmp_community, snmp_version, snmp_timeout, snmp_username, snmp_password,
snmp_auth_protocol, snmp_priv_passphrase, snmp_priv_protocol, snmp_context, snmp_port, rrd_name, rrd_path,
rrd_num, rrd_step, rrd_next_step, arg1, arg2, arg3)
VALUES
($local_data_id, " . $host["id"] . ", $poller_action_id,'" . $host["hostname"] . "',
'" . $host["snmp_community"] . "', '" . $host["snmp_version"] . "', '" . $host["snmp_timeout"] . "',
'" . $host["snmp_username"] . "', '" . $host["snmp_password"] . "', '" . $host["snmp_auth_protocol"] . "',
'" . $host["snmp_priv_passphrase"] . "', '" . $host["snmp_priv_protocol"] . "', '" . $host["snmp_context"] . "',
'" . $host["snmp_port"] . "', '$data_source_item_name', '" . addslashes(clean_up_path(get_data_source_path($local_data_id, true))) . "',
'$num_rrd_items', '$rrd_step', '$rrd_next_step', '$arg1', '$arg2', '$arg3')");
}
}
function api_poller_get_rrd_next_step($rrd_step=300, $num_rrd_items=1) {
global $config;
$poller_interval = read_config_option("poller_interval");
$rrd_next_step = 0;
if (($rrd_step != $poller_interval) && (isset($poller_interval))){
if (!isset($config["rrd_step_counter"])) {
$rrd_step_counter = read_config_option("rrd_step_counter");
}else{
$rrd_step_counter = $config["rrd_step_counter"];
}
if ($num_rrd_items == 1) {
$config["rrd_num_counter"] = 0;
}else{
if (!isset($config["rrd_num_counter"])) {
$config["rrd_num_counter"] = 1;
}else{
$config["rrd_num_counter"]++;
}
}
$modulus = $rrd_step / $poller_interval;
if ($modulus == 0) {
$rrd_next_step = 0;
}else{
$rrd_next_step = $poller_interval * ($rrd_step_counter % $modulus);
if ($num_rrd_items == 1) {
$rrd_step_counter++;
}else{
if ($num_rrd_items == $config["rrd_num_counter"]) {
$rrd_step_counter++;
$config["rrd_num_counter"] = 0;
}
}
if ($rrd_step_counter >= $modulus) {
$rrd_step_counter = 0;
}
/* save rrd_step_counter */
$config["rrd_step_counter"] = $rrd_step_counter;
db_execute("replace into settings (name, value) values ('rrd_step_counter','$rrd_step_counter')");
}
return $rrd_next_step;
}
?>
- TheWitness
- Developer
- Posts: 17007
- Joined: Tue May 14, 2002 5:08 pm
- Location: MI, USA
- Contact:
True understanding begins only when we realize how little we truly understand...
Life is an adventure, let yours begin with Cacti!
Author of dozens of Cacti plugins and customization's. Advocate of LAMP, MariaDB, IBM Spectrum LSF and the world of batch. Creator of IBM Spectrum RTM, author of quite a bit of unpublished work and most of Cacti's bugs.
_________________
Official Cacti Documentation
GitHub Repository with Supported Plugins
Percona Device Packages (no support)
Interesting Device Packages
For those wondering, I'm still here, but lost in the shadows. Yearning for less bugs. Who want's a Cacti 1.3/2.0? Streams anyone?
Life is an adventure, let yours begin with Cacti!
Author of dozens of Cacti plugins and customization's. Advocate of LAMP, MariaDB, IBM Spectrum LSF and the world of batch. Creator of IBM Spectrum RTM, author of quite a bit of unpublished work and most of Cacti's bugs.
_________________
Official Cacti Documentation
GitHub Repository with Supported Plugins
Percona Device Packages (no support)
Interesting Device Packages
For those wondering, I'm still here, but lost in the shadows. Yearning for less bugs. Who want's a Cacti 1.3/2.0? Streams anyone?
Try php code
You get the error "div by zero". Only integer divider must be used with operator '%'
Code: Select all
<?php print 3 % 0.5;?>
Code: Select all
if ($modulus<1) {
$rrd_next_step = 0;
}else{
$rrd_next_step = $poller_interval * ($rrd_step_counter % $modulus);
}
Who is online
Users browsing this forum: No registered users and 1 guest