From 208fc9e1ebb3fab4476398f9303dc24aabfd2cac Mon Sep 17 00:00:00 2001 From: Arseniy Kuznetsov Date: Wed, 4 Jan 2023 16:29:50 +0100 Subject: [PATCH] custom config files directory --- mktxp/cli/config/config.py | 19 +++++++++++++++++-- mktxp/cli/config/mktxp.conf | 3 ++- mktxp/cli/options.py | 27 ++++++++++++++++++--------- setup.py | 2 +- 4 files changed, 38 insertions(+), 13 deletions(-) diff --git a/mktxp/cli/config/config.py b/mktxp/cli/config/config.py index 05549ea..4568585 100755 --- a/mktxp/cli/config/config.py +++ b/mktxp/cli/config/config.py @@ -186,12 +186,27 @@ class LinuxConfig(OSConfig): @property def mktxp_user_dir_path(self): return FSHelper.full_path('~/mktxp') - # return FSHelper.full_path('/etc/mktxp') + + +class CustomConfig(OSConfig): + ''' Custom config + ''' + def __init__(self, path): + self._user_dir_path = path + + @property + def mktxp_user_dir_path(self): + return FSHelper.full_path(self._user_dir_path) class MKTXPConfigHandler: + # two-phase init def __init__(self): - self.os_config = OSConfig.os_config() + pass + + # two-phase init, to enable custom config + def __call__(self, os_config = None): + self.os_config = os_config if os_config else OSConfig.os_config() if not self.os_config: sys.exit(1) diff --git a/mktxp/cli/config/mktxp.conf b/mktxp/cli/config/mktxp.conf index a0752fc..22beb0e 100644 --- a/mktxp/cli/config/mktxp.conf +++ b/mktxp/cli/config/mktxp.conf @@ -35,8 +35,9 @@ ipv6_firewall = False # IPv6 Firewall rules traffic metrics ipv6_neighbor = False # Reachable IPv6 Neighbors - monitor = True # Interface monitor metrics poe = True # POE metrics + monitor = True # Interface monitor metrics + netwatch = True # Netwatch metrics public_ip = True # Public IP metrics route = True # Routes metrics wireless = True # WLAN general metrics diff --git a/mktxp/cli/options.py b/mktxp/cli/options.py index 1961c13..f0d7e5c 100755 --- a/mktxp/cli/options.py +++ b/mktxp/cli/options.py @@ -15,7 +15,7 @@ import os import pkg_resources from argparse import ArgumentParser, HelpFormatter -from mktxp.cli.config.config import config_handler, MKTXPConfigKeys +from mktxp.cli.config.config import config_handler, MKTXPConfigKeys, CustomConfig from mktxp.utils.utils import FSHelper, UniquePartialMatchList, run_cmd @@ -62,22 +62,31 @@ Selected metrics info can be printed on the command line. For more information, def parse_options(self): ''' General Options parsing workflow ''' - parser = ArgumentParser(prog = self._script_name, + + global_options_parser = ArgumentParser(add_help=False) + self.parse_global_options(global_options_parser) + namespace, _ = global_options_parser.parse_known_args() + if namespace.dir: + config_handler(CustomConfig(namespace.dir)) + else: + config_handler() + + commands_parser = ArgumentParser(prog = self._script_name, description = 'Prometheus Exporter for Mikrotik RouterOS', - formatter_class=MKTXPHelpFormatter) + formatter_class=MKTXPHelpFormatter, parents=[global_options_parser]) + self.parse_commands(commands_parser) + args = vars(commands_parser.parse_args()) - self.parse_global_options(parser) - self.parse_commands(parser) - args = vars(parser.parse_args()) - - self._check_args(args, parser) + self._check_args(args, commands_parser) return args def parse_global_options(self, parser): ''' Parses global options ''' - pass + parser.add_argument('--dir', dest = 'dir', + type = lambda d: self._is_valid_dir_path(parser, d), + help = 'MKTXP config files directory (optional)') def parse_commands(self, parser): ''' Commands parsing diff --git a/setup.py b/setup.py index 6294425..644517f 100755 --- a/setup.py +++ b/setup.py @@ -20,7 +20,7 @@ with open(path.join(pkg_dir, 'README.md'), encoding='utf-8') as f: setup( name='mktxp', - version='0.42', + version='1.0rc', url='https://github.com/akpw/mktxp',