Output image for graphs with no data (#11865)

* Output image for graphs with no data

* add font

* Fix graph error, try to detect rrd missing

* centralize graph_error
use it for graph_text_and_exit()

* Add SVG, right now the text can get a little big...

* fix style
This commit is contained in:
Tony Murray
2021-01-13 07:23:47 -06:00
committed by GitHub
parent ed41e6eedc
commit b07b81021a
7 changed files with 98 additions and 118 deletions

View File

@@ -47,53 +47,12 @@ if ($auth && is_customoid_graph($type, $subtype)) {
// Graph Template Missing");
}
function graph_error($string)
{
global $vars, $debug, $graphfile;
$vars['bg'] = 'FFBBBB';
include 'includes/html/graphs/common.inc.php';
$rrd_options .= ' HRULE:0#555555';
$rrd_options .= ' --title=' . escapeshellarg($string);
rrdtool_graph($graphfile, $rrd_options);
if ($height > '99') {
shell_exec($rrd_cmd);
d_echo('<pre>' . $rrd_cmd . '</pre>');
if (is_file($graphfile) && ! $debug) {
header('Content-type: image/png');
$fd = fopen($graphfile, 'r');
fpassthru($fd);
fclose($fd);
unlink($graphfile);
}
} else {
if (! $debug) {
header('Content-type: image/png');
}
$im = imagecreate($width, $height);
$px = ((imagesx($im) - 7.5 * strlen($string)) / 2);
imagestring($im, 3, $px, ($height / 2 - 8), $string, imagecolorallocate($im, 128, 0, 0));
imagepng($im);
imagedestroy($im);
}
}
if ($error_msg) {
// We have an error :(
graph_error($graph_error);
} elseif ($auth === null) {
// We are unauthenticated :(
if ($width < 200) {
graph_error('No Auth');
} else {
graph_error('No Authorisation');
}
graph_error($width < 200 ? 'No Auth' : 'No Authorization');
} else {
// $rrd_options .= " HRULE:0#999999";
if ($graph_type === 'svg') {
@@ -103,13 +62,7 @@ if ($error_msg) {
}
}
if ($no_file) {
if ($width < 200) {
graph_error('No RRD');
} else {
graph_error('Missing RRD Datafile');
}
} elseif ($command_only) {
if ($command_only) {
echo "<div class='infobox'>";
echo "<p style='font-size: 16px; font-weight: bold;'>RRDTool Command</p>";
echo "<pre class='rrd-pre'>";
@@ -122,74 +75,33 @@ if ($error_msg) {
echo '</pre>';
unlink($graphfile);
echo '</div>';
} else {
if ($rrd_options) {
rrdtool_graph($graphfile, $rrd_options);
d_echo($rrd_cmd);
if (is_file($graphfile)) {
if (! $debug) {
set_image_type();
if (Config::get('trim_tobias') && $graph_type !== 'svg') {
[$w, $h, $type, $attr] = getimagesize($graphfile);
$src_im = imagecreatefrompng($graphfile);
$src_x = '0';
// begin x
$src_y = '0';
// begin y
$src_w = ($w - 12);
// width
$src_h = $h;
// height
$dst_x = '0';
// destination x
$dst_y = '0';
// destination y
$dst_im = imagecreatetruecolor($src_w, $src_h);
imagesavealpha($dst_im, true);
$white = imagecolorallocate($dst_im, 255, 255, 255);
$trans_colour = imagecolorallocatealpha($dst_im, 0, 0, 0, 127);
imagefill($dst_im, 0, 0, $trans_colour);
imagecopy($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h);
if ($output === 'base64') {
ob_start();
imagepng($png);
$imagedata = ob_get_contents();
imagedestroy($png);
ob_end_clean();
$base64_output = base64_encode($imagedata);
} else {
imagepng($dst_im);
imagedestroy($dst_im);
}
} else {
if ($output === 'base64') {
$imagedata = file_get_contents($graphfile);
$base64_output = base64_encode($imagedata);
} else {
$fd = fopen($graphfile, 'r');
fpassthru($fd);
fclose($fd);
}
}
} elseif ($no_file) {
graph_error($width < 200 ? 'No Data' : 'No Data file');
} elseif ($rrd_options) {
rrdtool_graph($graphfile, $rrd_options);
d_echo($rrd_cmd);
if (is_file($graphfile)) {
if (! $debug) {
set_image_type();
if ($output === 'base64') {
$imagedata = file_get_contents($graphfile);
$base64_output = base64_encode($imagedata);
} else {
echo `ls -l $graphfile`;
echo '<img src="' . data_uri($graphfile, 'image/svg+xml') . '" alt="graph" />';
$fd = fopen($graphfile, 'r');
fpassthru($fd);
fclose($fd);
}
unlink($graphfile);
} else {
if ($width < 200) {
graph_error('Draw Error');
} else {
graph_error('Error Drawing Graph');
}
echo `ls -l $graphfile`;
echo '<img src="' . data_uri($graphfile, 'image/svg+xml') . '" alt="graph" />';
}
unlink($graphfile);
} elseif (isset($rrd_filename) && ! Rrd::checkRrdExists($rrd_filename)) {
graph_error($width < 200 ? 'No Data' : 'No Data file');
} else {
if ($width < 200) {
graph_error('Def Error');
} else {
graph_error('Graph Definition Error');
}
graph_error($width < 200 ? 'Draw Error' : 'Error Drawing Graph');
}
} else {
graph_error($width < 200 ? 'Def Error' : 'Graph Definition Error');
}
}