Exemplo n.º 1
0
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')
Exemplo n.º 2
0
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'
Exemplo n.º 3
0
def __init_config() -> Config:
    args = Args()
    config = Config(defaults=config_default)
    if args.config:
        config.from_file(args.config)
    return config
Exemplo n.º 4
0
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")