/* This file is part of »munin«. Copyright 2025 'Fenris Wolf' »munin« is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. »munin« is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with »munin«. If not, see . */ namespace _munin { /** */ export async function main( args_raw : Array ): Promise { // args const arg_handler : lib_plankton.args.class_handler = new lib_plankton.args.class_handler( { "action": lib_plankton.args.class_argument.positional({ "index": 0, "type": lib_plankton.args.enum_type.string, "mode": lib_plankton.args.enum_mode.replace, "default": "run", "info": "what to do : test | run", "name": "action", }), "conf_path": lib_plankton.args.class_argument.volatile({ "indicators_long": ["conf-path"], "indicators_short": ["c"], "type": lib_plankton.args.enum_type.string, "mode": lib_plankton.args.enum_mode.replace, "default": "munin.json", "info": "path to configuration file", "name": "conf-path", }), "conf_schema": lib_plankton.args.class_argument.volatile({ "indicators_long": ["conf-schema"], "indicators_short": ["s"], "type": lib_plankton.args.enum_type.string, "mode": lib_plankton.args.enum_mode.replace, "default": "", "info": "only print the configuration schema in a specific version (latest version via argument '_')", "name": "conf-schema", }), "conf_expose": lib_plankton.args.class_argument.volatile({ "indicators_long": ["conf-expose"], "indicators_short": ["e"], "type": lib_plankton.args.enum_type.boolean, "mode": lib_plankton.args.enum_mode.replace, "default": false, "info": "whether to expose the full configuration", "name": "conf-expose", }), "single_run": lib_plankton.args.class_argument.volatile({ "indicators_long": ["single-run"], "indicators_short": ["x"], "type": lib_plankton.args.enum_type.boolean, "mode": lib_plankton.args.enum_mode.replace, "default": false, "info": "whether to only execute one iteration at run", "name": "single-run", }), "verbosity": lib_plankton.args.class_argument.volatile({ "indicators_long": ["verbosity"], "indicators_short": ["v"], "type": lib_plankton.args.enum_type.string, "mode": lib_plankton.args.enum_mode.replace, "default": "notice", "info": "error | warning | notice | info | debug", "name": "verbosity", }), "dry_run": lib_plankton.args.class_argument.volatile({ "indicators_long": ["dry-run"], "indicators_short": ["q"], "type": lib_plankton.args.enum_type.boolean, "mode": lib_plankton.args.enum_mode.replace, "default": false, "info": "whether to skip the sending of reminders (logs will be written)", "name": "dry-run", }), "help": lib_plankton.args.class_argument.volatile({ "indicators_long": ["help"], "indicators_short": ["h"], "type": lib_plankton.args.enum_type.boolean, "mode": lib_plankton.args.enum_mode.replace, "default": false, "info": "alias for action 'help'", "name": "help", }), } ); const args : Record = arg_handler.read( lib_plankton.args.enum_environment.cli, args_raw.join(" ") ); if (args.help) { process.stdout.write( arg_handler.generate_help( { "programname": "munin", "description": "sends reminders about upcoming events", "executable": "node build/munin", } ) ); } else { if (args.conf_schema !== "") { process.stdout.write( lib_plankton.json.encode( _munin.conf.schema((args.conf_schema === "_") ? undefined : args.conf_schema), { "formatted": true, } ) + "\n" ); } else { switch (args.action) { default: { throw (new Error("unhandled action: " + args.action)); break; } case "test": { _munin.test.all(); break; } case "run": { // init const conf : _munin.conf.type_conf = await _munin.conf.load(args.conf_path); lib_plankton.log.set_main_logger( [ { "kind": "filtered", "data": { "core": { "kind": "std", "data": { "target": "stdout", "format": { "kind": "jsonl", "data": { "structured": true } } } }, "predicate": [ [ { "item": { "kind": "level", "data": { "threshold": args.verbosity, } }, }, ] ], } }, ] ); // exec if (args.conf_expose) { process.stdout.write( lib_plankton.json.encode( conf, { "formatted": true, } ) + "\n" ); } _munin.logic.run( conf, { "single_run": args.single_run, "dry_run": args.dry_run, } ); break; } } } } return Promise.resolve(undefined); } } _munin.main(process.argv.slice(2)) .then(() => {}) .catch((reason) => {process.stderr.write(String(reason) + "\n");}) ;