59 lines
2.4 KiB
TypeScript
59 lines
2.4 KiB
TypeScript
import {
|
|
createHierarchicalValueFieldResolver,
|
|
zabbixItemValueSourceFieldMapper,
|
|
zabbixTagsValueSourceFieldMapper
|
|
} from "./resolver_helpers.js";
|
|
import {makeExecutableSchema, mergeSchemas} from "@graphql-tools/schema";
|
|
import {readFileSync} from "fs";
|
|
import {GraphQLSchema} from "graphql/type";
|
|
import {createResolvers} from "./resolvers.js";
|
|
|
|
|
|
const createZabbixHierarchicalDeviceFieldResolver =
|
|
(typename: string, schema: any, additionalMappings: { [p: string]: any } = {}) => {
|
|
return {
|
|
...createHierarchicalValueFieldResolver(schema, typename, zabbixItemValueSourceFieldMapper),
|
|
...additionalMappings
|
|
}
|
|
}
|
|
const createZabbixHierarchicalDeviceTagsResolver =
|
|
(typename: string, schema: any, additionalMappings: { [p: string]: any } = {}) => {
|
|
return {
|
|
...createHierarchicalValueFieldResolver(schema, typename, zabbixTagsValueSourceFieldMapper),
|
|
...additionalMappings
|
|
}
|
|
}
|
|
export async function schema_loader(): Promise<GraphQLSchema> {
|
|
const resolvers = createResolvers();
|
|
let typeDefs: string = readFileSync('./src/schema/*.graphql', {encoding: 'utf-8'});
|
|
if (process.env.ADDITIONAL_SCHEMAS) {
|
|
for (const schema of process.env.ADDITIONAL_SCHEMAS.split(",")){
|
|
typeDefs += readFileSync(schema, {encoding: 'utf-8'});
|
|
}
|
|
}
|
|
|
|
let originalSchema =
|
|
makeExecutableSchema({
|
|
typeDefs,
|
|
resolvers,
|
|
});
|
|
let additionalMappings = {
|
|
tags: (parent: { tags: any; inheritedTags: any }) => {
|
|
return (parent.tags || []).concat(parent.inheritedTags || [])
|
|
}
|
|
}
|
|
let genericResolvers: Record<string, any> = {
|
|
Device: createZabbixHierarchicalDeviceFieldResolver("Device", originalSchema,additionalMappings ),
|
|
GenericDevice: createZabbixHierarchicalDeviceFieldResolver("GenericDevice", originalSchema, additionalMappings),
|
|
}
|
|
if (process.env.ADDITIONAL_RESOLVERS) {
|
|
for (const resolver of process.env.ADDITIONAL_RESOLVERS.split(",")){
|
|
genericResolvers[resolver] = createZabbixHierarchicalDeviceFieldResolver(resolver, originalSchema, additionalMappings)
|
|
}
|
|
}
|
|
return mergeSchemas({
|
|
schemas: [originalSchema],
|
|
// TODO Generate resolvers for all schema types with @generateZabbix directive automatically
|
|
resolvers: genericResolvers
|
|
});
|
|
}
|