119 Commits
v1.10 ... v2.15

Author SHA1 Message Date
Mark Oudsen
624ce29a39 v2.15 - Fixed issues found in Zabbix 5.4.12 and refactored Javascript for better error handling 2023-08-16 14:18:08 +02:00
moudsen
16729e0720 v2.14 - Added special thank you section 2023-07-15 15:12:24 +02:00
Mark Oudsen
97dba8f197 v2.14 - Fixed missing flag for fetching web url related items 2023-07-15 00:51:55 +02:00
Mark Oudsen
288b0adaf7 v2.14 - Adding ability to set 'From' and 'Reply-to' address details in configuration - logic refactor on itemId (obsolete) 2023-07-10 23:59:33 +02:00
Mark Oudsen
2859d427f7 v2.14 - Adding ACK_URL for direct jump to Acknowledge edit windows of Zabbix 2023-07-10 14:34:55 +02:00
Mark Oudsen
0cd169a9d2 v2.14 - Adding ability to set 'From' and 'Reply-to' address details in configuration 2023-07-10 14:32:47 +02:00
Mark Oudsen
8269195795 v2.14 - Adding ability to set 'From' address details in configuration 2023-07-10 11:21:48 +02:00
moudsen
6da6da77fb v2.14 - Configuration updates
itemId no longer required/possibel per Zabbix 6.2. T
new items for SMTP from
keeping "mail_from" for backwards compatibility.
2023-07-10 11:02:20 +02:00
Mark Oudsen
00a67cbb65 v2.14 - Adding ability to set 'From' address details in configuration 2023-07-10 10:14:52 +02:00
Mark Oudsen
bf970029ea Merge branch 'main' of github.com:moudsen/mailGraph 2023-07-10 10:09:53 +02:00
Mark Oudsen
9f3bfb5c69 v2.14 - Adding ability to set 'From' address in configuration 2023-07-10 10:09:39 +02:00
moudsen
504422f452 v2.13 updates 2023-07-06 01:22:40 +02:00
Mark Oudsen
3ef16ae597 v2.13 - Bugfixes speciifally on links into Zabbix (missing context or info) 2023-07-03 21:54:27 +02:00
Mark Oudsen
a597ce6ab3 v2.13 - Bugfixes speciifally on links into Zabbix (missing context or info) 2023-07-03 21:50:14 +02:00
moudsen
a04050c3bc v2.12 updates 2023-07-02 15:00:47 +02:00
Mark Oudsen
b81414e06d v2.12 - Replaced SwiftMailer with PHPMailer (based on AutoTLS) 2023-07-02 14:54:00 +02:00
moudsen
accb8f40d6 v2.11.1 updates 2023-07-02 14:09:00 +02:00
moudsen
bf5bbcb778 v2.11.1 updates 2023-07-02 14:07:37 +02:00
moudsen
702725e5f7 v2.11.1 updates 2023-07-02 14:06:59 +02:00
moudsen
0725e01bc0 v2.11 updates
Amended README with context and background while cleaning up historical items.
2023-07-02 13:52:59 +02:00
moudsen
a8858784a5 v2.11 - Corrected XML for Zabbix 5.4 and up 2023-07-02 13:19:16 +02:00
moudsen
39ada5d6ff v2.11 - mailGraph.xml now with correct format 2023-07-02 12:36:17 +02:00
Mark Oudsen
32b8582757 v2.11 - Improved error handling and ability to pick random problem via Zabbix for testing 2023-07-01 13:26:29 +02:00
Mark Oudsen
9c42ee4b89 v2.10 - Corrected commit due to incorrect source copy from different host 2023-06-30 10:35:17 +02:00
Mark Oudsen
fa7fba040a Merge branch 'main' of github.com:moudsen/mailGraph 2023-06-30 10:19:40 +02:00
Mark Oudsen
3a4a7ab23e v2.10 - Correction of incorrectly copied source file from different host 2023-06-30 10:16:29 +02:00
moudsen
7075b40ad1 v2.10 - Code conversion typo detected (replaced & with &&) 2023-06-30 10:05:53 +02:00
Mark Oudsen
8bc476ed63 v2.10 - Removed deprecated function dependencies 2023-06-30 08:48:59 +02:00
moudsen
e80a2a56a3 Update README.md, June 29, 2023 2023-06-29 16:16:52 +02:00
moudsen
4b28d3f066 Announcing different javascript code for the Media Type for Zabbix 6.2+ 2022-09-26 12:27:00 +02:00
moudsen
93535d4006 Update README.md 2022-08-22 11:58:34 +02:00
moudsen
b9622da72f Update README.md 2022-03-16 23:05:50 +01:00
moudsen
56fb68ae9c Rework scope change to include Zabbix 6.0 LTS testing 2022-02-22 17:35:28 +01:00
Mark Oudsen
fa51c3e59e Merge branch 'main' of github.com:moudsen/mailGraph into main 2022-01-30 16:44:58 +01:00
Mark Oudsen
4ae62b3a1f v2.02 - Added cleanup option 2022-01-30 16:44:43 +01:00
moudsen
0731b87d44 v2.02 updates 2022-01-30 16:43:14 +01:00
moudsen
bdf4b05a6b Update README.md 2021-12-16 13:57:57 +01:00
moudsen
df16444665 Update README.md 2021-12-16 13:55:03 +01:00
Mark Oudsen
bccd134523 Merge branch 'main' of github.com:moudsen/mailGraph into main 2021-12-16 13:46:43 +01:00
Mark Oudsen
27c1d64511 v2.0 - Bugfixes and dealing with API changes in Zabbix 5.4 such itemId no longer passed by Zabbix itself 2021-12-16 13:46:18 +01:00
moudsen
8597658670 v1.31 updates 2021-10-06 13:54:11 +02:00
Mark Oudsen
b7e2062486 Merge branch 'main' of github.com:moudsen/mailGraph into main 2021-10-06 11:15:33 +02:00
Mark Oudsen
2955ffc404 (v1.31) Removal of trival errors and fix for 'json error' messages in Zabbix on clean install and default PHP settings 2021-10-06 11:15:17 +02:00
moudsen
2976a4af9c Fixed a bug when configuration file is empty 2021-07-17 23:45:50 +02:00
moudsen
2882367308 Minor bugfixes notification (fixed in current v1.29) 2021-07-07 19:54:46 +02:00
moudsen
8b4885038a Minor bugfix where HTTPProxy variable was not picked up correctly due to type 2021-07-07 19:39:02 +02:00
moudsen
f541719fbe Added example to show how Zabbix Media Type configuration looks like 2021-07-07 12:37:01 +02:00
Mark Oudsen
9edab245d8 Merge branch 'main' of github.com:moudsen/mailGraph into main 2021-07-05 22:47:37 +02:00
Mark Oudsen
341bd561ab Now shows mailGraph version when invoked from CLI (for testing) 2021-07-05 22:47:05 +02:00
moudsen
e2f657f3dd Updated to v1.29 2021-04-03 16:31:10 +02:00
Mark Oudsen
82a8fe4121 Merge branch 'main' of github.com:moudsen/mailGraph into main 2021-04-03 16:29:40 +02:00
Mark Oudsen
bee76b63c0 Bugfix - Stricter JSONRPC version check by Zabbix (v1.29) 2021-04-03 16:29:26 +02:00
moudsen
ba0d474bdb Update README.md 2021-03-24 12:35:49 +01:00
moudsen
a5a0f0ace1 Update README.md 2021-03-24 12:34:34 +01:00
moudsen
8655d4ca2c Updated to v1.28 2021-03-24 12:33:10 +01:00
moudsen
76321be3f8 Update README.md 2021-03-24 12:28:39 +01:00
Mark Oudsen
9d4f00ce87 Merge branch 'main' of github.com:moudsen/mailGraph into main 2021-03-24 12:27:54 +01:00
Mark Oudsen
1278d43acb Added ability to specify SMTP username/password (v1.28) 2021-03-24 12:27:44 +01:00
moudsen
18c22abf17 Updated to v1.27 2021-03-20 14:09:51 +01:00
moudsen
0a623f3137 Updated to v1.27 2021-03-20 14:08:57 +01:00
Mark Oudsen
634134b423 Ability to add additional grapgs through Tagging of Trigger of Host and associate Template update (v1.27) 2021-03-20 14:06:08 +01:00
Mark Oudsen
58668311ee Merge branch 'main' of github.com:moudsen/mailGraph into main 2021-03-19 12:22:15 +01:00
Mark Oudsen
9052b71562 Bug fixes after refactoring in v1.25, maskerading usernames/passwords in logging (v1.26) 2021-03-19 12:22:01 +01:00
moudsen
74b6ee15c7 v1.26 released 2021-03-19 12:05:35 +01:00
Mark Oudsen
398637e582 Merge branch 'main' of github.com:moudsen/mailGraph into main 2021-03-19 12:01:50 +01:00
Mark Oudsen
9e40060cdd Bug fixes after refactoring in v1.25, maskerading usernames/passwords in logging (v1.26) 2021-03-19 12:01:41 +01:00
moudsen
e85400b0de Update README.md 2021-03-17 14:03:15 +01:00
Mark Oudsen
e05fcbfba7 Merge branch 'main' of github.com:moudsen/mailGraph into main 2021-03-17 13:57:34 +01:00
Mark Oudsen
66b504a66c Refactoring for optimized flow and relevant data retrieval (v1.25) 2021-03-17 13:57:25 +01:00
moudsen
bc0c83b544 Update README.md 2021-03-17 13:07:08 +01:00
Mark Oudsen
17cdbea2bd Refactoring for optimized flow and relevant data retrieval (v1.25) 2021-03-17 13:03:54 +01:00
Mark Oudsen
fb51354649 Added ability to configure HTTP proxy (v1.24) 2021-03-12 16:33:44 +01:00
Mark Oudsen
78061964c4 Added ability to configure HTTP proxy (v1.24) 2021-03-12 16:23:47 +01:00
Mark Oudsen
1c9786c549 Bugfix (v1.23) 2021-03-12 15:41:48 +01:00
Mark Oudsen
37b1ea7ea2 Added Stacked,Pie and Exploded graph type support (v1.23) 2021-03-12 15:38:46 +01:00
moudsen
cb96ecaf24 Update README.md
Moved most of README to Wiki for purpose of better documentation.
2021-03-10 21:48:30 +01:00
Mark Oudsen
71df37e612 Renewed example image (v1.22) 2021-03-10 21:47:06 +01:00
moudsen
e861d0c7d0 Delete Example-mail-message.png 2021-03-10 21:43:59 +01:00
moudsen
73ce4adb9c Update README.md 2021-03-10 21:40:40 +01:00
Mark Oudsen
e262f21dc8 Added ability to embed multiple periods of the same graph (v1.22) 2021-03-10 19:57:42 +01:00
moudsen
7f6d5ccd03 Update README.md 2021-03-10 19:34:15 +01:00
moudsen
162bf1b932 Update README.md 2021-03-10 18:22:35 +01:00
Mark Oudsen
6ff6a2c55d Optimized grapg.get and minor bugfixes (v1.21) 2021-03-09 10:21:06 +01:00
moudsen
7ee5324aeb Update README.md 2021-03-09 10:19:03 +01:00
moudsen
88d8c018f5 Update README.md 2021-03-07 22:36:40 +01:00
Mark Oudsen
b7935b0a47 Merge branch 'main' of github.com:moudsen/mailGraph into main 2021-03-07 22:21:59 +01:00
Mark Oudsen
d624fa694d Revised html template to be responsive. Leaving beta mode! (v1.20) 2021-03-07 22:21:38 +01:00
moudsen
7c4d8a7ff8 Update README.md 2021-03-05 13:44:10 +01:00
moudsen
1a82a1ac85 Update README.md 2021-03-05 13:10:39 +01:00
Mark Oudsen
5797538519 Several enhancements and bugfixes - getting ready for v1.20 release (v1.19) 2021-03-05 11:57:01 +01:00
moudsen
0c7d577975 Update README.md 2021-03-05 10:25:19 +01:00
moudsen
497e7c3fe9 Update README.md
v1.18 and v1.19 updates refllected in the READ.ME.
Considering to move part of the work into the Wiki section while progressing towards the next milestone release (v1.20).
2021-03-05 10:22:37 +01:00
moudsen
fd48cb604e Update README.md 2021-03-04 14:32:07 +01:00
Mark Oudsen
f2075d161d Merge branch 'main' of github.com:moudsen/mailGraph into main 2021-03-04 14:29:50 +01:00
Mark Oudsen
2970f10be1 Added Tag processing for Triggers to set period or force different graph to be displayed (v1.18) 2021-03-04 14:29:35 +01:00
moudsen
e3913d9813 Update README.md 2021-03-03 23:29:34 +01:00
Mark Oudsen
c0e31d37be Added ability to specify the period of the graph (v1.17) 2021-03-03 23:26:35 +01:00
Mark Oudsen
42bea0df98 Fixed graph.get issue with workaround; several bugfixes and enhancements (v1.16) 2021-03-02 23:17:03 +01:00
moudsen
cb8d2cb546 Update README.md 2021-03-01 20:27:13 +01:00
Mark Oudsen
2808544170 Revised way of identifying graphs that can be embedded (v1.15)[5] 2021-03-01 20:22:42 +01:00
Mark Oudsen
995fdf0b68 Added ability to apply non-strict SSL email transportation (v1.14) 2021-03-01 19:51:11 +01:00
Mark Oudsen
db81193e17 Added transport none,ssl,tls to config.json as smtp_transport (v1.13) 2021-03-01 18:36:28 +01:00
Mark Oudsen
1fb10ed089 smtp server configuration via config.json - fixed config template bug (v1.12) 2021-03-01 18:13:32 +01:00
moudsen
7e1c5e5d98 Update README.md 2021-03-01 17:48:41 +01:00
moudsen
4f4c41f991 Merge pull request #4 from moudsen/add-code-of-conduct-1
Create CODE_OF_CONDUCT.md
2021-02-28 22:17:32 +01:00
moudsen
15512cf35a Create CODE_OF_CONDUCT.md 2021-02-28 22:16:46 +01:00
moudsen
2ba2946f30 Update Readme.md v1.11
Readme that is up to date with v1.11 release.
2021-02-28 21:53:20 +01:00
Mark Oudsen
ff0c686ae0 Adjusted config template - (v1.11) 2021-02-28 21:48:46 +01:00
Mark Oudsen
6289a1cbdb Bug fixes (v1.11) 2021-02-28 21:31:46 +01:00
moudsen
3ec9004db9 Update README.md 2021-02-28 14:51:10 +01:00
Mark Oudsen
dcb523d1cb Example mail message picture 2021-02-27 23:26:01 +01:00
moudsen
f4d7adca16 Delete images directory 2021-02-27 23:24:14 +01:00
moudsen
617df995b4 Update README.md 2021-02-27 23:23:28 +01:00
moudsen
2d93ce0425 Update README.md 2021-02-27 23:22:02 +01:00
moudsen
06eebd02e1 Update README.md 2021-02-27 23:17:56 +01:00
moudsen
010bce74bc Update README.md 2021-02-27 23:16:05 +01:00
Mark Oudsen
931ce2ca9b Adding example mail message (v1.10) 2021-02-27 23:07:59 +01:00
Mark Oudsen
b2ebf778ac Fixed issue with duration - not passed in seconds but formatted already - v1.10 2021-02-27 22:44:23 +01:00
moudsen
e3cd9815d2 Update README.md 2021-02-27 22:39:21 +01:00
13 changed files with 1760 additions and 597 deletions

49
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,49 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at abuse@puzzl.nl. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq

195
README.md
View File

@@ -1,146 +1,129 @@
# mailGraph ## Introduction ##
Zabbix Media module and scripts for sending e-mail alerts with graphs. Over the years I've been using Zabbix as both personal and business solution for monitoring. One of the missing features in Zabbix itself was the ability to have graphs generated and associated to monitoring messages as well as an easy way to jump back into Zabbix when searching for monitoring information for specific events, problems or to have a direct link to the associated Zabbix item or host.
# WORK IN PROGRESS This initiated the development of mailGraph v1 in Zabbix 5.4 delivering an elementary solution for sending HTML enriched messages from Zabbix including graphs.
Getting the code ready for further distribution. To facilitate in a very flexible way to setup and format messages including the graphs, Twig made its introduction towards mailGraph v2, the current release branch of mailGraph.
# Installation pre-requisites The below message is just an example of what MailGraph is capable of. The template engine in Twig allows for a fully customized message creation to your needs! It is also possible to add more Zabbix fields as any field is passed to Twig when accessible in Zabbix through the macro mechanism. Example: `{ITEM.ID}`.
The suggested installation path of this script is on the same host where Zabbix lives but outside the actual Zabbix directory, although it is possible to run the script entirely somewhere else (the code is webhook based, picking up information from Zabbix is via the front-end login and API).
# I'm assuming Note that all Zabbix host, item or screen related information is made available to Twig automatically.
- you are familiar with "composer"
- you know how to configure a webserver/virtual host
- that you have CURL and PHP installed
# Prepare the installation Example message:
- Pick a directory within a (virtual) host of your webserver
- Create the directories "config", "images", "log", "templates" and "tmp" inside this directory
- Copy .htaccess to the main directory _(if not using Apache make sure your webserver denies access to /config!)_
- Copy mailGraph.php to the main directory
- Install SwiftMailer: "composer require swiftmailer/swiftmailer"
- Install TWIG: "composer require twig/twig"
- Copy config/config.php to your /config directory
- Copy config/config.json.template to your /config/ directory and rename to "config.json"
- Copy templates/html.template and templates/plain.template to your templates directory
- Copy mailGraph.xml to a location where you can upload the Media Type to Zabbix
# Configuration [![](images/Example-mail-message-v122.png?raw=true)](images/Example-mail-message-v122.png)
- Goto your /config directory
- Two ways to configure the config.json file: 1) with config.php or 2) with your favorite text editor (note that you must have knowledge of JSON format to use this option)'
- List the available configuration options with "php config.php config.json list"
- Change any option with "php config.php config.json replace 'key_name' 'new_value'" (note the usage of the single quotes from the command-line!)
**"script_baseurl"** should point to the URL of your directory (ie. "https://mydomain.com/mailgraph/"). Note the ending '/'! mailGraph is capable of adding several series of graphs into a single message delivering a unique experience when and how groups of graph images per the requested periods of time are added.
Currently mailGraph supports hosts, (one or more related) items and screens (applicable to Zabbix 5.4 only).
**"zabbix_user"** must be a Zabbix SuperAdmin user you create to login to Zabbix (this is for grabbing the images via the regular Zabbix routines). More information can be found in the Wiki.
**"zabbix_user_api"** must also be a Zabbix SuperAdmin user your create to login to the Zabbix API (this is for grabbing the information of the event via the Zabbix API). ## Installation ##
Please refer to the Wiki how to get mailGraph installed and configured on your system.
**"mail_from"** must be a valid e-mail address which represents the 'from' address in the mails that are sent (ie. "zabbix.mailgraph.noreply@domain.com"). ## mailGraph v2.15 release ##
_(2023/08/16)_
# Load the Media Type "MailGraph" into Zabbix _This version has been verified with Zabbix 5.4 and 6.0 LTS and is expected to work with 6.4 and later (based on v2.10 testing)_
- Login to your Zabbix instance
- Goto "Administration" => "Media yypes"
- Import the "mailGraph.xml" file
- Edit the new media type
- Configure some of the macros associated
"baseURL" must contain your Zabbix URL (ie. "https://mydomain.com/zabbix/"). Note the ending '/'! Release notes
- Fixed new error condition found in Zabbix 5.4.12 where zeroed or blank parameters for a webhook are no longer added as parameters in the Javascript.
- Refactored error handling inside the Javascript to distinguish automatically between 'email ID response' or a debug or warning level message (this prevents the code of throwing an unknown error like 'Invalid JSON').
You can set your custom "graphWidth" and "GraphHeight" to your convenience. ## mailGraph v2.14 release ##
_(2023/07/10)_
You can switch the graph legend on/off with "showLegend" (0=off,1=on). _This version has been verified with Zabbix 5.4 and 6.0 LTS and is expected to work with 6.4 and later (based on v2.10 testing)_
You can change the "subject" of the e-mail that is sent (note that the markup can be a combination of Zabbix MACRO or TWIG notation!). Release notes
- Adding the ability to define FROM details for the emails generated by mailGraph
- `smtp_from_address` to set the from mail address (if not set uses mailing system default). Note: obsolete `mail_from` but retained for backwards compatibility.
- `smtp_from_name` to set the name that goes with the mail address (if not set uses "mailGraph").
- Adding the ability to define REPLY_TO details for the emails generated by mailGraph
- `smtp_reply_address` to set the reply-to mail address (if not set, no reply-to will be added to the message).
- `smtp_reply_name` to set the reply-to name of the mailbox (if not set defaults to "mailGraph feedback").
- Adding a new URL for use in the template:
- `ACK_URL` points to the function in Zabbix for editing and submitting an Acknowledge statement.
"URL" is the url to the mailGraph script (ie. "https://mydomain.com/mailGraph.php"). ## mailGraph v2.13 release ##
_(2023/07/03)_
# Actions configuration _This version has been verified with Zabbix 5.4 and 6.0 LTS and is expected to work with 6.4 and later (based on v2.10 testing)_
At this point the Media type is ready for configuration under "actions" as per the regular way of Zabbix alert processing. Please refer to the manual how to configure.
# Template adjustments Release notes
I've picked TWIG as the template processor, where the following macros are available for your convenience. Feel free to adjust the html.template and plain.template files as you see fit for your situation! - Fixed references into Zabbix
- Trigger was missing "context" parameter
- Item was missing "context" parameter
- Problems reference to this host was not generated at all
Values available: ## mailGraph v2.12 release ##
_(2023/07/02)_
{{ baseURL }} - base url of the Zabbix system (use for references to API and login) _This version has been verified with Zabbix 5.4 and 6.0 LTS and is expected to work with 6.4 and later (based on v2.10 testing)_
{{ TRIGGER_ID }} - id of the applicable trigger Release notes
- Replaced Swiftmailer with PHPMailer
- Configuration option "smtp_transport" removed (using PHPMailer AutoTLS)
- Code cleanup (markup and obsolete related parts)
- Addressed any PHP message (deprecation or error) - mailGraph debug output is now "clean" in PHP 7.4.x and PHP 8.2.x
- Increased maximum number of graphs from 4 to 8
{{ TRIGGER_DESCRIPTION }} - raw trigger description (note: macros are not parsed!) **Please consider to move to PHPMailer as soon as possible as Swiftmailer is abandoned. Installation instructions are included on the wiki.**
{{ TRIGGER_COMMENTS }} - comments of the trigger Principal approach: `composer require phpmailer/phpmailer`, install mailGraph v2.12 or higher.
{{ TRIGGER_URL }} - url of the trigger form In case Swiftmailer is no longer used elsewhere you can consider to remove this package with `swiftmailer/swiftmailer`.
{{ ITEM_ID }} - id of the associated item to the trigger ## mailGraph v2.11 release ##
_(2023/07/01)_
{{ ITEM_KEY }} - key of the item _This version has been verified with Zabbix 5.4 and 6.0 LTS and is expected to work with 6.4 and later (based on v2.10 testing)_
{{ ITEM_NAME }} - item name Release notes
- Added pre- and postchecking of variables to the Zabbix javascript - this will prevent the 'invalid JSON' messages and provide better feedback for errors
- When testing MailGraph it is now possible to set the eventId to zero - a random problem will be picked up via the API
- Zabbix Media Type XML reverted back to version 5.4 (for backwards compatibility)
{{ ITEM_DESCRIPTION }} - description of the item Modified files
- mailGraph.php
- mailGraph.xml
- javascript/zabbix.mailGraph.js
{{ ITEM_LASTVALUE }} - last value of the item For those upgrading to the latest release without installing the media type:
- copy new mailGraph.php over existing mailGraph.php
- open the Media type MailGraph in Zabbix and edit the javascript
-- replace the script contents with the contents of javascript/zabbix.mailGraph.js
{{ ITEM_PREVIOUSVALUE }} - the value of the before LASTVALUE Changes are in effect immediately, no need to restart any services.
{{ ITEM_URL }} - url of the item form ## mailGraph v2.10 release ##
_(2023/06/30)_
{{ HOST_ID }} - id of the associated host to the item _This version has been verified with Zabbix 5.4, 6.0 LTS and 6.4, PHP 7.4 and 8.2 and recent versions of libraries used via composer._
{{ HOST_NAME }} - name of the host Minor updates to the mailGraph code
- When not defining zabbix_api_user and zabbix_api_pwd in the configuration file the zbx_user and zbx_user_pwd wll be used
{{ HOST_ERROR }} - last error state of the applicable host ## Zabbix 6.4.x testing ##
_(2023/06/30)_
{{ HOST_DESCRIPTION }} - description of the host Zabbix 6.4 verification has succesfully completed.
- Refactored code to remove deprecated and removed functions since Zabbix 6.4.0
-- Zabbix Javascript now using HttpRequest instead of CurlHttpRequest (function name changes implemented)
-- Zabbix API user.login is now based on "username" (instead of "user")
{{ HOST_URL }} - url of the host form Sidenotes
- Zabbix logging still shows deprecation messages however it is believed these are internal to Zabbix and not related to mailGraph
{{ EVENT_ID }} - id of the associated event _(2023/06/29)_
{{ EVENT_NAME }} - name of the event (note: macros are parsed!) Zabbix 6.4.x verification is in progress. Required intermediate release to fix one major issue (Zabbix login parameters deprecation) and some minor coding updates.
Expect to continue with automatic configuration within the next 2 months.
{{ EVENT_OPDATA }} - associated operational data of the vent ## Special thank you ##
I would like to express my gratitude to the following people that have actively contributed to bring bugs and improvements to my attention:
- [pqvindesland](https://github.com/pqvindesland)
{{ EVENT_VALUE }} - event state (0=Recovered, 1=Triggered/Active) ## IMPORTANT NOTE for users of mailGraph v1 and Zabbix versions under 5.4 ##
As a result of a major functional change in Zabbix 5.4 (Screens no longer exist and are all moved into Dashboards) the mailGraph.screen macro no longer functions under Zabbix 5.4+. A code rewrite is in progress to deal with detecting the Zabbix version and to pick dashboard.get instead of screen.get as a source list for the graphs that should be included in the mail message.
{{ EVENT_SEVERITY }} - severity of the event **v1.x is no longer supported; please upgrade to the current v2 release**
{{ EVENT_STATUS }} - status of the event
{{ EVENT_URL }} - url of the event details
{{ GRAPH_ID }} - id of the (first) associated graph that contains the item
{{ GRAPH_NAME }} - name of this graph
{{ GRAPH_URL }} - URL to this graph (assuming script produces to an accessible location)
{{ GRAPH_CID }} - IMG embed string (<img src="{{ GRAPH_CID }}" />)
{{ LOG_HTML }} - script log in HTML format
{{ LOG_PLAIN }} - script log in PLAIN text format
# Troubleshooting
In general if something goes wrong (no output), use the following sequence to identify where the error has occured (and raise an issue in this repository so I can take a look at it):
- Goto Zabbix => Reports => Action Log and search for events with Status "Failed"
- Note the itemId, triggerId and eventId from this event for testing the Media Type manually
- If the popup message says "Syntax Error" something went wrong with the processing during the script. In this case you have to investigate a bit more what is happening.
The easiest way to test what is happening is to now goto Administration => Media types and hit the "Test" at the right hand side for MailGraph.
- Replace relevant macros with information (eventId, triggerId, itemId, recipient, baseUrl and URL) and hit "Test"
- The last line in the result will tell you what the problem is (most likely an access or connectivity issue)
- Fix accordingly and retry
To facilitate troubleshooting, you can (at code level):
- switch on $cDebugMail to receive processing logs as attachment of an e-mail message
- store logs in the /log directory when $cDebug is switched on
In case of an issue that happens before an e-mail is sent, you can also perform a CLI based test:
- php mailGraph.php test
Note that you have to set the configuration items starting with "cli" in config.json with actual values from a previous message to make this work!
Last resort is to raise an issue in this repository and I will try to assist as soon as possible to fix it.

View File

@@ -1,15 +1,31 @@
{ {
"script_baseurl": "https:\/\/domain.com\/", "script_baseurl": "https:\/\/mydomain.com\/",
"cli_itemId": 0,
"cli_triggerId": 0,
"cli_eventId": 0, "cli_eventId": 0,
"cli_eventValue": 0,
"cli_duration": 0, "cli_duration": 0,
"cli_recipient": "recipient@domain.com", "cli_recipient": "recipient@mydomain.com",
"cli_baseURL": "https:\/\/domain.com\/zabbix\/", "cli_subject": "[TEST] {{ HOST_NAME|raw }}: ({{ EVENT_SEVERITY }}) {{ EVENT_NAME|raw }}",
"cli_baseURL": "https:\/\/mydomain.com\/zabbix\/",
"cli_period": "30m",
"cli_period_header": "Last 30 minutes",
"cli_debug": 1,
"cli_proxy": "",
"zabbix_user": "alogicalusername", "zabbix_user": "alogicalusername",
"zabbix_pwd": "astrongpassword", "zabbix_user_pwd": "astrongpassword",
"zabbix_api_user": "alogicalusername", "zabbix_api_user": "alogicalusername",
"zabbix_api_pwd": "astrongpassword", "zabbix_api_pwd": "astrongpassword",
"mail_from": "sender@domain.com" "subject": "{{ HOST_NAME|raw }}: ({{ EVENT_SEVERITY }}) {{ EVENT_NAME|raw }}",
"smtp_server": "localhost",
"smtp_port": 25,
"smtp_transport": "none",
"smtp_from_address": "mailgraph@mydomain.com",
"smtp_from_name": "mailGraph",
"smtp_reply_address": "feedback@mydomain.com",
"smtp_from_name": "mailGraph response mailbox",
"smtp_strict": "yes",
"graph_match": "any",
"period": "20m",
"period_header": "Last 20 minutes",
"retention_images": 7,
"retention_logs": 14,
"debug": 0
} }

View File

@@ -0,0 +1,29 @@
{
"script_baseurl": "https:\/\/mydomain.com\/",
"cli_eventId": 0,
"cli_duration": 0,
"cli_recipient": "recipient@mydomain.com",
"cli_subject": "[TEST] {{ HOST_NAME|raw }}: ({{ EVENT_SEVERITY }}) {{ EVENT_NAME|raw }}",
"cli_baseURL": "https:\/\/mydomain.com\/zabbix\/",
"cli_periods": "10m,4h,2d,7d",
"cli_periods_headers": "Last 10 minutes,Last 4 hours,Last 2 days,Last 7 days",
"cli_debug": 1,
"cli_proxy": "",
"zabbix_user": "alogicalusername",
"zabbix_user_pwd": "astrongpassword",
"zabbix_api_user": "alogicalusername",
"zabbix_api_pwd": "astrongpassword",
"subject": "{{ HOST_NAME|raw }}: ({{ EVENT_SEVERITY }}) {{ EVENT_NAME|raw }}",
"smtp_server": "localhost",
"smtp_port": 25,
"smtp_transport": "none",
"smtp_strict": "yes",
"smtp_from_address": "mailgraph@mydomain.com",
"smtp_from_name": "mailGraph",
"smtp_reply_address": "feedback@mydomain.com",
"smtp_from_name": "mailGraph response mailbox",
"graph_match": "any",
"periods": "10m,4h,2d,7d",
"periods_headers": "Last 10 minutes,Last 4 hours,Last 2 days,Last 7 days",
"debug": 0
}

View File

@@ -27,7 +27,7 @@
$content = file_get_contents($argv[1]); $content = file_get_contents($argv[1]);
$data = json_decode($content,TRUE); $data = json_decode($content,TRUE);
if ($data==NULL) if (($data==NULL) && (sizeof($content)>2))
{ {
echo 'Invalid JSON format in config file?!'.$cCRLF; echo 'Invalid JSON format in config file?!'.$cCRLF;
die; die;
@@ -138,4 +138,4 @@
default: default:
echo 'Unknown command?'.$cCRLF; echo 'Unknown command?'.$cCRLF;
} }
?> ?>

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

1
javascript/READ.ME Normal file
View File

@@ -0,0 +1 @@
Issue #32 has been resolved. The javascript code now works for Zabbix 5.4, 6.0 LTS and 6.4.

View File

@@ -0,0 +1,99 @@
// mailGraph v2.15
// Function to test string
function isJSON(str) {
try {
JSON.stringify(JSON.parse(str));
return true;
} catch (e) {
return false;
}
}
try {
// Pickup parameters
params = JSON.parse(value),
req = new HttpRequest(),
fields = {},
resp = '',
result = { tags: {} };
// Set HTTP proxy if required
if (typeof params.HTTPProxy === 'string' && params.HTTPProxy.trim() !== '') {
req.setProxy(params.HTTPProxy);
fields.HTTPProxy = params.HTTPProxy;
}
// Declare output type
req.addHeader('Content-Type: application/json');
// Pick up fields relevant for mailGraph API level call while parsing/casting fields that should be integer
fields.itemId = params.itemId * 1;
fields.eventId = params.eventId * 1;
fields.recipient = params.recipient;
fields.baseURL = params.baseURL;
fields.duration = params.duration * 1;
if (fields.recipient.charAt(0) == '{') {
throw '[MailGraph Webhook] Please define recipient for the test message!';
}
// Optional fields
if (typeof params.graphWidth === 'string') { fields.graphWidth = params.graphWidth; }
if (typeof params.graphHeight === 'string') { fields.graphHeight = params.graphHeight; }
if (typeof params.subject === 'string') { fields.subject = params.subject; }
if (typeof params.showLegend === 'string') { fields.showLegend = params.showLegend; }
if (typeof params.periods === 'string') { fields.periods = params.periods; }
if (typeof params.periods_headers === 'string') { fields.periods_headers = params.periods_headers; }
if (typeof params.debug === 'string') { fields.debug = params.debug; }
// Add generic fields
Object.keys(params).forEach(function(key) {
if (key.substring(0, 4) == 'info') {
fields[key] = params[key];
}
});
// Post information to the processing script
Zabbix.Log(4, '[MailGraph Webhook] Sending request: ' + params.URL + '?' + JSON.stringify(fields));
var resp = req.post(params.URL,JSON.stringify(fields));
Zabbix.Log(4, '[Mailgraph Webhook] Received response:' + resp);
// The response can be
// - did not receive status 200 as result (contains HTTP server response)
// - null (no response received at all)
// - empty string (likely no e-mail sent due to recipient issue)
// - not json (debugging message for troubleshooting or configuration hints)
// - json (contains the mail message ID sent)
if (req.getStatus() != 200) {
throw '[MailGraph Webhook] Processing of mailGraph.php failed: ' + resp;
}
if (resp==null) {
throw '[MailGraph Webhook] No response received from mailGraph.php? This should not occur (check URL and your webserver!)';
}
if (resp=='') {
throw '[MailGraph Webhook] No data received from mailGraph - please check recipient address or mailGraph log and retry.';
}
// Check if JSON was returned
if (!isJSON(resp)) {
throw '[MailGraph Webhook] An error has occurred during processing: ' + resp;
}
// We expect the message id back from the processing script response in JSON format
msg = JSON.parse(resp);
result.tags.__message_id = msg.messageId;
Zabbix.Log(4, '[MailGraph Webhook] Message sent with identification "' + msg.messageId + '"');
// Pass the result back to Zabbix
return JSON.stringify(result);
}
catch (error)
{
// In case something else went wrong in the processing, pass the error back to Zabbix
Zabbix.Log(127, 'MailGraph notification failed: '+error);
throw 'MailGraph notification failed : '+error;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<zabbix_export> <zabbix_export>
<version>5.0</version> <version>5.4</version>
<date>2021-02-27T16:34:16Z</date> <date>2023-08-16T12:05:37Z</date>
<media_types> <media_types>
<media_type> <media_type>
<name>MailGraph</name> <name>MailGraph</name>
@@ -9,7 +9,7 @@
<parameters> <parameters>
<parameter> <parameter>
<name>baseURL</name> <name>baseURL</name>
<value>https://zbx.puzzl.nl/zabbix/</value> <value>https://myzabbix.com/zabbix/</value>
</parameter> </parameter>
<parameter> <parameter>
<name>duration</name> <name>duration</name>
@@ -19,10 +19,6 @@
<name>eventId</name> <name>eventId</name>
<value>{EVENT.ID}</value> <value>{EVENT.ID}</value>
</parameter> </parameter>
<parameter>
<name>eventValue</name>
<value>{EVENT.VALUE}</value>
</parameter>
<parameter> <parameter>
<name>graphHeight</name> <name>graphHeight</name>
<value>120</value> <value>120</value>
@@ -36,8 +32,16 @@
<value/> <value/>
</parameter> </parameter>
<parameter> <parameter>
<name>itemId</name> <name>infoTest</name>
<value>{ITEM.ID}</value> <value>Test</value>
</parameter>
<parameter>
<name>periods</name>
<value>10m,4h,1d,7d</value>
</parameter>
<parameter>
<name>periods_headers</name>
<value>Last 10 minutes,Last 4 hours,Last day,Last 7 days</value>
</parameter> </parameter>
<parameter> <parameter>
<name>recipient</name> <name>recipient</name>
@@ -49,153 +53,161 @@
</parameter> </parameter>
<parameter> <parameter>
<name>subject</name> <name>subject</name>
<value>{{ EVENT_SEVERITY }} --- {{ EVENT_NAME }}</value> <value>{{ HOST_NAME|raw }}: ({{ EVENT_SEVERITY }}) {{ EVENT_NAME|raw }}</value>
</parameter>
<parameter>
<name>triggerId</name>
<value>{TRIGGER.ID}</value>
</parameter> </parameter>
<parameter> <parameter>
<name>URL</name> <name>URL</name>
<value>https://zbx.puzzl.nl/mailGraph.php</value> <value>https://myzabbix.com/mailGraph.php</value>
</parameter> </parameter>
</parameters> </parameters>
<script>try {&#13; <script>// mailGraph v2.15
// Pickup parameters&#13;
params = JSON.parse(value),&#13; // Function to test string
req = new CurlHttpRequest(),&#13; function isJSON(str) {
fields = {},&#13; try {
resp = '',&#13; JSON.stringify(JSON.parse(str));
result = { tags: {} };&#13; return true;
&#13; } catch (e) {
// Set HTTP proxy if required&#13; return false;
if (typeof params.HTTPProxy === 'string' &amp;&amp; params.HTTPProxy.trim() !== '') { req.setProxy(params.HTTPProxy); }&#13; }
&#13; }
// Declare output type&#13;
req.AddHeader('Content-Type: application/json');&#13; try {
&#13; // Pickup parameters
// Must have fields&#13; params = JSON.parse(value),
fields.itemId = params.itemId;&#13; req = new HttpRequest(),
fields.triggerId = params.triggerId;&#13; fields = {},
fields.eventId = params.eventId;&#13; resp = '',
fields.eventValue = params.eventValue;&#13; result = { tags: {} };
fields.recipient = params.recipient;&#13;
fields.baseURL = params.baseURL;&#13; // Set HTTP proxy if required
fields.duration = params.duration;&#13; if (typeof params.HTTPProxy === 'string' &amp;&amp; params.HTTPProxy.trim() !== '') {
&#13; req.setProxy(params.HTTPProxy);
// Optional fields&#13; fields.HTTPProxy = params.HTTPProxy;
if (typeof params.graphWidth === 'string') { fields.graphWidth = params.graphWidth; }&#13; }
if (typeof params.graphHeight === 'string') { fields.graphHeight = params.graphHeight; }&#13;
if (typeof params.subject === 'string') { fields.subject = params.subject; }&#13; // Declare output type
if (typeof params.showLegend === 'string') { fields.showLegend = params.showLegend; }&#13; req.addHeader('Content-Type: application/json');
&#13;
// Post information to the processing script&#13; // Pick up fields relevant for mailGraph API level call while parsing/casting fields that should be integer
Zabbix.Log(4, '[MailGraph Webhook] Sending request: ' + params.URL + '?' + JSON.stringify(fields));&#13; fields.itemId = params.itemId * 1;
var resp = req.Post(params.URL,JSON.stringify(fields));&#13; fields.eventId = params.eventId * 1;
Zabbix.Log(4, '[Mailgraph Webhook] Receiving response:' + resp);&#13; fields.recipient = params.recipient;
&#13; fields.baseURL = params.baseURL;
// If there was an error, report it&#13; fields.duration = params.duration * 1;
if (req.Status() != 200) { throw JSON.parse(resp).errors[0]; }&#13;
&#13; if (fields.recipient.charAt(0) == '{') {
// We expect the message id back from the processing script&#13; throw '[MailGraph Webhook] Please define recipient for the test message!';
resp = JSON.parse(resp);&#13; }
result.tags.__message_id = resp.messageId;&#13;
&#13; // Optional fields
// Pass the result back to Zabbix&#13; if (typeof params.graphWidth === 'string') { fields.graphWidth = params.graphWidth; }
return JSON.stringify(result);&#13; if (typeof params.graphHeight === 'string') { fields.graphHeight = params.graphHeight; }
}&#13; if (typeof params.subject === 'string') { fields.subject = params.subject; }
catch (error)&#13; if (typeof params.showLegend === 'string') { fields.showLegend = params.showLegend; }
{&#13; if (typeof params.periods === 'string') { fields.periods = params.periods; }
// In case something went wrong in the processing, pass the error back to Zabbix&#13; if (typeof params.periods_headers === 'string') { fields.periods_headers = params.periods_headers; }
Zabbix.Log(127, 'MailGraph notification failed : '+error);&#13; if (typeof params.debug === 'string') { fields.debug = params.debug; }
throw 'MailGraph notification failed : '+error;&#13;
// Add generic fields
Object.keys(params).forEach(function(key) {
if (key.substring(0, 4) == 'info') {
fields[key] = params[key];
}
});
// Post information to the processing script
Zabbix.Log(4, '[MailGraph Webhook] Sending request: ' + params.URL + '?' + JSON.stringify(fields));
var resp = req.post(params.URL,JSON.stringify(fields));
Zabbix.Log(4, '[Mailgraph Webhook] Received response:' + resp);
// The response can be
// - did not receive status 200 as result (contains HTTP server response)
// - null (no response received at all)
// - empty string (likely no e-mail sent due to recipient issue)
// - not json (debugging message for troubleshooting or configuration hints)
// - json (contains the mail message ID sent)
if (req.getStatus() != 200) {
throw '[MailGraph Webhook] Processing of mailGraph.php failed: ' + resp;
}
if (resp==null) {
throw '[MailGraph Webhook] No response received from mailGraph.php? This should not occur (check URL and your webserver!)';
}
if (resp=='') {
throw '[MailGraph Webhook] No data received from mailGraph - please check recipient address or mailGraph log and retry.';
}
// Check if JSON was returned
if (!isJSON(resp)) {
throw '[MailGraph Webhook] An error has occurred during processing: ' + resp;
}
// We expect the message id back from the processing script response in JSON format
msg = JSON.parse(resp);
result.tags.__message_id = msg.messageId;
Zabbix.Log(4, '[MailGraph Webhook] Message sent with identification &quot;' + msg.messageId + '&quot;');
// Pass the result back to Zabbix
return JSON.stringify(result);
}
catch (error)
{
// In case something else went wrong in the processing, pass the error back to Zabbix
Zabbix.Log(127, 'MailGraph notification failed: '+error);
throw 'MailGraph notification failed : '+error;
}</script> }</script>
<process_tags>YES</process_tags> <process_tags>YES</process_tags>
<description>The &quot;URL&quot; must point to the location of the processing script. If a proxy is required, define &quot;HTTPProxy&quot; for the proxy address.&#13; <description>The &quot;URL&quot; must point to the location of the processing script. If a proxy is required, define &quot;HTTPProxy&quot; for the proxy address.
&#13;
Customization:&#13; Customization:
- &quot;graphWidth&quot; and &quot;graphWidth&quot; can be defined for the image size&#13; - &quot;graphWidth&quot; and &quot;graphWidth&quot; can be defined for the image size
- &quot;showLegend&quot; can be defined to show or hide the legend of the graph&#13; - &quot;showLegend&quot; can be defined to show or hide the legend of the graph
- &quot;subject&quot; can be defined for a customized subject for the mail message&#13; - &quot;subject&quot; can be defined for a customized subject for the mail message
&#13; - &quot;periods&quot; and &quot;periods_headers&quot; can be defined for displaying multiple periods of the same graph, or
The html.template and plain.template files can be adjusted (TWIG format).&#13; - &quot;period&quot; and &quot;period_header&quot; can be defined to display a single graph
&#13;
Values available:&#13; The html.template and plain.template files can be adjusted (TWIG format).
{{ baseURL }} - base url of the Zabbix system (use for references to API and login)&#13;
{{ TRIGGER_ID }} - id of the applicable trigger&#13; More details are available at https://github.com/moudsen/mailGraph</description>
{{ TRIGGER_DESCRIPTION }} - raw trigger description (note: macros are not parsed!)&#13;
{{ TRIGGER_COMMENTS }} - comments of the trigger&#13;
{{ TRIGGER_URL }} - url of the trigger form&#13;
{{ ITEM_ID }} - id of the associated item to the trigger&#13;
{{ ITEM_KEY }} - key of the item&#13;
{{ ITEM_NAME }} - item name&#13;
{{ ITEM_DESCRIPTION }} - description of the item&#13;
{{ ITEM_LASTVALUE }} - last value of the item&#13;
{{ ITEM_PREVIOUSVALUE }} - the value of the before LASTVALUE&#13;
{{ ITEM_URL }} - url of the item form&#13;
{{ HOST_ID }} - id of the associated host to the item&#13;
{{ HOST_NAME }} - name of the host&#13;
{{ HOST_ERROR }} - last error state of the applicable host&#13;
{{ HOST_DESCRIPTION }} - description of the host&#13;
{{ HOST_URL }} - url of the host form&#13;
{{ EVENT_ID }} - id of the associated event&#13;
{{ EVENT_NAME }} - name of the event (note: macros are parsed!)&#13;
{{ EVENT_OPDATA }} - associated operational data of the vent&#13;
{{ EVENT_VALUE }} - event state (0=Recovered, 1=Triggered/Active)&#13;
{{ EVENT_SEVERITY }} - severity of the event&#13;
{{ EVENT_STATUS }} - status of the event&#13;
{{ EVENT_URL }} - url of the event details&#13;
{{ GRAPH_ID }} - id of the (first) associated graph that contains the item&#13;
{{ GRAPH_NAME }} - name of this graph&#13;
{{ GRAPH_URL }} - URL to this graph (assuming script produces to an accessible location)&#13;
{{ GRAPH_CID }} - IMG embed string (&lt;img src=&quot;{{ GRAPH_CID }}&quot; /&gt;)&#13;
{{ LOG_HTML }} - script log in HTML format&#13;
{{ LOG_PLAIN }} - script log in PLAIN text format</description>
<message_templates> <message_templates>
<message_template> <message_template>
<event_source>TRIGGERS</event_source> <event_source>TRIGGERS</event_source>
<operation_mode>PROBLEM</operation_mode> <operation_mode>PROBLEM</operation_mode>
<subject>Problem: {EVENT.NAME}</subject> <subject>Problem: {EVENT.NAME}</subject>
<message>Problem started at {EVENT.TIME} on {EVENT.DATE}&#13; <message>Problem started at {EVENT.TIME} on {EVENT.DATE}
Problem name: {EVENT.NAME}&#13; Problem name: {EVENT.NAME}
Host: {HOST.NAME}&#13; Host: {HOST.NAME}
Severity: {EVENT.SEVERITY}&#13; Severity: {EVENT.SEVERITY}
Operational data: {EVENT.OPDATA}&#13; Operational data: {EVENT.OPDATA}
Original problem ID: {EVENT.ID}&#13; Original problem ID: {EVENT.ID}
{TRIGGER.URL}&#13; Trigger ID (/url): {TRIGGER.ID} {TRIGGER.URL}</message>
&#13;
eventId: {EVENT.ID}&#13;
TriggerId: {TRIGGER.ID}&#13;
itemId: {ITEM.ID]</message>
</message_template> </message_template>
<message_template> <message_template>
<event_source>TRIGGERS</event_source> <event_source>TRIGGERS</event_source>
<operation_mode>RECOVERY</operation_mode> <operation_mode>RECOVERY</operation_mode>
<subject>Resolved in {EVENT.DURATION}: {EVENT.NAME}</subject> <subject>Resolved in {EVENT.DURATION}: {EVENT.RECOVERY.NAME}</subject>
<message>Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}&#13; <message>Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}
Problem name: {EVENT.NAME}&#13; Problem name: {EVENT.RECOVERY.NAME}
Problem duration: {EVENT.DURATION}&#13; Problem duration: {EVENT.DURATION}
Host: {HOST.NAME}&#13; Host: {HOST.NAME}
Severity: {EVENT.SEVERITY}&#13; Severity: {EVENT.SEVERITY}
Original problem ID: {EVENT.ID}&#13; Original problem ID: {EVENT.ID}
{TRIGGER.URL}&#13; Trigger ID: {TRIGGER.ID} {TRIGGER.URL}</message>
&#13;
eventId: {EVENT.ID}&#13;
TriggerId: {TRIGGER.ID}&#13;
itemId: {ITEM.ID]</message>
</message_template> </message_template>
<message_template> <message_template>
<event_source>TRIGGERS</event_source> <event_source>TRIGGERS</event_source>
<operation_mode>UPDATE</operation_mode> <operation_mode>UPDATE</operation_mode>
<subject>Updated problem in {EVENT.AGE}: {EVENT.NAME}</subject> <subject>Updated problem in {EVENT.AGE}: {EVENT.NAME}</subject>
<message>{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.&#13; <message>{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.
{EVENT.UPDATE.MESSAGE}&#13; {EVENT.UPDATE.MESSAGE}
&#13;
Current problem status is {EVENT.STATUS}, age is {EVENT.AGE}, acknowledged: {EVENT.ACK.STATUS}.&#13; Current problem status is {EVENT.STATUS}, age is {EVENT.AGE}, acknowledged: {EVENT.ACK.STATUS}.
&#13;
eventId: {EVENT.ID}&#13; Event ID: {EVENT.ID}
TriggerId: {TRIGGER.ID}&#13; Trigger ID: {TRIGGER.ID}</message>
itemId: {ITEM.ID]</message>
</message_template> </message_template>
</message_templates> </message_templates>
</media_type> </media_type>

View File

@@ -1,74 +1,193 @@
<html lang="en"><head><meta http-equiv=Content-Type content="text/html; charset=UTF-8"> <html lang="en"><head><meta http-equiv=Content-Type content="text/html; charset=UTF-8">
<style> <style>
.Resolved { body {
background-color:#86cc89; font-family: Arial,sans-serif;
border:1px solid #57bd5b; }
font-family:Tahoma,Geneva,Arial,sans-serif;font-size:14px; .Resolved {
} background-color:#86cc89;
.Information { border:1px solid #57bd5b;
background-color:#7499ff; }
border:1px solid #4673f0; .Information {
font-family:Tahoma,Geneva,Arial,sans-serif;font-size:14px; background-color:#7499ff;
} border:1px solid #4673f0;
.Warning { }
background-color:#FFC859; .Warning {
border:1px solid #E69F10; background-color:#FFC859;
font-family:Tahoma,Geneva,Arial,sans-serif;font-size:14px; border:1px solid #E69F10;
} }
.Average { .Average {
background-color:#FFA059; background-color:#FFA059;
border:1px solid #e66e15; border:1px solid #e66e15;
font-family:Tahoma,Geneva,Arial,sans-serif;font-size:14px; }
} .High {
.High { background-color:#E97659;
background-color:#E97659; border:1px solid #E45959;
border:1px solid #E45959; }
font-family:Tahoma,Geneva,Arial,sans-serif;font-size:14px; .Disaster {
} background-color:#E45959;
.Disaster { border:1px solid #DE1E09;
background-color:#E45959; }
border:1px solid #DE1E09; a {
font-family:Tahoma,Geneva,Arial,sans-serif;font-size:14px; 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;
}
hr {
border: none;
height: 1px;
color: #333; /* old IE */
background-color: #333;
}
.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;
}
.graphHeader {
font-size: 14px;
font-weight: bold;
}
.content {
font-size: 14px;
}
</style> </style>
</head> </head>
<body> <body>
<table style="margin: 10px;border-spacing:0 15px;border-collapse: separate;"> <table style="margin: 5px;border-spacing:0 10px;border-collapse: separate;" align=center>
<tr> <tr>
<td class="{{ EVENT_SEVERITY }}" style="border-radius:10px;padding: 10px 36px 10px 36px; "> <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"> <table class="{{ EVENT_SEVERITY }}" style="border:0; text-align:left;" cellpadding="0" cellspacing="0">
<tr><td> <tr>
<p><b>EVENT INFORMATION</b></p> <td>
Description: <b>{{ EVENT_NAME }}</b><br/> <p><span class="header">EVENT INFORMATION</span></p>
Host: <b>{{ HOST_NAME }}</b> <span class="content">
Description: <b>{{ EVENT_NAME }}</b><br/>
Host: <b>{{ HOST_NAME }}</b>
{% if HOST_ERROR|length > 0 %} {% if HOST_ERROR|length > 0 %}
({{ HOST_ERROR }}) ({{ HOST_ERROR }})
{% endif %} {% endif %}
<br/> <br/>
Operational data: <b>{{ EVENT_OPDATA }}</b><br/> {% if EVENT_OPDATE|length > 0 %}
Status: <b>{{ EVENT_STATUS }}</b><br/> Operational data: <b>{{ EVENT_OPDATA }}</b><br/>
Severity: <b>{{ EVENT_SEVERITY }}</b><br/> {% endif %}
Status: <b>{{ EVENT_STATUS }}</b><br/>
Severity: <b>{{ EVENT_SEVERITY }}</b><br/>
{% if EVENT_SEVERITY == "Resolved" %} {% if EVENT_SEVERITY == "Resolved" %}
Duration: <b>{{ EVENT_DURATION }}</b><br/> Duration: <b>{{ EVENT_DURATION }}</b><br/>
{% endif %} {% endif %}
Item: <b>{{ ITEM_NAME }}</b> ({{ ITEM_KEY }})<br/> Item: <b>{{ ITEM_NAME }}</b><br/>
Previous/Last: {{ ITEM_PREVIOUSVALUE }} ==&gt; {{ ITEM_LASTVALUE }} Previous/Last: {{ ITEM_PREVIOUSVALUE }} ==&gt; {{ ITEM_LASTVALUE }}
<p><a href="{{ EVENT_URL }}">Event Details</a><br/></p> </span>
</td></tr> </td>
</table> </tr>
</td> </table>
</tr> </td>
{% if GRAPH_CID|length > 0 %} </tr>
<tr> <tr>
<td align="center"><img src="{{ GRAPH_CID }}" /></td> <td class="links">
</tr> <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>
{% endif %} {% endif %}
</table> // <a href="{{ ACK_URL }}">Ack</a>
<p style="font-size:10px"> </div>
Event ID: <a href="{{ EVENT_URL }}">{{ EVENT_ID }}</a> // </td>
Trigger ID: <a href="{{ TRIGGER_URL }}">{{ TRIGGER_ID }}</a> // </tr>
Item ID: <a href="{{ ITEM_URL }}">{{ ITEM_ID }}</a> // {% for aGraph in GRAPHS_I %}
Host ID: <a href="{{ HOST_URL }}">{{ HOST_ID }}</a> <tr>
</p> <div align=justify>
<td align="center">
<span class="graphHeader">{{ aGraph.HEADER }}</span><br/>
<img id="mainimage" border=0 style="width: 100%; max-width: 790px" alt="Zabbix Graph" src="{{ aGraph.CID }}" />
</td>
</div>
</tr>
{% endfor %}
{% if TRIGGER_SCREEN > 0 %}
<tr>
<div align=justify>
<td align="center">
<span class="graphHeader">{{ GRAPHS_T_HEADER }} - {{ GRAPHS_T_PERIODHEADER }}</span>
</td>
</div>
</tr>
<tr>
<td class="links">
<div align="center">
Screen ID: <a href="{{ GRAPHS_T_LINK }}">{{ TRIGGER_SCREEN }}</a>
</div>
</td>
</tr>
{% for aGraph in GRAPHS_T %}
<tr>
<div align=justify>
<td align="center">
<img id="mainimage" border=0 style="width: 100%; max-width: 790px" alt="Zabbix Graph" src="{{ aGraph.CID }}" />
</td>
</div>
</tr>
{% endfor %}
{% endif %}
{% if HOST_SCREEN > 0 %}
<tr>
<div align=justify>
<td align="center">
<span class="graphHeader">{{ GRAPHS_H_HEADER }} - {{ GRAPHS_H_PERIODHEADER }}</span>
</td>
</div>
</tr>
<tr>
<td class="links">
<div align="center">
Screen ID: <a href="{{ GRAPHS_H_LINK }}">{{ HOST_SCREEN }}</a>
</div>
</td>
</tr>
{% for aGraph in GRAPHS_H %}
<tr>
<div align=justify>
<td align="center">
<img id="mainimage" border=0 style="width: 100%; max-width: 790px" alt="Zabbix Graph" src="{{ aGraph.CID }}" />
</td>
</div>
</tr>
{% endfor %}
{% endif %}
</table>
</body> </body>
</html> </html>

View File

@@ -3,10 +3,10 @@ EVENT INFORMATION #{{ EVENT_ID }}
Severity: {{ EVENT_SEVERITY }} Severity: {{ EVENT_SEVERITY }}
Description: {{ EVENT_NAME }} Description: {{ EVENT_NAME }}
{% if GRAPH_CID|length > 0 %} {% if GRAPH_CID1|length > 0 %}
GRAPH #{{ GRAPH_ID }} GRAPH #{{ GRAPH_ID1 }}
{{ GRAPH_URL }} {{ GRAPH_URL1 }}
This graph will remain available for approx. the next 2 weeks only; use HTML reader after this period to view the graph. This graph will remain available for approx. the next 2 weeks only; use HTML reader after this period to view the graph that is embedded in the attached HTML version.
{% endif %} {% endif %}
TRIGGER #{{ TRIGGER_ID }} TRIGGER #{{ TRIGGER_ID }}
@@ -18,12 +18,12 @@ Description: {{ TRIGGER_DESCRIPTION }}
ITEM #{{ ITEM_ID }} ITEM #{{ ITEM_ID }}
Name: {{ ITEM_NAME }} Name: {{ ITEM_NAME }}
Key: {{ ITEM_KEY }}
Value: {{ ITEM_LASTVALUE }} Value: {{ ITEM_LASTVALUE }}
Previous: {{ ITEM_PREVIOUSVALUE }}
HOST HOST
Name: {{ HOST_NAME }} Name: {{ HOST_NAME }}
EVENT DETAILS EVENT DETAILS
{{ baseURL }}/tr_events.php?triggerid={TRIGGER_ID}&eventid={EVENT_ID} {{ EVENTDETAILS_URL }}