feat: implement weather sensor extension and enhance device interfaces

This change introduces the Weather Sensor device type which retrieves data from public APIs, and enhances the core Host/Device interfaces to provide consistent access to inventory and items across all specialized device types. It also improves search logic and fixes several bugs identified during implementation.

- Weather Sensor Extension: Added schema and recipe for a device retrieving weather data via Zabbix HTTP agent items.

- Interface Enhancements: Added inventory and items fields to Host and Device interfaces to ensure all device specialized types have consistent access to monitoring and inventory data.

- Search Logic Improvements: Enhanced ParsedArgs to support searchByAny and technical name (host) searches when a name pattern is provided.

- Bug Fixes:

  - Fixed getLocations argument order in the Zabbix API datasource.

  - Implemented deduplication for groupids and templateids in HostImporter to prevent Zabbix duplicate value errors.

  - Added missing url field to CreateTemplateItem for HTTP Agent item support.

- Testing:

  - Extended the regression test suite with 4 new automated checks covering the fixed bugs.

  - Updated Jest tests to accommodate the improved search parameters.

- Documentation: Updated cookbook and test specifications to reflect new features and regression testing obligations.
This commit is contained in:
Andreas Hilbig 2026-02-01 06:36:29 +01:00
parent b84e4c0734
commit 5da4a17e36
20 changed files with 438 additions and 98 deletions

View file

@ -1,9 +1,9 @@
import {DeleteResponse} from "../schema/generated/graphql.js";
import {
TemplateHelper,
ZabbixDeleteTemplateGroupsRequest,
ZabbixDeleteTemplatesRequest,
ZabbixQueryTemplateGroupRequest,
ZabbixQueryTemplatesRequest
ZabbixQueryTemplateGroupRequest
} from "../datasources/zabbix-templates.js";
import {isZabbixErrorResult, ParsedArgs} from "../datasources/zabbix-request.js";
import {zabbixAPI} from "../datasources/zabbix-api.js";
@ -15,11 +15,8 @@ export class TemplateDeleter {
let idsToDelete = templateids ? [...templateids] : [];
if (name_pattern) {
const queryResult = await new ZabbixQueryTemplatesRequest(zabbixAuthToken, cookie)
.executeRequestReturnError(zabbixAPI, new ParsedArgs({ name_pattern: name_pattern }));
if (!isZabbixErrorResult(queryResult) && Array.isArray(queryResult)) {
const foundIds = queryResult.map(t => Number(t.templateid));
const foundIds = await TemplateHelper.findTemplateIdsByName([name_pattern], zabbixAPI, zabbixAuthToken, cookie);
if (foundIds) {
// Merge and deduplicate
idsToDelete = Array.from(new Set([...idsToDelete, ...foundIds]));
}