Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/zabbix/zabbix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/create
diff options
context:
space:
mode:
authorReinis Detlavs <reinis.detlavs@zabbix.com>2022-09-20 08:29:00 +0300
committerReinis Detlavs <reinis.detlavs@zabbix.com>2022-09-20 08:29:00 +0300
commitf4fde0b624b596d00979854e11fed8a09de0e2aa (patch)
tree381e31aa0078b74beddf7a08fb815420e8ade289 /create
parent8fcbf0d036b01e12a223b46c4a56285b545b7065 (diff)
....I..... [ZBXNEXT-7912] fixed data for default email provider types
Diffstat (limited to 'create')
-rw-r--r--create/src/data.tmpl8
1 files changed, 4 insertions, 4 deletions
diff --git a/create/src/data.tmpl b/create/src/data.tmpl
index c8362407cbe..a110af3016a 100644
--- a/create/src/data.tmpl
+++ b/create/src/data.tmpl
@@ -94,10 +94,10 @@ ROW |30 |4 |Express.ms |
ROW |31 |4 |ManageEngine ServiceDesk| | | | | | | |1 |25 |0 |0 |0 |0 | |1 |3 |10s |1 |var MEngine = {&eol; params: {},&eol;&eol; setParams: function (params) {&eol; if (typeof params !== 'object') {&eol; return;&eol; }&eol;&eol; MEngine.params = params;&eol; if (typeof MEngine.params.url === 'string') {&eol; if (!MEngine.params.url.endsWith('/')) {&eol; MEngine.params.url += '/';&eol; }&eol;&eol; MEngine.params.url += 'api/v3/';&eol; }&eol;&eol; if (MEngine.params.on_premise.toLowerCase() !== 'true'&eol; && typeof MEngine.params.on_demand_url_auth === 'string') {&eol; if (!MEngine.params.on_demand_url_auth.endsWith('/')) {&eol; MEngine.params.on_demand_url_auth += '/';&eol; }&eol;&eol; MEngine.params.on_demand_url_auth += 'oauth/v2/token?';&eol; }&eol; },&eol;&eol; setProxy: function (HTTPProxy) {&eol; MEngine.HTTPProxy = HTTPProxy;&eol; },&eol;&eol; createLink: function (id, url) {&eol; return url + (url.endsWith('/') ? '' : '/') +&eol; ((MEngine.params.on_premise.toLowerCase() === 'true')&eol; ? ('WorkOrder.do?woMode=viewWO&woID=' + id)&eol; : ('app/itdesk/ui/requests/' + id + '/details')&eol; );&eol; },&eol;&eol; refreshAccessToken: function () {&eol; [&eol; 'on_demand_url_auth',&eol; 'on_demand_refresh_token',&eol; 'on_demand_client_id',&eol; 'on_demand_client_secret'&eol; ].forEach(function (field) {&eol; if (typeof MEngine.params !== 'object' &pipe;&pipe; typeof MEngine.params[field] === 'undefined'&eol; &pipe;&pipe; MEngine.params[field].trim() === '' ) {&eol; throw 'Required MEngine param is not set: "sd_' + field + '".';&eol; }&eol; });&eol;&eol; var response,&eol; request = new HttpRequest(),&eol; url = MEngine.params.on_demand_url_auth +&eol; 'refresh_token=' + encodeURIComponent(MEngine.params.on_demand_refresh_token) +&eol; '&grant_type=refresh_token&client_id=' + encodeURIComponent(MEngine.params.on_demand_client_id) +&eol; '&client_secret=' + encodeURIComponent(MEngine.params.on_demand_client_secret) +&eol; '&redirect_uri=https://www.zoho.com&scope=SDPOnDemand.requests.ALL';&eol;&eol; if (MEngine.HTTPProxy) {&eol; request.setProxy(MEngine.HTTPProxy);&eol; }&eol;&eol; Zabbix.log(4, '[ ManageEngine Webhook ] Refreshing access token. Request: ' + url);&eol;&eol; response = request.post(url);&eol;&eol; Zabbix.log(4, '[ ManageEngine Webhook ] Received response with status code ' +&eol; request.getStatus() + '\n' + response);&eol;&eol; try {&eol; response = JSON.parse(response);&eol; }&eol; catch (error) {&eol; Zabbix.log(4, '[ ManageEngine Webhook ] Failed to parse response received from Zoho Accounts');&eol; }&eol;&eol; if ((request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) && !response.access_token) {&eol; throw 'Access token refresh failed with HTTP status code ' + request.getStatus() +&eol; '. Check debug log for more information.';&eol; }&eol; else {&eol; MEngine.params.on_demand_auth_token = response.access_token;&eol; }&eol; },&eol;&eol; request: function (method, query, data) {&eol; var response,&eol; url = MEngine.params.url + query,&eol; input,&eol; request = new HttpRequest(),&eol; message;&eol;&eol; if (MEngine.params.on_premise.toLowerCase() === 'true') {&eol; request.addHeader('TECHNICIAN_KEY: ' + MEngine.params.on_premise_auth_token);&eol; }&eol; else {&eol; request.addHeader('Authorization: Zoho-oauthtoken ' + MEngine.params.on_demand_auth_token);&eol; request.addHeader('Accept: application/v3+json');&eol; }&eol;&eol; if (MEngine.HTTPProxy) {&eol; request.setProxy(MEngine.HTTPProxy);&eol; }&eol;&eol; if (typeof data !== 'undefined') {&eol; data = JSON.stringify(data);&eol; }&eol;&eol; input = 'input_data=' + encodeURIComponent(data);&eol; Zabbix.log(4, '[ ManageEngine Webhook ] Sending request: ' + url + '?' + input);&eol;&eol; switch (method) {&eol; case 'post':&eol; response = request.post(url, input);&eol; break;&eol;&eol; case 'put':&eol; response = request.put(url, input);&eol; break;&eol;&eol; default:&eol; throw 'Unsupported HTTP request method: ' + method;&eol; }&eol;&eol; Zabbix.log(4, '[ ManageEngine Webhook ] Received response with status code ' +&eol; request.getStatus() + '\n' + response);&eol;&eol; try {&eol; response = JSON.parse(response);&eol; }&eol; catch (error) {&eol; Zabbix.log(4, '[ ManageEngine Webhook ] Failed to parse response received from ManageEngine');&eol; }&eol;&eol; if ((request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300)&eol; && typeof response.response_status !== 'object') {&eol; throw 'Request failed with HTTP status code ' + request.getStatus() +&eol; '. Check debug log for more information.';&eol; }&eol; else if (typeof response.response_status === 'object' && response.response_status.status === 'failed') {&eol; message = 'Request failed with status_code ';&eol;&eol; if (typeof response.response_status.messages === 'object'&eol; && response.response_status.messages[0]&eol; && response.response_status.messages[0].message) {&eol; message += response.response_status.messages[0].status_code +&eol; '. Message: ' + response.response_status.messages[0].message;&eol; }&eol; else {&eol; message += response.response_status.status_code;&eol; }&eol;&eol; message += '. Check debug log for more information.';&eol; throw message;&eol; }&eol; else if (response.request) {&eol; return response.request.id;&eol; }&eol; },&eol;&eol; createPaylaod: function (fields, isNote) {&eol; var data = {},&eol; result;&eol;&eol; if (isNote) {&eol; data.description = fields['field_string:description'].replace(/(?:\r\n&pipe;\r&pipe;\n)/g, '<br>');&eol; result = {request_note: data};&eol; }&eol; else {&eol; Object.keys(fields)&eol; .forEach(function(field) {&eol; if (fields[field].trim() === '') {&eol; Zabbix.log(4, '[ ManageEngine Webhook ] Field "' + field +&eol; '" can\'t be empty. The field ignored.');&eol; }&eol; else {&eol; try {&eol; var prefix = field.split(':')[0],&eol; root;&eol;&eol; if (prefix.startsWith('udf_') && !data.udf_fields) {&eol; data.udf_fields = {};&eol; root = data.udf_fields;&eol; }&eol; else if (prefix.startsWith('udf_')) {&eol; root = data.udf_fields;&eol; }&eol; else {&eol; root = data;&eol; }&eol;&eol; if (prefix.endsWith('string')) {&eol; root[field.substring(field.indexOf(':') + 1)&eol; .toLowerCase()] = fields[field];&eol; }&eol; else {&eol; root[field.substring(field.indexOf(':') + 1)&eol; .toLowerCase()] = {&eol; name: fields[field]&eol; };&eol; }&eol; }&eol; catch (error) {&eol; Zabbix.log(4, '[ ManageEngine Webhook ] Can\'t parse field "' + field +&eol; '". The field ignored.');&eol; }&eol; }&eol; });&eol; if (data.description) {&eol; data.description = data.description.replace(/(?:\r\n&pipe;\r&pipe;\n)/g, '<br>');&eol; }&eol;&eol; result = {request: data};&eol; }&eol;&eol; return result;&eol; }&eol;};&eol;&eol;try {&eol; var params = JSON.parse(value),&eol; fields = {},&eol; sd = {},&eol; result = {tags: {}},&eol; required_params = [&eol; 'sd_on_premise', 'field_string:subject', 'field_string:description',&eol; 'event_recovery_value', 'event_source', 'event_value', 'event_update_status'&eol; ],&eol; severities = [&eol; {name: 'not_classified', color: '#97AAB3'},&eol; {name: 'information', color: '#7499FF'},&eol; {name: 'warning', color: '#FFC859'},&eol; {name: 'average', color: '#FFA059'},&eol; {name: 'high', color: '#E97659'},&eol; {name: 'disaster', color: '#E45959'},&eol; {name: 'default', color: '#000000'}&eol; ];&eol;&eol; Object.keys(params)&eol; .forEach(function (key) {&eol; if (key.startsWith('sd_')) {&eol; sd[key.substring(3)] = params[key];&eol; }&eol; else if (key.startsWith('field_') &pipe;&pipe; key.startsWith('udf_field_')) {&eol; fields[key] = params[key];&eol; }&eol;&eol; if (required_params.indexOf(key) !== -1 && params[key].trim() === '') {&eol; throw 'Parameter "' + key + '" can\'t be empty.';&eol; }&eol; });&eol;&eol; if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol; throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol; }&eol;&eol; // Check {EVENT.VALUE} for trigger-based and internal events.&eol; if (params.event_value !== '0' && params.event_value !== '1'&eol; && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol; throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol; }&eol;&eol; // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol; if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol; throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol; }&eol;&eol; if (params.event_source !== '0' && params.event_recovery_value === '0') {&eol; throw 'Recovery operations are supported only for trigger-based actions.';&eol; }&eol;&eol; if ([0, 1, 2, 3, 4, 5].indexOf(parseInt(params.event_nseverity)) === -1) {&eol; params.event_nseverity = '6';&eol; }&eol;&eol; if (params.event_update_status === '1' && (typeof params.sd_request_id === 'undefined'&eol; &pipe;&pipe; params.sd_request_id.trim() === ''&eol; &pipe;&pipe; params.sd_request_id === '{EVENT.TAGS.__zbx_sd_request_id}')) {&eol; throw 'Parameter "sd_request_id" can\'t be empty for update operation.';&eol; }&eol;&eol; MEngine.setParams(sd);&eol; MEngine.setProxy(params.HTTPProxy);&eol;&eol; if (MEngine.params.on_premise.toLowerCase() !== 'true') {&eol; MEngine.refreshAccessToken();&eol; }&eol;&eol; // Create issue for non trigger-based events.&eol; if (params.event_source !== '0' && params.event_recovery_value !== '0') {&eol; fields['field_object:priority'] = params['priority_' + severities[params.event_nseverity].name]&eol; &pipe;&pipe; 'Normal';&eol;&eol; MEngine.request('post', 'requests', MEngine.createPaylaod(fields));&eol; }&eol; // Create issue for trigger-based events.&eol; else if (params.event_value === '1' && params.event_update_status === '0') {&eol; fields['field_object:priority'] = params['priority_' + severities[params.event_nseverity].name]&eol; &pipe;&pipe; 'Normal';&eol;&eol; var id = MEngine.request('post', 'requests', MEngine.createPaylaod(fields));&eol;&eol; result.tags.__zbx_sd_request_id = id;&eol; result.tags.__zbx_sd_request_link = MEngine.createLink(id, params.sd_url);&eol; }&eol; // Update created issue for trigger-based event.&eol; else {&eol; if (params.event_update_status === '1') {&eol; MEngine.request('post', 'requests/' + params.sd_request_id + '/notes',&eol; MEngine.createPaylaod(fields, true)&eol; );&eol; }&eol; delete fields['field_string:description'];&eol; MEngine.request('put', 'requests/' + params.sd_request_id, MEngine.createPaylaod(fields));&eol; }&eol;&eol; return JSON.stringify(result);&eol;}&eol;catch (error) {&eol; Zabbix.log(3, '[ ManageEngine Webhook ] ERROR: ' + error);&eol; throw 'Sending failed: ' + error;&eol;}|30s |1 |1 |{EVENT.TAGS.__zbx_sd_request_link} |ManageEngine: {EVENT.TAGS.__zbx_sd_request_id} | |0 |
ROW |32 |4 |Github | | | | | | | |1 |25 |0 |0 |0 |0 | |1 |3 |10s |1 |var Github = {&eol; params: {},&eol;&eol; setParams: function (params) {&eol; if (typeof params !== 'object') {&eol; return;&eol; }&eol; Github.params = params;&eol; },&eol;&eol; setProxy: function (HTTPProxy) {&eol; Github.HTTPProxy = HTTPProxy;&eol; },&eol;&eol; urlCheckFormat: function (url) {&eol;&eol; if (typeof url === 'string' && !url.endsWith('/')) {&eol; url += '/';&eol; }&eol;&eol; if (url.indexOf('http://') === -1 && url.indexOf('https://') === -1) {&eol; url = 'https://' + url;&eol; }&eol;&eol; return url;&eol; },&eol;&eol; createProblemURL: function (zabbix_url, triggerid, eventid, event_source) {&eol; var problem_url = zabbix_url;&eol;&eol; if (event_source === '0') {&eol; problem_url += 'tr_events.php?triggerid=' + triggerid + '&eventid=' + eventid;&eol; }&eol;&eol; return problem_url;&eol; },&eol;&eol; request: function (method, url, data) {&eol; ['token', 'user_agent'].forEach(function (field) {&eol; if (typeof Github.params !== 'object' &pipe;&pipe; typeof Github.params[field] === 'undefined' &pipe;&pipe; Github.params[field] === '') {&eol; throw 'Required Github param is not set: "' + field + '".';&eol; }&eol; });&eol;&eol; var response,&eol; request = new HttpRequest();&eol;&eol; request.addHeader('User-Agent: ' + Github.params.user_agent);&eol; request.addHeader('Accept: application/vnd.github.v3+json');&eol; request.addHeader('Authorization: token ' + Github.params.token);&eol;&eol; if (typeof Github.HTTPProxy !== 'undefined' && Github.HTTPProxy !== '') {&eol; request.setProxy(Github.HTTPProxy);&eol; }&eol;&eol; if (typeof data !== 'undefined') {&eol; data = JSON.stringify(data);&eol; }&eol;&eol; Zabbix.log(4, '[ Github Webhook ] Sending request: ' + url + ((typeof data === 'string')&eol; ? ('\n' + data)&eol; : ''));&eol;&eol; switch (method) {&eol; case 'post':&eol; response = request.post(url, data);&eol; break;&eol;&eol; case 'patch':&eol; response = request.patch(url, data);&eol; break;&eol;&eol; default:&eol; throw 'Unsupported HTTP request method: ' + method;&eol; }&eol;&eol; Zabbix.log(4, '[ Github Webhook ] Received response with status code ' +&eol; request.getStatus() + '\n' + response);&eol;&eol; if (response !== null) {&eol; try {&eol; response = JSON.parse(response);&eol; }&eol; catch (error) {&eol; Zabbix.log(4, '[ Github Webhook ] Failed to parse response received from Github');&eol; response = null;&eol; }&eol; }&eol;&eol; if (typeof response !== 'object') {&eol; throw 'Failed to process response received from Github. Check debug log for more information.';&eol; }&eol;&eol; if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol; var message = 'Request failed with status code ' + request.getStatus();&eol;&eol; if (response.message) {&eol; message += ': ' + response.message;&eol; }&eol;&eol; throw message + ' Check debug log for more information.';&eol; }&eol;&eol; return response;&eol; }&eol;};&eol;&eol;try {&eol; var params = JSON.parse(value),&eol; github = {},&eol; url = '',&eol; data = {},&eol; comment_data,&eol; result = { tags: {} },&eol; required_params = [&eol; 'alert_subject', 'alert_message', 'event_source', 'event_value',&eol; 'event_update_status', 'event_recovery_value', 'event_severity',&eol; 'event_id', 'trigger_id', 'zabbix_url',&eol; 'github_token', 'github_url', 'github_user_agent'&eol; ],&eol; method = 'post',&eol; process_tags = true;&eol;&eol; Object.keys(params)&eol; .forEach(function (key) {&eol; if (key.startsWith('github_')) {&eol; github[key.substring(7)] = params[key];&eol; }&eol; else if (required_params.indexOf(key) !== -1 && params[key] === '') {&eol; throw 'Parameter "' + key + '" can\'t be empty.';&eol; }&eol; });&eol;&eol; if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol; throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol; }&eol;&eol; // Check {EVENT.VALUE} for trigger-based and internal events.&eol; if (params.event_value !== '0' && params.event_value !== '1'&eol; && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol; throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol; }&eol;&eol; // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol; if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol; throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol; }&eol;&eol; if (params.event_source !== '0' && params.event_recovery_value === '0') {&eol; throw 'Recovery operations are supported only for trigger-based actions.';&eol; }&eol;&eol; if (typeof params.zabbix_url !== 'string' &pipe;&pipe; params.zabbix_url.trim() === '' &pipe;&pipe; params.zabbix_url === '{$ZABBIX.URL}') {&eol; throw 'Field "zabbix_url" cannot be empty.';&eol; }&eol;&eol; // Check for backslash in the end of url and schema.&eol; github.url = Github.urlCheckFormat(github.url);&eol; params.zabbix_url = Github.urlCheckFormat(params.zabbix_url);&eol;&eol; // Default url for creating issue&eol; url = github.url + 'repos/' + github.repo + '/issues';&eol;&eol; data.title = params.alert_subject;&eol; data.body = params.alert_message;&eol; data.labels = [&eol; { name: "Zabbix" }&eol; ];&eol;&eol; // Adding label corresponding to trigger severity in Zabbix.&eol; if (params.event_severity !== 'undefined' && params.event_source === '0') {&eol; data.labels.push({ name: params.event_severity });&eol; }&eol;&eol; // In case of update or resolve event.&eol; if (params.event_source === '0' && (params.event_value === '0' &pipe;&pipe; params.event_update_status === '1')) {&eol; process_tags = false;&eol; method = 'patch';&eol; url = github.url + 'repos/' + github.repo + '/issues/' + github.issue_number;&eol; comment_data = Object.assign({}, data);&eol; delete data.body;&eol; } else {&eol; problem_url = Github.createProblemURL(params.zabbix_url, params.trigger_id, params.event_id, params.event_source);&eol; data.body += '\nEvent details in Zabbix: [' + problem_url + '](' + problem_url + ')';&eol; }&eol;&eol; Github.setParams(github);&eol; Github.setProxy(params.HTTPProxy);&eol;&eol; var response = Github.request(method, url, data);&eol;&eol; // Leave a comment if comment_data present.&eol; if (typeof comment_data === 'object') {&eol; url = github.url + 'repos/' + github.repo + '/issues/' + github.issue_number + '/comments';&eol; Github.request("post", url, comment_data);&eol; }&eol;&eol; if (process_tags) {&eol; result.tags.__zbx_github_issue_number = response.number;&eol; result.tags.__zbx_github_repo = github.repo;&eol; result.tags.__zbx_github_link = response.html_url;&eol; }&eol;&eol; Zabbix.log(4, '[ Github Webhook ] Result: ' + JSON.stringify(result));&eol; return JSON.stringify(result);&eol;}&eol;catch (error) {&eol; Zabbix.log(4, '[ Github Webhook ] ERROR: ' + error);&eol; throw 'Sending failed: ' + error;&eol;}|30s |1 |1 |{EVENT.TAGS.__zbx_github_link} |Github: Issue {EVENT.TAGS.__zbx_github_issue_number} | |0 |
ROW |33 |4 |GLPi | | | | | | | |1 |25 |0 |0 |0 |0 | |1 |1 |10s |1 |var GLPi = {&eol; params: {},&eol;&eol; setParams: function (params) {&eol; if (typeof params !== 'object') {&eol; return;&eol; }&eol; GLPi.params = params;&eol; },&eol;&eol; setProxy: function (HTTPProxy) {&eol; GLPi.HTTPProxy = HTTPProxy;&eol; },&eol;&eol; urlCheckFormat: function (url) {&eol; if (typeof url === 'string' && !url.endsWith('/')) {&eol; url += '/';&eol; }&eol;&eol; if (url.indexOf('http://') === -1 && url.indexOf('https://') === -1) {&eol; url = 'https://' + url;&eol; }&eol;&eol; return url;&eol; },&eol;&eol; getAuthToken: function (url, token) {&eol; var response,&eol; request = new HttpRequest();&eol;&eol; request.addHeader('Content-Type: application/json');&eol; request.addHeader('Authorization: user_token ' + token);&eol;&eol; response = request.get(url + "apirest.php/initSession");&eol;&eol; if (response !== null) {&eol; try {&eol; response = JSON.parse(response);&eol; }&eol; catch (error) {&eol; Zabbix.log(4, '[ GLPi Webhook ] Failed to receive authentication token from GLPi.');&eol; response = null;&eol; }&eol; }&eol;&eol; if (Array.isArray(response)) {&eol; if (response[1]) {&eol; throw 'Error received from GLPi: ' + response[1];&eol; } else {&eol; throw 'Failed to receive authentication token from GLPi.';&eol; }&eol; }&eol;&eol; if (typeof response !== 'object' &pipe;&pipe; !response.session_token) {&eol; throw 'Failed to process response received from getting GLPi authentication token. Check debug log for more information.';&eol; }&eol;&eol; return response.session_token;&eol; },&eol;&eol; getProblemUrl: function (zabbix_url, triggerid, eventid, event_source) {&eol; var problem_url = zabbix_url;&eol;&eol; if (event_source === '0') {&eol; problem_url += 'tr_events.php?triggerid=' + triggerid + '&eventid=' + eventid;&eol; }&eol;&eol; return problem_url;&eol; },&eol;&eol; request: function (method, url, data) {&eol; if (typeof GLPi.params !== 'object' &pipe;&pipe; typeof GLPi.params.authToken === 'undefined' &pipe;&pipe; GLPi.params.authToken === '') {&eol; throw 'Required GLPi param authToken is not set.';&eol; }&eol;&eol; var response,&eol; request = new HttpRequest();&eol;&eol; request.addHeader('Content-Type: application/json');&eol; request.addHeader('Session-Token:' + GLPi.params.authToken);&eol;&eol; if (typeof GLPi.HTTPProxy !== 'undefined' && GLPi.HTTPProxy !== '') {&eol; request.setProxy(GLPi.HTTPProxy);&eol; }&eol;&eol; if (typeof data !== 'undefined') {&eol; data = JSON.stringify(data);&eol; }&eol;&eol; Zabbix.log(4, '[ GLPi Webhook ] Sending request: ' + url + ((typeof data === 'string')&eol; ? ('\n' + data)&eol; : ''));&eol;&eol; switch (method) {&eol; case 'post':&eol; response = request.post(url, data);&eol; break;&eol;&eol; case 'put':&eol; response = request.put(url, data);&eol; break;&eol;&eol; default:&eol; throw 'Unsupported HTTP request method: ' + method;&eol; }&eol;&eol; Zabbix.log(4, '[ GLPi Webhook ] Received response with status code ' +&eol; request.getStatus() + '\n' + response);&eol;&eol; if (response !== null) {&eol; try {&eol; response = JSON.parse(response);&eol; }&eol; catch (error) {&eol; Zabbix.log(4, '[ GLPi Webhook ] Failed to parse response received from GLPi');&eol; response = null;&eol; }&eol; }&eol;&eol; if (typeof response !== 'object' &pipe;&pipe; typeof response === 'undefined' &pipe;&pipe; response === null) {&eol; throw 'Failed to process response received from GLPi. Check debug log for more information.';&eol; }&eol;&eol; if (request.getStatus() < 200 &pipe;&pipe; request.getStatus() >= 300) {&eol; var message = 'Request failed with status code ' + request.getStatus();&eol;&eol; if (response.message) {&eol; message += ': ' + response.message;&eol; }&eol;&eol; throw message + ' Check debug log for more information.';&eol; }&eol;&eol; return response;&eol; }&eol;};&eol;&eol;try {&eol; var params = JSON.parse(value),&eol; glpi = {},&eol; url = '',&eol; data = {},&eol; comment_data,&eol; result = { tags: {} },&eol; required_params = [&eol; 'alert_subject', 'alert_message', 'event_source', 'event_value',&eol; 'event_update_status', 'event_recovery_value',&eol; 'event_id', 'trigger_id', 'zabbix_url',&eol; 'glpi_token', 'glpi_url'&eol; ],&eol; method = 'post',&eol; process_tags = true,&eol; response;&eol;&eol; Object.keys(params)&eol; .forEach(function (key) {&eol; if (key.startsWith('glpi_')) {&eol; glpi[key.substring(5)] = params[key];&eol; }&eol; else if (required_params.indexOf(key) !== -1 && params[key] === '') {&eol; throw 'Parameter "' + key + '" can\'t be empty.';&eol; }&eol; });&eol;&eol; if ([0, 1, 2, 3].indexOf(parseInt(params.event_source)) === -1) {&eol; throw 'Incorrect "event_source" parameter given: ' + params.event_source + '\nMust be 0-3.';&eol; }&eol;&eol; // Check {EVENT.VALUE} for trigger-based and internal events.&eol; if (params.event_value !== '0' && params.event_value !== '1'&eol; && (params.event_source === '0' &pipe;&pipe; params.event_source === '3')) {&eol; throw 'Incorrect "event_value" parameter given: ' + params.event_value + '\nMust be 0 or 1.';&eol; }&eol;&eol; // Check {EVENT.UPDATE.STATUS} only for trigger-based events.&eol; if (params.event_update_status !== '0' && params.event_update_status !== '1' && params.event_source === '0') {&eol; throw 'Incorrect "event_update_status" parameter given: ' + params.event_update_status + '\nMust be 0 or 1.';&eol; }&eol;&eol; if (params.event_source !== '0' && params.event_recovery_value === '0') {&eol; throw 'Recovery operations are supported only for trigger-based actions.';&eol; }&eol;&eol; if (typeof params.zabbix_url !== 'string' &pipe;&pipe; params.zabbix_url.trim() === '' &pipe;&pipe; params.zabbix_url === '{$ZABBIX.URL}') {&eol; throw 'Field "zabbix_url" cannot be empty.';&eol; }&eol;&eol; // Check for backslash in the end of url and schema.&eol; glpi.url = GLPi.urlCheckFormat(glpi.url);&eol; params.zabbix_url = GLPi.urlCheckFormat(params.zabbix_url);&eol;&eol; glpi.authToken = GLPi.getAuthToken(glpi.url, glpi.token);&eol; GLPi.setParams(glpi);&eol;&eol; data = {&eol; 'input': {&eol; 'name': params.alert_subject,&eol; 'content': params.alert_message + '\n<a href=' + GLPi.getProblemUrl(params.zabbix_url, params.trigger_id, params.event_id, params.event_source) + '>Link to problem in Zabbix</a>',&eol; 'status': 1, // Set status "New"&eol; 'urgency': params.event_nseverity&eol; }&eol; };&eol;&eol; // In case of resolve&eol; if (params.event_source === '0' && params.event_value === '0') {&eol; process_tags = false;&eol; dataFollowup = {&eol; 'input': {&eol; 'items_id': glpi.problem_id,&eol; 'itemtype': 'Problem',&eol; 'content': params.alert_message + '\n<a href=' + GLPi.getProblemUrl(params.zabbix_url, params.trigger_id, params.event_id, params.event_source) + '>Link to problem in Zabbix</a>'&eol; }&eol; };&eol; dataProblem = {&eol; 'id': glpi.problem_id,&eol; 'input': {&eol; 'name': params.alert_subject,&eol; 'status': 5, // Set status "Solved"&eol; 'urgency': params.event_nseverity&eol; }&eol; };&eol;&eol; GLPi.request('put', glpi.url + 'apirest.php/Problem/' + glpi.problem_id, dataProblem);&eol; GLPi.request('post', glpi.url + 'apirest.php/Problem/' + glpi.problem_id + '/ITILFollowup', dataFollowup);&eol; }&eol;&eol; // In case of update&eol; else if (params.event_source === '0' && params.event_update_status === '1') {&eol; process_tags = false;&eol; dataFollowup = {&eol; 'input': {&eol; 'items_id': glpi.problem_id,&eol; 'itemtype': 'Problem',&eol; 'content': params.alert_message + '\n<a href=' + GLPi.getProblemUrl(params.zabbix_url, params.trigger_id, params.event_id, params.event_source) + '>Link to problem in Zabbix</a>'&eol; }&eol; };&eol; dataProblem = {&eol; 'id': glpi.problem_id,&eol; 'input': {&eol; 'name': params.alert_subject,&eol; 'urgency': params.event_nseverity&eol; }&eol; };&eol;&eol; GLPi.request('put', glpi.url + 'apirest.php/Problem/' + glpi.problem_id, dataProblem);&eol; GLPi.request('post', glpi.url + 'apirest.php/Problem/' + glpi.problem_id + '/ITILFollowup', dataFollowup);&eol; }&eol;&eol; // In case of problem&eol; else {&eol; response = GLPi.request('post', glpi.url + 'apirest.php/Problem/', data);&eol; }&eol;&eol; if (process_tags) {&eol; result.tags.__zbx_glpi_problem_id = response.id;&eol; result.tags.__zbx_glpi_link = glpi.url + 'front/problem.form.php?id=' + response.id;&eol; }&eol;&eol; Zabbix.log(4, '[ GLPi Webhook ] Result: ' + JSON.stringify(result));&eol; return JSON.stringify(result);&eol;}&eol;catch (error) {&eol; Zabbix.log(4, '[ GLPi Webhook ] ERROR: ' + error);&eol; throw 'Sending failed: ' + error;&eol;}|30s |1 |1 |{EVENT.TAGS.__zbx_glpi_link} |GLPi: Problem {EVENT.TAGS.__zbx_glpi_problem_id} | |0 |
-ROW |34 |0 |Gmail |smtp.gmail.com | |zabbix_example_admin@gmail.com | | | | |1 |25 |0 |0 |0 |0 | |1 |3 |10s |0 | |30s |0 |0 | | | |1 |
-ROW |35 |0 |Gmail relay |relay-smtp.gmail.com | |zabbix_example_admin@gmail.com | | | | |1 |25 |0 |0 |0 |0 | |1 |3 |10s |0 | |30s |0 |0 | | | |2 |
-ROW |36 |0 |Office365 |smtp.office365.com | |zabbix_example_admin@office365.com| | | | |1 |25 |0 |0 |0 |0 | |1 |3 |10s |0 | |30s |0 |0 | | | |3 |
-ROW |37 |0 |Office365 relay |example-com.mail.protection.outlook.com| |zabbix_example_admin@office365.com| | | | |1 |25 |0 |0 |0 |0 | |1 |3 |10s |0 | |30s |0 |0 | | | |4 |
+ROW |34 |0 |Gmail |smtp.gmail.com | |zabbix_example_admin@gmail.com | | | | |1 |25 |1 |0 |0 |1 | |1 |3 |10s |0 | |30s |0 |0 | | | |1 |
+ROW |35 |0 |Gmail relay |relay-smtp.gmail.com | |zabbix_example_admin@gmail.com | | | | |1 |25 |1 |0 |0 |1 | |1 |3 |10s |0 | |30s |0 |0 | | | |2 |
+ROW |36 |0 |Office365 |smtp.office365.com | |zabbix_example_admin@office365.com| | | | |1 |25 |1 |0 |0 |1 | |1 |3 |10s |0 | |30s |0 |0 | | | |3 |
+ROW |37 |0 |Office365 relay |example-com.mail.protection.outlook.com| |zabbix_example_admin@office365.com| | | | |1 |25 |1 |0 |0 |1 | |1 |3 |10s |0 | |30s |0 |0 | | | |4 |
TABLE |media_type_param
FIELDS|mediatype_paramid|mediatypeid|name |value |