From 8136184a54f5425f85dd93957ecbc5ac29da0151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20Bedi?= Date: Mon, 5 May 2025 13:58:42 +0200 Subject: [PATCH] Fix: d.for.Each is not a function errors (#2005) Fixes #2002 --- .changeset/honest-chicken-compete.md | 5 + .../zabbix_api/zabbixAPIConnector.test.ts | 94 +++++++++++++++++++ .../zabbix_api/zabbixAPIConnector.ts | 6 +- 3 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 .changeset/honest-chicken-compete.md diff --git a/.changeset/honest-chicken-compete.md b/.changeset/honest-chicken-compete.md new file mode 100644 index 0000000..618d026 --- /dev/null +++ b/.changeset/honest-chicken-compete.md @@ -0,0 +1,5 @@ +--- +'grafana-zabbix': patch +--- + +Fix: frontend error when running count triggers diff --git a/src/datasource/zabbix/connectors/zabbix_api/zabbixAPIConnector.test.ts b/src/datasource/zabbix/connectors/zabbix_api/zabbixAPIConnector.test.ts index 5369ae1..56dbafe 100644 --- a/src/datasource/zabbix/connectors/zabbix_api/zabbixAPIConnector.test.ts +++ b/src/datasource/zabbix/connectors/zabbix_api/zabbixAPIConnector.test.ts @@ -50,4 +50,98 @@ describe('Zabbix API connector', () => { }); }); }); + + describe('getHostAlerts function', () => { + it('should return number when count is enabled and acknowledged is 1 and version is 7 or greater', async () => { + const zabbixAPIConnector = new ZabbixAPIConnector(true, true, 123); + zabbixAPIConnector.version = '7.0.0'; + zabbixAPIConnector.request = jest.fn(() => Promise.resolve(triggers)); + + const result = await zabbixAPIConnector.getHostAlerts(undefined, undefined, { count: true, acknowledged: 1 }); + expect(result).toBe(0); + }); + }); + + describe('getHostICAlerts function', () => { + it('should return number when count is enabled and acknowledged is 1 and version is 7 or greater', async () => { + const zabbixAPIConnector = new ZabbixAPIConnector(true, true, 123); + zabbixAPIConnector.version = '7.0.0'; + zabbixAPIConnector.request = jest.fn(() => Promise.resolve(triggers)); + + const result = await zabbixAPIConnector.getHostICAlerts(undefined, undefined, undefined, { + count: true, + acknowledged: 1, + }); + expect(result).toBe(0); + }); + }); + + describe('getHostPCAlerts function', () => { + it('should return number when count is enabled and acknowledged is 1 and version is 7 or greater', async () => { + const zabbixAPIConnector = new ZabbixAPIConnector(true, true, 123); + zabbixAPIConnector.version = '7.0.0'; + zabbixAPIConnector.request = jest.fn(() => Promise.resolve(triggers)); + + const result = await zabbixAPIConnector.getHostPCAlerts(undefined, undefined, undefined, { + count: true, + acknowledged: 1, + }); + expect(result).toBe(0); + }); + }); }); + +const triggers = [ + { + comments: 'For passive agents only, host availability is used with `3m` as a time threshold.', + correlation_mode: '0', + correlation_tag: '', + description: 'Linux: Zabbix agent is not available', + error: '', + event_name: 'Linux: Zabbix agent is not available (for {$AGENT.TIMEOUT})', + expression: '{30619}=0', + flags: '0', + hostgroups: [ + { + flags: '0', + groupid: '4', + name: 'Zabbix servers', + uuid: '6f6799aa69e844b4b3918f779f2abf08', + }, + ], + hosts: [ + { + host: 'Zabbix server', + hostid: '10084', + name: 'Zabbix server', + }, + ], + lastEvent: { + acknowledged: '0', + clock: '1741858886', + eventid: '23', + name: 'Linux: Zabbix agent is not available (for 3m)', + ns: '223852878', + object: '0', + objectid: '22391', + severity: '3', + source: '0', + value: '1', + }, + lastchange: '1741858886', + manual_close: '1', + opdata: '', + priority: '3', + recovery_expression: '', + recovery_mode: '0', + state: '0', + status: '0', + templateid: '22377', + triggerid: '22391', + type: '0', + url: '', + url_name: '', + uuid: '', + value: '1', + }, +]; diff --git a/src/datasource/zabbix/connectors/zabbix_api/zabbixAPIConnector.ts b/src/datasource/zabbix/connectors/zabbix_api/zabbixAPIConnector.ts index 36064cd..0fd5c0f 100644 --- a/src/datasource/zabbix/connectors/zabbix_api/zabbixAPIConnector.ts +++ b/src/datasource/zabbix/connectors/zabbix_api/zabbixAPIConnector.ts @@ -793,7 +793,7 @@ export class ZabbixAPIConnector { triggers = triggers.length; } // When version is 7.0.0 or higher, groups are returned as hostgroups - if (semver.gte(this.version, '7.0.0')) { + if (semver.gte(this.version, '7.0.0') && !count) { triggers.forEach((trigger) => { trigger.groups = trigger.hostgroups; }); @@ -848,7 +848,7 @@ export class ZabbixAPIConnector { triggers = triggers.length; } // When version is 7.0.0 or higher, groups are returned as hostgroups - if (semver.gte(this.version, '7.0.0')) { + if (semver.gte(this.version, '7.0.0') && !count) { triggers.forEach((trigger) => { trigger.groups = trigger.hostgroups; }); @@ -897,7 +897,7 @@ export class ZabbixAPIConnector { triggers = triggers.length; } // When version is 7.0.0 or higher, groups are returned as hostgroups - if (semver.gte(this.version, '7.0.0')) { + if (semver.gte(this.version, '7.0.0') && !count) { triggers.forEach((trigger) => { trigger.groups = trigger.hostgroups; });