From 39ada5d6ff73b48003a3a3d9f9094e67d9d8a902 Mon Sep 17 00:00:00 2001 From: moudsen Date: Sun, 2 Jul 2023 12:36:17 +0200 Subject: [PATCH] v2.11 - mailGraph.xml now with correct format --- mailGraph.xml | 411 ++++++++++++++++++++++++++------------------------ 1 file changed, 214 insertions(+), 197 deletions(-) diff --git a/mailGraph.xml b/mailGraph.xml index a5e8e65..368cce2 100755 --- a/mailGraph.xml +++ b/mailGraph.xml @@ -1,198 +1,215 @@ -zabbix_export: - version: '5.4' - date: '2023-07-01T10:54:39Z' - media_types: - - - name: MailGraph - type: WEBHOOK - parameters: - - - name: baseURL - value: 'https://myzabbix.example.com/' - - - name: duration - value: '{EVENT.DURATION}' - - - name: eventId - value: '{EVENT.ID}' - - - name: graphHeight - value: '120' - - - name: graphWidth - value: '300' - - - name: HTTPProxy - value: '' - - - name: infoTest - value: Test - - - name: itemId - value: '{ITEM.ID}' - - - name: periods - value: '10m,4h,1d,7d' - - - name: periods_headers - value: 'Last 10 minutes,Last 4 hours,Last day,Last 7 days' - - - name: recipient - value: '{ALERT.SENDTO}' - - - name: showLegend - value: '0' - - - name: subject - value: '{{ HOST_NAME|raw }}: ({{ EVENT_SEVERITY }}) {{ EVENT_NAME|raw }}' - - - name: URL - value: 'https://myzabbix.example.com/mailGraph.php' - script: | - // mailGraph v2.11 - 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'); - - // Must have fields - fields.itemId = params.itemId * 1; - fields.eventId = params.eventId * 1; - fields.recipient = params.recipient; - fields.baseURL = params.baseURL; - fields.duration = params.duration * 1; - - if (isNaN(fields.eventId)) { - throw '[MailGraph Webhook] Invalid event ID? Integer required (use actual event ID from Zabbix!)'; - } - - if (isNaN(fields.duration)) { - throw '[MailGraph Webhook] Invalid duration? Integer required (set to zero if unknown)!'; - } - - 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); - - // If blank the email address is likely incorrect - if (resp==null) { - throw '[MailGraph Webhook] No data received from mailGraph! Likely the email processing failed? Check mailGraph logging'; - } - - // If there was an error, report it and stop - if (req.getStatus() != 200) { throw JSON.parse(resp).errors[0]; } - - // If no datas returned, report it and stop - if (resp.charAt(0) == "!") { - throw '[MailGraph Webhook] No data received from mailGraph! Likely the event ID provided does not exist? Check mailGraph logging'; - } - - // We expect the message id back from the processing script - 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 went wrong in the processing, pass the error back to Zabbix - Zabbix.Log(127, 'MailGraph notification failed: '+error); - throw 'MailGraph notification failed : '+error; - } - process_tags: 'YES' - description: | - The "URL" must point to the location of the processing script. If a proxy is required, define "HTTPProxy" for the proxy address. - - Customization: - - "graphWidth" and "graphWidth" can be defined for the image size - - "showLegend" can be defined to show or hide the legend of the graph - - "subject" can be defined for a customized subject for the mail message - - "periods" and "periods_headers" can be defined for displaying multiple periods of the same graph, or - - "period" and "period_header" can be defined to display a single graph - - The html.template and plain.template files can be adjusted (TWIG format). - - More details are available at https://github.com/moudsen/mailGraph - message_templates: - - - event_source: TRIGGERS - operation_mode: PROBLEM - subject: 'Problem: {EVENT.NAME}' - message: | - Problem started at {EVENT.TIME} on {EVENT.DATE} - Problem name: {EVENT.NAME} - Host: {HOST.NAME} - Severity: {EVENT.SEVERITY} - Operational data: {EVENT.OPDATA} - Original problem ID: {EVENT.ID} - {TRIGGER.URL} - - eventId: {EVENT.ID} - TriggerId: {TRIGGER.ID} - itemId: {ITEM.ID] - - - event_source: TRIGGERS - operation_mode: RECOVERY - subject: 'Resolved in {EVENT.DURATION}: {EVENT.RECOVERY.NAME}' - message: | - Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE} - Problem name: {EVENT.RECOVERY.NAME} - Problem duration: {EVENT.DURATION} - Host: {HOST.NAME} - Severity: {EVENT.SEVERITY} - Original problem ID: {EVENT.ID} - {TRIGGER.URL} - - eventId: {EVENT.ID} - TriggerId: {TRIGGER.ID} - itemId: {ITEM.ID] - - - event_source: TRIGGERS - operation_mode: UPDATE - subject: 'Updated problem in {EVENT.AGE}: {EVENT.NAME}' - message: | - {USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}. - {EVENT.UPDATE.MESSAGE} - - Current problem status is {EVENT.STATUS}, age is {EVENT.AGE}, acknowledged: {EVENT.ACK.STATUS}. - - eventId: {EVENT.ID} - TriggerId: {TRIGGER.ID} - itemId: {ITEM.ID] + + + 5.4 + 2023-07-02T10:34:30Z + + + MailGraph + WEBHOOK + + + baseURL + https://zbx.puzzl.nl/zabbix/ + + + duration + {EVENT.DURATION} + + + eventId + {EVENT.ID} + + + graphHeight + 120 + + + graphWidth + 300 + + + HTTPProxy + + + + infoTest + Test + + + itemId + {ITEM.ID} + + + periods + 10m,4h,1d,7d + + + periods_headers + Last 10 minutes,Last 4 hours,Last day,Last 7 days + + + recipient + {ALERT.SENDTO} + + + showLegend + 0 + + + subject + {{ HOST_NAME|raw }}: ({{ EVENT_SEVERITY }}) {{ EVENT_NAME|raw }} + + + URL + https://zbx.puzzl.nl/mailGraph.php + + + + YES + The "URL" must point to the location of the processing script. If a proxy is required, define "HTTPProxy" for the proxy address. + +Customization: +- "graphWidth" and "graphWidth" can be defined for the image size +- "showLegend" can be defined to show or hide the legend of the graph +- "subject" can be defined for a customized subject for the mail message +- "periods" and "periods_headers" can be defined for displaying multiple periods of the same graph, or +- "period" and "period_header" can be defined to display a single graph + +The html.template and plain.template files can be adjusted (TWIG format). + +More details are available at https://github.com/moudsen/mailGraph + + + TRIGGERS + PROBLEM + Problem: {EVENT.NAME} + Problem started at {EVENT.TIME} on {EVENT.DATE} +Problem name: {EVENT.NAME} +Host: {HOST.NAME} +Severity: {EVENT.SEVERITY} +Operational data: {EVENT.OPDATA} +Original problem ID: {EVENT.ID} +{TRIGGER.URL} + +eventId: {EVENT.ID} +TriggerId: {TRIGGER.ID} +itemId: {ITEM.ID] + + + TRIGGERS + RECOVERY + Resolved in {EVENT.DURATION}: {EVENT.RECOVERY.NAME} + Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE} +Problem name: {EVENT.RECOVERY.NAME} +Problem duration: {EVENT.DURATION} +Host: {HOST.NAME} +Severity: {EVENT.SEVERITY} +Original problem ID: {EVENT.ID} +{TRIGGER.URL} + +eventId: {EVENT.ID} +TriggerId: {TRIGGER.ID} +itemId: {ITEM.ID] + + + TRIGGERS + UPDATE + Updated problem in {EVENT.AGE}: {EVENT.NAME} + {USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}. +{EVENT.UPDATE.MESSAGE} + +Current problem status is {EVENT.STATUS}, age is {EVENT.AGE}, acknowledged: {EVENT.ACK.STATUS}. + +eventId: {EVENT.ID} +TriggerId: {TRIGGER.ID} +itemId: {ITEM.ID] + + + + +