chore: centralize configuration management using a new Config class

- Replaced all direct `process.env` references with `Config` class constants.
- Added `dotenv` package to manage environment variables.
- Updated affected files, including schema loader, Zabbix API, resolvers, logging system, and integration points.
- Improved maintainability and consistency in environment variable handling.
This commit is contained in:
Andreas Hilbig 2026-01-27 17:28:22 +01:00
parent 6312c3a2f7
commit 2a8ff989f3
10 changed files with 95 additions and 72 deletions

View file

@ -58,6 +58,7 @@ import {ZABBIX_EDGE_DEVICE_BASE_GROUP, zabbixAPI} from "../datasources/zabbix-ap
import {GraphQLInterfaceType, GraphQLList} from "graphql/type/index.js";
import {isDevice} from "./resolver_helpers.js";
import {ZabbixPermissionsHelper} from "../datasources/zabbix-permissions.js";
import {Config} from "../common_utils.js";
export function createResolvers(): Resolvers {
@ -78,7 +79,7 @@ export function createResolvers(): Resolvers {
return dataSources.zabbixAPI.getLocations(zabbixAuthToken, new ParsedArgs(args));
},
apiVersion: () => {
return process.env.API_VERSION ?? "unknown"
return Config.API_VERSION ?? "unknown"
},
zabbixVersion: async () => {
return await new ZabbixRequest<string>("apiinfo.version").executeRequestThrowError(

View file

@ -8,6 +8,7 @@ import {readFileSync} from "fs";
import {GraphQLSchema} from "graphql/type";
import {createResolvers} from "./resolvers.js";
import {readdirSync} from "node:fs";
import {Config} from "../common_utils.js";
const createZabbixHierarchicalDeviceFieldResolver =
@ -26,15 +27,15 @@ const createZabbixHierarchicalDeviceTagsResolver =
}
export async function schema_loader(): Promise<GraphQLSchema> {
const resolvers = createResolvers();
const schemaPath = process.env.SCHEMA_PATH || './schema/';
const schemaPath = Config.SCHEMA_PATH || './schema/';
console.log(`Loading schema from path: ${schemaPath}, cwd=${process.cwd()}`);
var schemaFiles = readdirSync(schemaPath).filter(fn => fn.endsWith('.graphql'));
let typeDefs: string = "";
for (const schemaFile of schemaFiles) {
typeDefs += readFileSync(schemaPath + schemaFile, {encoding: 'utf-8'});
}
if (process.env.ADDITIONAL_SCHEMAS) {
for (const schema of process.env.ADDITIONAL_SCHEMAS.split(",")){
if (Config.ADDITIONAL_SCHEMAS) {
for (const schema of Config.ADDITIONAL_SCHEMAS.split(",")){
typeDefs += readFileSync(schema, {encoding: 'utf-8'});
}
}
@ -54,8 +55,8 @@ export async function schema_loader(): Promise<GraphQLSchema> {
GenericDevice: createZabbixHierarchicalDeviceFieldResolver("GenericDevice", originalSchema, additionalMappings),
DeviceConfig: createZabbixHierarchicalDeviceTagsResolver("DeviceConfig", originalSchema),
}
if (process.env.ADDITIONAL_RESOLVERS) {
for (const resolver of process.env.ADDITIONAL_RESOLVERS.split(",")){
if (Config.ADDITIONAL_RESOLVERS) {
for (const resolver of Config.ADDITIONAL_RESOLVERS.split(",")){
genericResolvers[resolver] = createZabbixHierarchicalDeviceFieldResolver(resolver, originalSchema, additionalMappings)
}
}