cacti的绘图bug

其实这篇文应该在2020/09/15就该发出来了,一直忘记写了(

现象

cacti选择起止时间后,绘图并不能正常进行,依旧显示原来的起止时间。

原因

在相对旧版本的cacti内(versions<=1.1),根目录的绘图graph_image.php文件中,其中的时间判断是依据Unix timestamp,即从 1970/1/1 00:00:00 经过的秒数。

1
2
3
4
5
6
7
8
9
/* override: graph start time (unix time) */
if (!empty($_GET["graph_start"]) && $_GET["graph_start"] < 1600000000) {
$graph_data_array["graph_start"] = $_GET["graph_start"];
}

/* override: graph end time (unix time) */
if (!empty($_GET["graph_end"]) && $_GET["graph_end"] < 1600000000) {
$graph_data_array["graph_end"] = $_GET["graph_end"];
}

原判断为小于1600000000,则会在 2020/09/13 20:26:40 后无法通过判断,进而导致绘图没有刷新。

解决

简单粗暴:把判断改大。
永久解决:更换新版本,确认机器的time_t是否为64位。

后续

这个问题说白了就是千年虫的翻版,且旧版本测试时候,有可能是在32位机器上进行测试,故判断写成了1600000000,但是32位机器上,Unix timestamp会在2038/01/19 03:14:07后工作异常。

如果挂载机器是32位,还是尽快更新为妙。