コード例 #1
0
 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)
コード例 #2
0
ファイル: madmin.py プロジェクト: kimzky/MAD
 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)
     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)
コード例 #3
0
ファイル: madmin.py プロジェクト: Elfnoir/MAD
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
        })
コード例 #4
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
        })