--- /var/www/zabbix/include/classes/class.cchart.php 2012-07-27 09:48:18.800194572 +0000 +++ /var/www/zabbix.dev/include/classes/class.cchart.php 2012-07-27 04:26:07.976081657 +0000 @@ -401,16 +401,44 @@ continue; } - for ($ci = 0; $ci < $this->sizeX; $ci++) { - foreach (array('min', 'max', 'avg') as $var_name) { - $shift_var_name = 'shift_'.$var_name; - $curr_shift = &$curr_data[$shift_var_name]; - $curr_var = &$curr_data[$var_name]; - $prev_shift = &$prev_data[$shift_var_name]; - $prev_var = &$prev_data[$var_name]; - $curr_shift[$ci] = $prev_var[$ci] + $prev_shift[$ci]; + $ci = $this->sizeX-1; + + for ($x = $ci; $prev_data[count][$x] == 0 && $x > 0; $x--); + + if ($x != 0 && $x < $ci) { + + $max_delay = ZBX_GRAPH_MAX_SKIP_DELAY * $this->items[$j]['delay']; + $diff = abs($prev_data['clock'][$ci] - $prev_data['clock'][$x]); + + if ( $diff < $max_delay ) { + + for (; $prev_data[count][$ci] == 0; $ci--) { + foreach (array('min', 'max', 'avg') as $var_name) { + $shift_var_name = 'shift_'.$var_name; + $curr_data[$shift_var_name][$ci] = $prev_data[$shift_var_name][$ci] + $prev_data[$var_name][$ci]; + } + } + } + } + + for (; $ci >= 0; $ci--) { + + if ($prev_data[count][$ci] == 0) { + foreach (array('min', 'max', 'avg') as $var_name) { + $shift_var_name = 'shift_'.$var_name; + $curr_data[$shift_var_name][$ci] = $prev_data[$shift_var_name][$ci]; + } + } else { + foreach (array('min', 'max', 'avg') as $var_name) { + $shift_var_name = 'shift_'.$var_name; + $curr_data[$shift_var_name][$ci] = $prev_data[$shift_var_name][$ci] + $prev_data[$var_name][$ci]; + } + } + + } + break; } }