class ConfigTest(TestCase): config_default = { "REPORT_SIZE": 1000, "REPORT_DIR": "./reports", "LOG_DIR": "./log" } def setUp(self): self.config = Config(defaults=self.config_default) def test_default(self): self.assertEqual(self.config['REPORT_SIZE'], self.config_default['REPORT_SIZE']) self.assertEqual(self.config['REPORT_DIR'], self.config_default['REPORT_DIR']) self.assertEqual(self.config['LOG_DIR'], self.config_default['LOG_DIR']) def test_from_file(self): self.config.from_file('./tests/testdata/config.cfg') self.assertEqual(self.config['REPORT_SIZE'], 1050) self.assertEqual(self.config['REPORT_DIR'], './test_reports') self.assertEqual(self.config['LOG_DIR'], './test_log') def test_partial_configuration_from_file(self): self.config.from_file('./tests/testdata/config_report_size.cfg') self.assertEqual(self.config['REPORT_SIZE'], 1050) self.assertEqual(self.config['REPORT_DIR'], self.config_default['REPORT_DIR']) self.assertEqual(self.config['LOG_DIR'], self.config_default['LOG_DIR']) def test_empty_from_file(self): self.config.from_file('./tests/testdata/config_empty.cfg') self.assertEqual(self.config['REPORT_SIZE'], self.config_default['REPORT_SIZE']) self.assertEqual(self.config['REPORT_DIR'], self.config_default['REPORT_DIR']) self.assertEqual(self.config['LOG_DIR'], self.config_default['LOG_DIR']) def test_not_exist_from_file(self): with self.assertRaises(Exception): self.config.from_file('./tests/testdata/config_test.cfg')
import flask import flask_login import core.db import core.utils from core.model.user import User from core.config import Config, CONFIG_FILE_PATH from .views.dash import dash from .views.auth import auth from .views.admin import admin from .views.api import api # Parse config config = Config.from_file(CONFIG_FILE_PATH) # Initialise Flask & register blueprints app = flask.Flask(__name__) app.config.update(config.get_flask_config()) app.register_blueprint(dash) app.register_blueprint(auth) app.register_blueprint(admin, url_prefix='/admin') app.register_blueprint(api, url_prefix='/api') # Initialise login manager login_manager = flask_login.LoginManager() login_manager.init_app(app) login_manager.login_view = 'auth.route_login' login_manager.login_message = 'You need to login to do that.' login_manager.login_message_category = 'danger'
def __init_config() -> Config: args = Args() config = Config(defaults=config_default) if args.config: config.from_file(args.config) return config
def main(): parser = argparse.ArgumentParser(description="HEALTH CHECKER.") parser.add_argument("-c", "--config", default="/etc/healthchecker.yaml", help="Path to config file.") parser.add_argument("-v", "--verbose", action="count", default=0, help="Increase logging verbosity.") parser.add_argument("-q", "--quiet", action="count", default=0, help="Decrease logging verbosity.") parser.add_argument("-V", "--version", action="version", version="%%(prog)s %s" % __version__, help="Display version information.") args = parser.parse_args() oid_translate.load_mibs() config = Config.from_file(args.config) db_host, db_port, db_name, db_user, db_passwd = config.get_database_config( ) db_engine = PooledMySQLDatabase( db_name, **{ 'host': db_host, 'port': db_port, 'password': db_passwd, 'user': db_user }) models = [Target, FPingMessage, Device, EventMessage, Port] db_engine.bind(models) community = config["community"] if not community: community = None ipv6_server = config["ipv6"] if not ipv6_server: ipv6_server = None trap_cb = TrapperCallback(db_engine, config, community) logging.basicConfig( filename=LOGFILE, level=10, #get_loglevel(args), format=LOGFORMAT) transport_dispatcher = AsynsockDispatcher() transport_dispatcher.registerRecvCbFun(trap_cb) if ipv6_server: transport_dispatcher.registerTransport( udp6.domainName, udp6.Udp6SocketTransport().openServerMode( ("::1", int(config["trap_port"])))) transport_dispatcher.registerTransport( udp.domainName, udp.UdpSocketTransport().openServerMode( ("0.0.0.0", int(config["trap_port"])))) transport_dispatcher.jobStarted(1) process_count = config['process_count'] if not process_count: process_count = ( multiprocessing.cpu_count() * 2 + 1) if (multiprocessing.cpu_count() * 2 + 1) < 11 else 10 logging.info("multiprocess count is : %s" % process_count) fping_count = int(config['fping_count']) if not fping_count: fping_count = 5 logging.info("fping count is : %d" % fping_count) interval_time = int(config['interval_time']) if not interval_time: interval_time = 1 fping_cb = FPingCallback(db_engine) scheduler = BackgroundScheduler() trigger = IntervalTrigger(minutes=interval_time) # FIX PYINSTALL BUG scheduler.add_job(fping_cb, trigger, args=(process_count, fping_count), max_instances=10) #scheduler.add_job(fping_cb, trigger='interval', args=(process_count, fping_count), # max_instances=10, minutes=interval_time) ## syslog service host = '127.0.0.1' port = 8889 syslog_service = SyslogService(db_engine, host, port) TRAP = False try: scheduler.start() if TRAP: #TODO new thread transport_dispatcher.runDispatcher() else: #redo_start_time = datetime.datetime.now() + datetime.timedelta(seconds=-20) redo_start_time = config.get("redo_start_time") if redo_start_time is None: redo_start_time = False syslog_service.start(redo_start_time) except KeyboardInterrupt: pass finally: logging.info("Shutdown Scheduler...") scheduler.shutdown() if TRAP: logging.info("Stopping Transport Dispatcher...") transport_dispatcher.closeDispatcher() else: syslog_service.stop() logging.info("Bye")