zabbix-graphql-api/src/datasources/zabbix-script.ts

89 lines
4.1 KiB
TypeScript

import {ZabbixAPI} from "./zabbix-api.js";
import {ApiErrorCode} from "../model/model_enum_values.js";
import {isZabbixErrorResult, ParsedArgs, ZabbixErrorResult, ZabbixParams, ZabbixRequest} from "./zabbix-request.js";
import {ZabbixQueryHostsMetaRequest} from "./zabbix-hosts.js";
export class ZabbixForceCacheReloadParams extends ParsedArgs {
constructor(public hostid: number) {
super();
}
}
export class ZabbixForceCacheReloadRequest extends ZabbixRequest<{
response: string
value: string
}, ZabbixForceCacheReloadParams> {
private static ZABBIX_RELOAD_CACHE_SCRIPT_NAME = "Reload configuration cache";
private static reloadCacheScriptId = 0;
private reloadCacheHostId = 0;
private static ZABBIX_RELOAD_CACHE_SCRIPT_PARAMS = {
"name": this.ZABBIX_RELOAD_CACHE_SCRIPT_NAME,
"command": "/usr/lib/zabbix/alertscripts/config_cache_reload.sh",
"host_access": "2",
"description": "Reload the configuration cache making config changes like new hosts/items visible to zabbix_server. Without this new values cannot be received.",
"type": "0",
"execute_on": "1",
"timeout": "30s",
"scope": "2"
};
constructor(authToken?: string | null, cookie?: string | null) {
super("script.execute", authToken, cookie);
}
async prepare(zabbixAPI: ZabbixAPI, args?: ZabbixForceCacheReloadParams) {
this.reloadCacheHostId = args?.hostid || 0;
if (!this.reloadCacheHostId) {
let someHost = await new ZabbixQueryHostsMetaRequest(this.authToken, this.cookie).executeRequestReturnError(zabbixAPI, new ParsedArgs({limit: 1}))
if (!isZabbixErrorResult(someHost) && someHost && someHost.length && someHost[0].hostid) {
this.reloadCacheHostId = Number(someHost[0].hostid)
} else {
this.prepResult = {
error: {
message: "Unable to find host for executing scripts",
code: ApiErrorCode.ZABBIX_HOST_NOT_FOUND,
path: this.path,
args: args,
}
} as ZabbixErrorResult
return this.prepResult
}
}
if (!args?.zabbix_params?.hasOwnProperty("scriptid") && !ZabbixForceCacheReloadRequest.reloadCacheScriptId) {
let scriptResult = await new ZabbixRequest<{
scriptid: string
}[]>("script.get", this.authToken, this.cookie).executeRequestThrowError(zabbixAPI, new ParsedArgs(
{filter_name: ZabbixForceCacheReloadRequest.ZABBIX_RELOAD_CACHE_SCRIPT_NAME}))
if (scriptResult && scriptResult.length && scriptResult[0].scriptid) {
ZabbixForceCacheReloadRequest.reloadCacheScriptId = Number(scriptResult[0].scriptid)
} else {
let createScriptResult = await new ZabbixRequest<{
scriptids: string[]
}>("script.create", this.authToken, this.cookie).executeRequestThrowError(zabbixAPI,
new ParsedArgs(ZabbixForceCacheReloadRequest.ZABBIX_RELOAD_CACHE_SCRIPT_PARAMS))
if (!isZabbixErrorResult(createScriptResult) && createScriptResult?.scriptids && createScriptResult.scriptids.length) {
ZabbixForceCacheReloadRequest.reloadCacheScriptId = Number(createScriptResult.scriptids[0]);
} else {
this.prepResult = {
error: {
message: "Unable to find or create script for reloading cache",
code: ApiErrorCode.ZABBIX_SCRIPT_NOT_FOUND,
data: createScriptResult,
path: this.path,
args: args,
}
} as ZabbixErrorResult
}
}
return this.prepResult
}
}
createZabbixParams(_args?: ZabbixForceCacheReloadParams): ZabbixParams {
return {
"scriptid": ZabbixForceCacheReloadRequest.reloadCacheScriptId,
"hostid": this.reloadCacheHostId,
}
}
}