import {DeleteResponse} from "../schema/generated/graphql.js"; import { ZabbixDeleteHostsRequest, ZabbixQueryHostsGenericRequest, } from "../datasources/zabbix-hosts.js"; import { ZabbixDeleteHostGroupsRequest, ZabbixQueryHostgroupsRequest, ZabbixQueryHostgroupsParams, GroupHelper } from "../datasources/zabbix-hostgroups.js"; import {isZabbixErrorResult, ParsedArgs} from "../datasources/zabbix-request.js"; import {zabbixAPI} from "../datasources/zabbix-api.js"; export class HostDeleter { public static async deleteHosts(hostids: number[] | null | undefined, name_pattern?: string | null, zabbixAuthToken?: string, cookie?: string): Promise { const result: DeleteResponse[] = []; let idsToDelete = hostids ? [...hostids] : []; if (name_pattern) { const queryResult = await new ZabbixQueryHostsGenericRequest("host.get", zabbixAuthToken, cookie) .executeRequestReturnError(zabbixAPI, new ParsedArgs({ name_pattern: name_pattern })); if (!isZabbixErrorResult(queryResult) && Array.isArray(queryResult)) { const foundIds = queryResult.map((t: any) => Number(t.hostid)); // Merge and deduplicate idsToDelete = Array.from(new Set([...idsToDelete, ...foundIds])); } } if (idsToDelete.length === 0) { return []; } const deleteResult = await new ZabbixDeleteHostsRequest(zabbixAuthToken, cookie) .executeRequestReturnError(zabbixAPI, new ParsedArgs(idsToDelete)); if (isZabbixErrorResult(deleteResult)) { let errorMessage = deleteResult.error.message; if (deleteResult.error.data) { errorMessage += " " + (typeof deleteResult.error.data === 'string' ? deleteResult.error.data : JSON.stringify(deleteResult.error.data)); } for (const id of idsToDelete) { result.push({ id: id, message: errorMessage, error: deleteResult.error }); } } else if (deleteResult?.hostids) { for (const id of idsToDelete) { result.push({ id: id, message: `Host ${id} deleted successfully` }); } } return result; } public static async deleteHostGroups(groupids: number[] | null | undefined, name_pattern?: string | null, zabbixAuthToken?: string, cookie?: string): Promise { const result: DeleteResponse[] = []; let idsToDelete = groupids ? [...groupids] : []; if (name_pattern) { const queryResult = await new ZabbixQueryHostgroupsRequest(zabbixAuthToken, cookie) .executeRequestReturnError(zabbixAPI, new ZabbixQueryHostgroupsParams({ filter_name: GroupHelper.groupFullName(name_pattern) })); if (!isZabbixErrorResult(queryResult) && Array.isArray(queryResult)) { const foundIds = queryResult.map(g => Number(g.groupid)); // Merge and deduplicate idsToDelete = Array.from(new Set([...idsToDelete, ...foundIds])); } } if (idsToDelete.length === 0) { return []; } const deleteResult = await new ZabbixDeleteHostGroupsRequest(zabbixAuthToken, cookie) .executeRequestReturnError(zabbixAPI, new ParsedArgs(idsToDelete)); if (isZabbixErrorResult(deleteResult)) { let errorMessage = deleteResult.error.message; if (deleteResult.error.data) { errorMessage += " " + (typeof deleteResult.error.data === 'string' ? deleteResult.error.data : JSON.stringify(deleteResult.error.data)); } for (const id of idsToDelete) { result.push({ id: id, message: errorMessage, error: deleteResult.error }); } } else if (deleteResult?.groupids) { for (const id of idsToDelete) { result.push({ id: id, message: `Host group ${id} deleted successfully` }); } } return result; } }