===== Gráficas con degradado de color en Cacti =====
**Fuente**: http://blog.network-outsourcing.de/2015/06/19/gradient-support-for-cacti-graphs/
Agregar funciones al final del archivo rrd.php.
function gradient($vname=FALSE, $start_color='#0000a0', $end_color='#f0f0f0', $label=FALSE, $steps=20, $lower=FALSE, $alpha='FF'){
$label = preg_replace("/'/","",$label);
if(preg_match('/^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i',$start_color,$matches)){
$r1=hexdec($matches[1]);
$g1=hexdec($matches[2]);
$b1=hexdec($matches[3]);
}
if(preg_match('/^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i',$end_color,$matches)){
$r2=hexdec($matches[1]);
$g2=hexdec($matches[2]);
$b2=hexdec($matches[3]);
}
$diff_r=$r2-$r1;
$diff_g=$g2-$g1;
$diff_b=$b2-$b1;
$spline = "";
$spline_vname = "var".substr(sha1(rand()),1,4);
$vnamet = $vname.substr(sha1(rand()),1,4);
if(preg_match('/^([0-9]{1,3})%$/', $lower, $matches)){
$lower = $matches[1];
$spline .= sprintf("CDEF:%sminimum=%s,100,/,%d,* ".RRD_NL, $vnamet, $vname, $lower);
}elseif(preg_match('/^([0-9]+)$/', $lower, $matches)){
$lower = $matches[1];
$spline .= sprintf("CDEF:%sminimum=%s,%d,- ".RRD_NL, $vnamet, $vname, $lower);
}else{
$lower = 0;
$spline .= sprintf("CDEF:%sminimum=%s,%s,- ".RRD_NL, $vnamet, $vname, $vname);
}
for ($i=$steps; $i>0; $i--){
$spline .= sprintf("CDEF:%s%d=%s,%sminimum,-,%d,/,%d,*,%sminimum,+ ".RRD_NL,$spline_vname,$i,$vname,$vnamet,$steps,$i,$vnamet);
}
// We don't use alpha blending for the area right now
$alpha = 'ff';
for ($i=$steps; $i>0; $i--){
$factor=$i / $steps;
$r=round($r1 + $diff_r * $factor);
$g=round($g1 + $diff_g * $factor);
$b=round($b1 + $diff_b * $factor);
if (($i==$steps) and ($label!=FALSE) and (strlen($label)>2) ){
$spline .= sprintf("AREA:%s%d#%02X%02X%02X%s:\"%s\" ".RRD_NL, $spline_vname,$i,$r,$g,$b,$alpha,$label);
}else{
$spline .= sprintf("AREA:%s%d#%02X%02X%02X%s ".RRD_NL, $spline_vname,$i,$r,$g,$b,$alpha);
}
}
$spline .= sprintf("AREA:%s%d#%02X%02X%02X%s ".RRD_NL, $spline_vname,$steps,$r2,$g2,$b2,'00',$label);
return $spline;
}
function colourBrightness($hex, $percent) {
// Work out if hash given
$hash = '';
if (stristr($hex,'#')) {
$hex = str_replace('#','',$hex);
$hash = '#';
}
/// HEX TO RGB
$rgb = array(hexdec(substr($hex,0,2)), hexdec(substr($hex,2,2)), hexdec(substr($hex,4,2)));
//// CALCULATE
for ($i=0; $i<3; $i++) { // See if brighter or darker if ($percent > 0) {
// Lighter
$rgb[$i] = round($rgb[$i] * $percent) + round(255 * (1-$percent));
} else {
// Darker
$positivePercent = $percent - ($percent*2);
$rgb[$i] = round($rgb[$i] * (1-$positivePercent)); // round($rgb[$i] * (1-$positivePercent));
}
// In case rounding up causes us to go to 256
if ($rgb[$i] > 255) {
$rgb[$i] = 255;
}
}
//// RBG to Hex
$hex = '';
for($i=0; $i < 3; $i++) {
// Convert the decimal digit to hex
$hexDigit = dechex($rgb[$i]);
// Add a leading zero if necessary
if(strlen($hexDigit) == 1) {
$hexDigit = "0" . $hexDigit;
}
// Append to the hex string
$hex .= $hexDigit;
}
return $hash.$hex;
}
Editar el código sobre la linea la linea número 1375 de rrd.php
// if (preg_match("/^(AREA|LINE[123])$/", $graph_item_types{$graph_item["graph_type_id"]})) {
// $graph_item_stack_type = $graph_item_types{$graph_item["graph_type_id"]};
// $graph_variables["text_format"][$graph_item_id] = str_replace(":", "\:", $graph_variables["text_format"][$graph_item_id]); /* escape colons */
// $txt_graph_items .= $graph_item_types{$graph_item["graph_type_id"]} . ":" . $data_source_name . $graph_item_color_code . ":" . cacti_escapeshellarg($graph_variables["text_format"][$graph_item_id] . $hardreturn[$graph_item_id]) . " ";
if (preg_match("/^AREA$/", $graph_item_types{$graph_item["graph_type_id"]})) {
$graph_item_stack_type = $graph_item_types{$graph_item["graph_type_id"]};
$graph_variables["text_format"][$graph_item_id] = str_replace(":", "\:", $graph_variables["text_format"][$graph_item_id]); /* escape colons */
$end_color = colourBrightness("#" . $graph_item["hex"],-0.3); // End color is a 40% (0.4) darkened (negative number) version of the original color
$txt_graph_items .= gradient($data_source_name,$graph_item_color_code,$end_color.$graph_item["alpha"],cacti_escapeshellarg($graph_variables["text_format"][$graph_item_id] . $hardreturn[$graph_item_id]),20,false,$graph_item["alpha"]);
$need_rrd_nl = FALSE;
}elseif (preg_match("/^LINE[123]$/", $graph_item_types{$graph_item["graph_type_id"]})) {
$graph_item_stack_type = $graph_item_types{$graph_item["graph_type_id"]};
$graph_variables["text_format"][$graph_item_id] = str_replace(":", "\:", $graph_variables["text_format"][$graph_item_id]); /* escape colons */
$txt_graph_items .= $graph_item_types{$graph_item["graph_type_id"]} . ":" . $data_source_name . $graph_item_color_code . ":" . cacti_escapeshellarg($graph_variables["text_format"][$graph_item_id] . $hardreturn[$graph_item_id]) . " ";
Configurar el nivel de degradado, de más claro a más oscuro, para el ejemplo un 30%.
$end_color = colourBrightness("#" . $graph_item["hex"],-0.3); // 30% (0.3) oscuro.