A bit of work on the html report template

This commit is contained in:
Tim Hughes 2018-11-30 13:06:49 +00:00
parent 3894c0be25
commit 69d4e2fbea
2 changed files with 117 additions and 147 deletions

View File

@ -6211,26 +6211,33 @@ sub dump_result {
if ( $opt{'reportfile'} ne 0 ) { if ( $opt{'reportfile'} ne 0 ) {
eval { require Text::Template }; eval { require Text::Template };
eval { require JSON };
if ($@) { if ($@) {
badprint "Text::Template Module is needed."; badprint "Text::Template Module is needed.";
die "Text::Template Module is needed."; die "Text::Template Module is needed.";
} }
my $vars = { 'data' => Dumper( \%result ) }; my $json = JSON->new->allow_nonref;
my $json_text = $json->pretty->encode( \%result );
my %vars = (
'data' => \%result,
'debug' => $json_text,
);
my $template; my $template;
{ {
no warnings 'once'; no warnings 'once';
$template = Text::Template->new( $template = Text::Template->new(
TYPE => 'STRING', TYPE => 'STRING',
PREPEND => q{;}, PREPEND => q{;},
SOURCE => $templateModel SOURCE => $templateModel,
DELIMITERS => [ '[%', '%]' ]
) or die "Couldn't construct template: $Text::Template::ERROR"; ) or die "Couldn't construct template: $Text::Template::ERROR";
} }
open my $fh, q(>), $opt{'reportfile'} open my $fh, q(>), $opt{'reportfile'}
or die or die
"Unable to open $opt{'reportfile'} in write mode. please check permissions for this file or directory"; "Unable to open $opt{'reportfile'} in write mode. please check permissions for this file or directory";
$template->fill_in( HASH => $vars, OUTPUT => $fh ); $template->fill_in( HASH => \%vars, OUTPUT => $fh );
close $fh; close $fh;
} }
@ -6382,7 +6389,6 @@ You must provide the remote server's total memory when connecting to other serve
--pfstat Print Performance schema --pfstat Print Performance schema
--nopfstat Don't Print Performance schema --nopfstat Don't Print Performance schema
--verbose Prints out all options (default: no verbose, dbstat, idxstat, sysstat, tbstat, pfstat) --verbose Prints out all options (default: no verbose, dbstat, idxstat, sysstat, tbstat, pfstat)
--bannedports Ports banned separated by comma(,) --bannedports Ports banned separated by comma(,)
--maxportallowed Number of ports opened allowed on this hosts --maxportallowed Number of ports opened allowed on this hosts
--cvefile <path> CVE File for vulnerability checks --cvefile <path> CVE File for vulnerability checks

View File

@ -1,153 +1,117 @@
<!DOCTYPE html> <!doctype html>
<html lang="en"> <html lang="en">
<head> <head>
<!-- Required meta tags --> <!-- Required meta tags -->
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>MySQL Tuner</title>
<meta charset="utf-8"> <!-- Bootstrap CSS -->
<meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<style type="text/css" media="screen"> <style type="text/css" media="screen">
/* Sticky footer styles /* Sticky footer styles
-------------------------------------------------- */ -------------------------------------------------- */
html { /*html {
position: relative; /* position: relative;
min-height: 100%; /* min-height: 100%;
} /*}
body { /*body {
/* Margin bottom by footer height */ /* /* Margin bottom by footer height */
margin-bottom: 10px; /* margin-bottom: 10px;
} /*}
.footer { /*.footer {
position: absolute; /* position: absolute;
#margin-left: 5px; /* #margin-left: 5px;
bottom: 0; /* bottom: 0;
width: 100%; /* width: 100%;
/* Set the fixed height of the footer here */ /* /* Set the fixed height of the footer here */
height: 30px; /* height: 30px;
line-height: 30px; /* Vertically center the text there */ /* line-height: 30px; /* Vertically center the text there */
background-color: #f5f5f5; /* background-color: #f5f5f5;
} /*}
/* Custom page CSS /* /* Custom page CSS
-------------------------------------------------- */ /* -------------------------------------------------- */
/* Not required for template or sticky footer method. */ /*/* Not required for template or sticky footer method. */
body > .container { /*body > .container {
padding: 60px 15px 0; /* padding: 60px 15px 0;
} /*}
.footer > .container { /*.footer > .container {
padding-right: 15px; /* padding-right: 15px;
padding-left: 15px; /* padding-left: 15px;
} /*}
code { /*code {
/* font-size: 80%;
/*}*/
.code-pre {
background-color: #eee;
padding: 1rem;
font-size: 80%; font-size: 80%;
} }
</style> </style>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <title>MySQL Tuner</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
</head> </head>
<body> <body>
<ul class="nav nav-tabs"> <div class="container">
<div class="pricing-header px-3 py-3 pt-md-5 pb-md-4 mx-auto text-center">
<H1>MySQL Tuner</H1> <H1>MySQL Tuner</H1>
<li class="active"><a data-toggle="tab" href="#home">Home</a></li> </div>
<li><a data-toggle="tab" href="#debug">Debug</a></li> <ul class="nav nav-tabs" role="tablist">
<li class="active" class="nav-item">
<a class="nav-link" id="home-tab" data-toggle="tab" role="tab" aria-controls="home" aria-selected="true" href="#home">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" id="debug-tab" data-toggle="tab" role="tab" aria-controls="debug" aria-selected="false" href="#debug">Debug</a>
</li>
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
<div id="home" class="tab-pane active"> <div id="home" class="tab-pane">
<h3>Home</h3> <h3>Home</h3>
<h5>Report date: </h5> <h5>Report date: [% localtime %]</h5>
<h5>Report host: </h5> <h5>Report host: [% $data{'Variables'}{'hostname'} %]</h5>
<h5>Server version: </h5> <h5>Report OS: [% $data{'OS'}{'OS Type'} %], Architecture:[% $data{'OS'}{'Architecture'} %], Ram: [% $data{'OS'}{'Physical Memory'}{'pretty'} %]</h5>
<pre>{$data}</pre> <h5>Server version: [% $data{'Variables'}{'version'} %], [% $data{'Variables'}{'version_compile_machine'} %], [% $data{'Status'}{'version_comment'} %]</h5>
<hr/>
<h3>Recommendations</h3>
<ul>
[%
foreach $i ( @{$data{'Recommendations'}} ) {
$OUT .= "<li>$i</li>";
}
%]
</ul>
<h3>Adjust variables</h3>
<ul>
[%
foreach $i ( @{$data{'Adjust variables'}} ) {
$OUT .= "<li>$i</li>";
}
%]
</ul>
<hr/> <hr/>
</div> </div>
<div id="debug" class="tab-pane fade"> <div id="debug" class="tab-pane">
<h3>Raw Result Data Structure</h3> <h3>Raw Result Data Structure</h3>
<h5>Report date: </h5> <pre class="code-pre"><code class="language-json" data-lang="json">[% $debug %]</code></pre>
<h5>Report host: </h5>
<h5>Server version: </h5>
<pre>{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}{$data}
{$data}
{$data}</pre>
<hr/> <hr/>
</div> </div>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container"> <div class="container">
<span class="text-muted">MySQL Tuner 1.7.13</span> <span class="text-muted">MySQL Tuner 1.7.13</span>
</div> </div>
</footer> </footer>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
</body> </body>
</html> </html>
<!-- vim: set ft=html ts=2 sw=2 tw=999 et :-->