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)
def search(cls, dbc: DbWrapper, res_obj: Resource, instance_id: int, *args, **kwargs): where = "" mode = kwargs.get('mode', None) where = "WHERE `instance_id` = %s" sql_args = [instance_id] if mode: where += " AND `mode` = %s\n" sql_args.append(mode) sql = "SELECT `%s`\n" \ "FROM `%s`\n" \ "%s\n" \ "ORDER BY `%s` ASC" % (res_obj.primary_key, res_obj.table, where, res_obj.search_field) return dbc.autofetch_column(sql, args=tuple(sql_args))
def get_wrapper(args) -> (DbWrapper, SyncManager): if args.db_method == "monocle": logger.error( "MAD has dropped Monocle support. Please consider checking out the " "'migrate_to_rocketmap.sh' script in the scripts folder.") sys.exit(1) elif args.db_method != "rm": logger.error("Invalid db_method in config. Exiting") sys.exit(1) PooledQuerySyncManager.register("PooledQueryExecutor", PooledQueryExecutor) db_pool_manager = PooledQuerySyncManager() db_pool_manager.start() db_exec = db_pool_manager.PooledQueryExecutor( host=args.dbip, port=args.dbport, username=args.dbusername, password=args.dbpassword, database=args.dbname, poolsize=args.db_poolsize) db_wrapper = DbWrapper(db_exec=db_exec, args=args) return db_wrapper, db_pool_manager