Revised html template to be responsive. Leaving beta mode! (v1.20)

This commit is contained in:
Mark Oudsen 2021-03-07 22:21:38 +01:00
parent 1a82a1ac85
commit d624fa694d
2 changed files with 137 additions and 82 deletions

View File

@ -24,6 +24,7 @@
// 1.18 2021/03/04 - Mark Oudsen - Added ability to specify Tags per trigger
// Shorten long "lastvalue" or "prevvalue"
// 1.19 2021/03/05 - Mark Oudsen - Added ability to pass Zabbix 'infoXXX' parameters for TWIG template
// 1.20 2021/03/07 - Mark Oudsen - Production level version - leaving BETA from here on ...
// ------------------------------------------------------------------------------------------------------
//
// (C) M.J.Oudsen, mark.oudsen@puzzl.nl
@ -46,16 +47,16 @@
// CONSTANTS
$cVersion = 'v1.19';
$cVersion = 'v1.20';
$cCRLF = chr(10).chr(13);
$maskDateTime = 'Y-m-d H:i:s';
// DEBUG SETTINGS
// -- Should be FALSE for production level use
$cDebug = TRUE; // Comprehensive debug logging including log storage
$cDebugMail = TRUE; // Include log in the mail message? (attachments)
$showLog = FALSE; // Display the log - !! switch to TRUE when performing CLI debugging only !!!
$cDebug = FALSE; // Extended debug logging mode
$cDebugMail = FALSE; // If TRUE, includes log in the mail message (html and plain text attachments)
$showLog = FALSE; // Display the log - !!! only use in combination with CLI mode !!!
// INCLUDE REQUIRED LIBRARIES (Composer)
// (configure at same location as the script is running or load in your own central library)
@ -94,7 +95,8 @@
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data,JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK));
curl_setopt($ch, CURLOPT_POSTFIELDS,
json_encode($data,JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK));
// Execute Curl
$data = curl_exec($ch);
@ -107,11 +109,11 @@
$data .= 'Requested page = '.$url.$cCRLF;
$data .= 'Error = '.curl_error($ch).$cCRLF;
}
else
{
else
{
_log('> Received '.strlen($data).' bytes');
$data = json_decode($data,TRUE);
}
$data = json_decode($data,TRUE);
}
// Close Curl
curl_close($ch);
@ -418,10 +420,10 @@
// Absolute path where to store the generated images - note: script does not take care of clearing out old images!
$z_path = getcwd().'/'; // Absolute base path on the filesystem for this url
$z_images_path = $z_path.'/images/';
$z_template_path = $z_path.'/templates/';
$z_tmp_cookies = $z_path.'//tmp/';
$z_log_path = $z_path.'/log/';
$z_images_path = $z_path.'images/';
$z_template_path = $z_path.'templates/';
$z_tmp_cookies = $z_path.'tmp/';
$z_log_path = $z_path.'log/';
// Zabbix user (requires Super Admin access rights to access image generator script)
$z_user = $config['zabbix_user'];
@ -608,6 +610,7 @@
// --- GET GRAPHS ASSOCIATED WITH THIS HOST ---
// Note: graph.get where itemids are specified does not seem to work!
// https://support.zabbix.com/browse/ZBX-19090
_log('# Retrieve associated graphs to this HOST');
@ -778,7 +781,7 @@
_log('> Filename = '.$graphFile);
$mailData['GRAPH_URL'] = $z_url_image . $graphFile;
$mailData['GRAPH_ZABBIXLINK'] = $z_server.'/graphs.php?form=update&graphid='.$mailData['GRAPH_ID'];
$mailData['GRAPH_ZABBIXLINK'] = $z_server.'graphs.php?form=update&graphid='.$mailData['GRAPH_ID'];
}
// Prepare HTML LOG content
@ -799,10 +802,10 @@
// Prepare others
$mailData['TRIGGER_URL'] = $z_server.'/triggers.php?form=update&triggerid='.$mailData['TRIGGER_ID'];
$mailData['ITEM_URL'] = $z_server.'/items.php?form=update&hostid='.$mailData['HOST_ID'].'&itemid='.$mailData['ITEM_ID'];
$mailData['HOST_URL'] = $z_server.'/zabbix/hosts.php?form=update&hostid='.$mailData['HOST_ID'];
$mailData['EVENTDETAILS_URL'] = $z_server.'/tr_events.php?triggerid='.$mailData['TRIGGER_ID'].'&eventid='.$mailData['EVENT_ID'];
$mailData['TRIGGER_URL'] = $z_server.'triggers.php?form=update&triggerid='.$mailData['TRIGGER_ID'];
$mailData['ITEM_URL'] = $z_server.'items.php?form=update&hostid='.$mailData['HOST_ID'].'&itemid='.$mailData['ITEM_ID'];
$mailData['HOST_URL'] = $z_server.'hosts.php?form=update&hostid='.$mailData['HOST_ID'];
$mailData['EVENTDETAILS_URL'] = $z_server.'tr_events.php?triggerid='.$mailData['TRIGGER_ID'].'&eventid='.$mailData['EVENT_ID'];
$mailData['EVENT_DURATION'] = $p_duration;
@ -812,6 +815,8 @@
_log('# Setting up mailer');
// Do we need TLS or SSL?
if (($p_smtp_transport=='tls') || ($p_smtp_transport=='ssl'))
{
$transport = (new Swift_SmtpTransport($p_smtp_server, $p_smtp_port, $p_smtp_transport));
@ -927,4 +932,4 @@
file_put_contents($z_log_path.$logName,$content);
_log('= Log stored to '.$z_log_path.$logName);
}
?>
?>

View File

@ -1,79 +1,129 @@
<html lang="en"><head><meta http-equiv=Content-Type content="text/html; charset=UTF-8">
<style>
.Resolved {
background-color:#86cc89;
border:1px solid #57bd5b;
font-family:Tahoma,Geneva,Arial,sans-serif;font-size:14px;
}
.Information {
background-color:#7499ff;
border:1px solid #4673f0;
font-family:Tahoma,Geneva,Arial,sans-serif;font-size:14px;
}
.Warning {
background-color:#FFC859;
border:1px solid #E69F10;
font-family:Tahoma,Geneva,Arial,sans-serif;font-size:14px;
}
.Average {
background-color:#FFA059;
border:1px solid #e66e15;
font-family:Tahoma,Geneva,Arial,sans-serif;font-size:14px;
}
.High {
background-color:#E97659;
border:1px solid #E45959;
font-family:Tahoma,Geneva,Arial,sans-serif;font-size:14px;
}
.Disaster {
background-color:#E45959;
border:1px solid #DE1E09;
font-family:Tahoma,Geneva,Arial,sans-serif;font-size:14px;
}
body {
font-family: Arial,sans-serif;
}
.Resolved {
background-color:#86cc89;
border:1px solid #57bd5b;
}
.Information {
background-color:#7499ff;
border:1px solid #4673f0;
}
.Warning {
background-color:#FFC859;
border:1px solid #E69F10;
}
.Average {
background-color:#FFA059;
border:1px solid #e66e15;
}
.High {
background-color:#E97659;
border:1px solid #E45959;
}
.Disaster {
background-color:#E45959;
border:1px solid #DE1E09;
}
a {
text-decoration: none;
color: #010059;
}
a:link {
text-decoration: none;
color: #010059;
}
a:visited {
text-decoration: none;
color: #010059;
}
a:active {
text-decoration: none;
color: #010059;
}
.MsgBody {
width: 100%;
}
#maintable {
width: 800px;
}
@media screen and (max-width: 800px;) {
#maintable {
width: 100%;
max-width: 790px;
}
#mainimage {
-ms-interpolation-mode: bicubic;
width: 100%;
max-width: 790px;
max-height: 450px;
}
}
.links {
font-size: 9px;
}
.header {
font-size: 16px;
font-weight: bold;
}
.content {
font-size: 14px;
}
</style>
</head>
<body>
<table style="margin: 10px;border-spacing:0 15px;border-collapse: separate;">
<tr>
<td class="{{ EVENT_SEVERITY }}" style="border-radius:10px;padding: 10px 36px 10px 36px; ">
<table class="{{ EVENT_SEVERITY }}" style="border:0; text-align:left;" cellpadding="0" cellspacing="0">
<tr><td>
<p><b>EVENT INFORMATION</b></p>
Description: <b>{{ EVENT_NAME }}</b><br/>
Host: <b>{{ HOST_NAME }}</b>
<table style="margin: 5px;border-spacing:0 10px;border-collapse: separate;" align=center>
<tr>
<td class="{{ EVENT_SEVERITY }}" style="border-radius:10px;padding:5px 18px 5px 18px; ">
<table class="{{ EVENT_SEVERITY }}" style="border:0; text-align:left;" cellpadding="0" cellspacing="0">
<tr>
<td>
<p><span class="header">EVENT INFORMATION</span></p>
<span class="content">
Description: <b>{{ EVENT_NAME }}</b><br/>
Host: <b>{{ HOST_NAME }}</b>
{% if HOST_ERROR|length > 0 %}
({{ HOST_ERROR }})
({{ HOST_ERROR }})
{% endif %}
<br/>
<br/>
{% if EVENT_OPDATE|length > 0 %}
Operational data: <b>{{ EVENT_OPDATA }}</b><br/>
Operational data: <b>{{ EVENT_OPDATA }}</b><br/>
{% endif %}
Status: <b>{{ EVENT_STATUS }}</b><br/>
Severity: <b>{{ EVENT_SEVERITY }}</b><br/>
Status: <b>{{ EVENT_STATUS }}</b><br/>
Severity: <b>{{ EVENT_SEVERITY }}</b><br/>
{% if EVENT_SEVERITY == "Resolved" %}
Duration: <b>{{ EVENT_DURATION }}</b><br/>
Duration: <b>{{ EVENT_DURATION }}</b><br/>
{% endif %}
Item: <b>{{ ITEM_NAME }}</b><br/>
Previous/Last: {{ ITEM_PREVIOUSVALUE }} ==&gt; {{ ITEM_LASTVALUE }}
<p><a href="{{ EVENTDETAILS_URL }}">Event Details</a><br/></p>
</td></tr>
</table>
</td>
</tr>
Item: <b>{{ ITEM_NAME }}</b><br/>
Previous/Last: {{ ITEM_PREVIOUSVALUE }} ==&gt; {{ ITEM_LASTVALUE }}
</span>
</td>
</tr>
</table>
</td>
</tr>
{% if GRAPH_CID|length > 0 %}
<tr>
<td align="center"><img src="{{ GRAPH_CID }}" /></td>
</tr>
<tr>
<div align=justify>
<td align="center"><img id="mainimage" border=0 style="width: 100%; max-width: 790px" alt="Zabbix Graph" src="{{ GRAPH_CID }}" /></td>
</div>
</tr>
{% endif %}
</table>
<p style="font-size:10px">
Event ID: <a href="{{ EVENTDETAILS_URL }}">{{ EVENT_ID }}</a> //
Trigger ID: <a href="{{ TRIGGER_URL }}">{{ TRIGGER_ID }}</a> //
Item ID: <a href="{{ ITEM_URL }}">{{ ITEM_ID }}</a> //
Host ID: <a href="{{ HOST_URL }}">{{ HOST_ID }}</a>
<tr>
<td class="links">
<div align=center>
Event ID: <a href="{{ EVENTDETAILS_URL }}">{{ EVENT_ID }}</a> //
Trigger ID: <a href="{{ TRIGGER_URL }}">{{ TRIGGER_ID }}</a> //
Item ID: <a href="{{ ITEM_URL }}">{{ ITEM_ID }}</a> //
Host ID: <a href="{{ HOST_URL }}">{{ HOST_ID }}</a>
{% if GRAPH_ZABBIXLINK|length > 0 %}
// Graph ID: <a href="{{ GRAPH_ZABBIXLINK }}">{{ GRAPH_ID }}</a>
// Graph ID: <a href="{{ GRAPH_ZABBIXLINK }}">{{ GRAPH_ID }}</a>
{% endif %}
</p>
</div>
</td>
</tr>
</table>
</body>
</html>
</html>