Esempio n. 1
0
class MADmin(object):
    def __init__(self, args, db_wrapper: DbWrapper, ws_server,
                 mapping_manager: MappingManager, data_manager, device_updater,
                 jobstatus, storage_obj):
        self._db_wrapper: DbWrapper = db_wrapper
        self._args = args
        self._app = app
        self._mapping_manager: MappingManager = mapping_manager
        self._storage_obj = storage_obj
        self._device_updater = device_updater
        self._ws_server: WebsocketServer = ws_server
        self._data_manager = data_manager
        self._jobstatus = jobstatus
        self._plugin_hotlink: list = []
        self.path = MADminPath(self._db_wrapper, self._args, self._app,
                               self._mapping_manager, self._jobstatus,
                               self._data_manager, self._plugin_hotlink)
        self.map = MADminMap(self._db_wrapper, self._args,
                             self._mapping_manager, self._app,
                             self._data_manager)
        self.statistics = MADminStatistics(self._db_wrapper, self._args, app,
                                           self._mapping_manager,
                                           self._data_manager)
        self.control = MADminControl(self._db_wrapper, self._args,
                                     self._mapping_manager, self._ws_server,
                                     logger, self._app, self._device_updater)
        self.APIEntry = APIEntry(logger, self._app, self._data_manager,
                                 self._mapping_manager, self._ws_server,
                                 self._args.config_mode, self._storage_obj)
        self.config = MADminConfig(self._db_wrapper, self._args, logger,
                                   self._app, self._mapping_manager,
                                   self._data_manager)
        self.apk_manager = APKManager(self._db_wrapper, self._args, self._app,
                                      self._mapping_manager, self._jobstatus,
                                      self._storage_obj)
        self.event = MADminEvent(self._db_wrapper, self._args, logger,
                                 self._app, self._mapping_manager,
                                 self._data_manager)

    @logger.catch()
    def madmin_start(self):
        try:
            # load routes
            if self._args.madmin_base_path:
                self._app.wsgi_app = ReverseProxied(
                    self._app.wsgi_app,
                    script_name=self._args.madmin_base_path)
            # start modules
            self.path.start_modul()
            self.map.start_modul()
            self.statistics.start_modul()
            self.config.start_modul()
            self.apk_manager.start_modul()
            self.event.start_modul()
            self.control.start_modul()
            self._app.run(host=self._args.madmin_ip,
                          port=int(self._args.madmin_port),
                          threaded=True)
        except:  # noqa: E722
            logger.opt(
                exception=True).critical('Unable to load MADmin component')
        logger.info('Finished madmin')

    def add_route(self, routes):
        for route, view_func in routes:
            self._app.route(route, methods=['GET', 'POST'])(view_func)

    def register_plugin(self, pluginname):
        self._app.register_blueprint(pluginname)

    def add_plugin_hotlink(self, name, link, plugin, description, author, url,
                           linkdescription, version):
        self._plugin_hotlink.append({
            "Plugin": plugin,
            "linkname": name,
            "linkurl": link,
            "description": description,
            "author": author,
            "authorurl": url,
            "linkdescription": linkdescription,
            'version': version
        })
Esempio n. 2
0
class MADmin(object):
    def __init__(self, args, db_wrapper: DbWrapper, ws_server,
                 mapping_manager: MappingManager, data_manager, device_updater,
                 jobstatus, storage_obj):
        app.add_template_global(name='app_config_mode', f=args.config_mode)
        # Determine if there are duplicate MACs
        sql = "SELECT count(*) > 0\n"\
              "FROM `settings_device`\n"\
              "GROUP BY `mac_address`\n"\
              "HAVING count(*) > 1 AND `mac_address` IS NOT NULL"
        dupe_mac = db_wrapper.autofetch_value(sql)
        if dupe_mac:
            sql = "SELECT `mac_address`, GROUP_CONCAT(`name`) AS 'origins'\n"\
                  "FROM `settings_device`\n"\
                  "GROUP BY `mac_address`\n"\
                  "HAVING count(*) > 1 AND `mac_address` IS NOT NULL"
            macs = db_wrapper.autofetch_all(sql)
            for mac in macs:
                logger.warning("Duplicate MAC `{}` detected on devices {}",
                               mac["mac_address"], mac["origins"])
            app.add_template_global(name='app_dupe_macs_devs', f=macs)
        app.add_template_global(name='app_dupe_macs', f=bool(dupe_mac))
        self._db_wrapper: DbWrapper = db_wrapper
        self._args = args
        self._app = app
        self._mapping_manager: MappingManager = mapping_manager
        self._storage_obj = storage_obj
        self._device_updater = device_updater
        self._ws_server: WebsocketServer = ws_server
        self._data_manager = data_manager
        self._jobstatus = jobstatus
        self._plugin_hotlink: list = []
        self.path = MADminPath(self._db_wrapper, self._args, self._app,
                               self._mapping_manager, self._jobstatus,
                               self._data_manager, self._plugin_hotlink)
        self.map = MADminMap(self._db_wrapper, self._args,
                             self._mapping_manager, self._app,
                             self._data_manager)
        self.statistics = MADminStatistics(self._db_wrapper, self._args, app,
                                           self._mapping_manager,
                                           self._data_manager)
        self.control = MADminControl(self._db_wrapper, self._args,
                                     self._mapping_manager, self._ws_server,
                                     logger, self._app, self._device_updater)
        self.APIEntry = APIEntry(logger, self._app, self._data_manager,
                                 self._mapping_manager, self._ws_server,
                                 self._args.config_mode, self._storage_obj,
                                 self._args)
        self.config = MADminConfig(self._db_wrapper, self._args, logger,
                                   self._app, self._mapping_manager,
                                   self._data_manager)
        self.apk_manager = APKManager(self._db_wrapper, self._args, self._app,
                                      self._mapping_manager, self._jobstatus,
                                      self._storage_obj)
        self.event = MADminEvent(self._db_wrapper, self._args, logger,
                                 self._app, self._mapping_manager,
                                 self._data_manager)
        self.autoconf = AutoConfigManager(self._db_wrapper, self._app,
                                          self._data_manager, self._args,
                                          self._storage_obj)

    @logger.catch()
    def madmin_start(self):
        try:
            # load routes
            if self._args.madmin_base_path:
                self._app.wsgi_app = ReverseProxied(
                    self._app.wsgi_app,
                    script_name=self._args.madmin_base_path)
            # start modules
            self.path.start_modul()
            self.map.start_modul()
            self.statistics.start_modul()
            self.config.start_modul()
            self.apk_manager.start_modul()
            self.event.start_modul()
            self.control.start_modul()
            self.autoconf.start_modul()
            self._app.run(host=self._args.madmin_ip,
                          port=int(self._args.madmin_port),
                          threaded=True)
        except:  # noqa: E722 B001
            logger.opt(
                exception=True).critical('Unable to load MADmin component')
        logger.info('Finished madmin')

    def add_route(self, routes):
        for route, view_func in routes:
            self._app.route(route, methods=['GET', 'POST'])(view_func)

    def register_plugin(self, pluginname):
        self._app.register_blueprint(pluginname)

    def add_plugin_hotlink(self, name, link, plugin, description, author, url,
                           linkdescription, version):
        self._plugin_hotlink.append({
            "Plugin": plugin,
            "linkname": name,
            "linkurl": link,
            "description": description,
            "author": author,
            "authorurl": url,
            "linkdescription": linkdescription,
            'version': version
        })