feat: optimize Zabbix queries and enhance specialized device support
- Implement query optimization (reduced output, parameter skipping) to minimize Zabbix API traffic. - Add indirect dependency handling: deviceType implies tags and state implies items. - Move schema extensions to samples/extensions/ to clarify their role as samples. - Enhance DistanceTrackerDevice with String time fields to support optional date portions. - Ensure allDevices strictly filters by deviceType and populates the field in results. - Refactor runAllRegressionTests mutation to use internal unique names and improve stability. - Fix unnecessary Zabbix API calls for item preprocessing during template and host imports. - Update documentation including cookbook recipes, test specifications, and optimization guides. - Add extensive unit, integration, and regression tests covering all implemented changes. - Update docker-compose.yml to mount the samples/ directory as a volume. - Update IntelliJ .idea run configurations to reflect the new sample extension paths.
This commit is contained in:
parent
97a0f70fd6
commit
b646b8c606
28 changed files with 551 additions and 74 deletions
|
|
@ -163,6 +163,37 @@ describe("Query Optimization", () => {
|
|||
expect(callParams.output).toContain("items");
|
||||
});
|
||||
|
||||
test("allHosts optimization - keep selectTags when deviceType requested", async () => {
|
||||
(zabbixAPI.post as jest.Mock).mockResolvedValueOnce([]);
|
||||
|
||||
const args: QueryAllHostsArgs = {};
|
||||
const context = {
|
||||
zabbixAuthToken: "test-token",
|
||||
dataSources: { zabbixAPI: zabbixAPI }
|
||||
};
|
||||
const info = {
|
||||
fieldNodes: [{
|
||||
selectionSet: {
|
||||
selections: [
|
||||
{ kind: 'Field', name: { value: 'hostid' } },
|
||||
{ kind: 'Field', name: { value: 'deviceType' } }
|
||||
]
|
||||
}
|
||||
}]
|
||||
};
|
||||
|
||||
await resolvers.Query.allHosts(null, args, context, info);
|
||||
|
||||
expect(zabbixAPI.post).toHaveBeenCalledWith(expect.any(String), expect.objectContaining({
|
||||
body: expect.objectContaining({
|
||||
params: expect.objectContaining({
|
||||
output: ["hostid"],
|
||||
selectTags: expect.any(Array)
|
||||
})
|
||||
})
|
||||
}));
|
||||
});
|
||||
|
||||
test("allDevices optimization - skip items when not requested", async () => {
|
||||
(zabbixAPI.post as jest.Mock).mockResolvedValueOnce([]);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue