def _to_deliver(self, task: Task): """任务分类,分给各传输器""" try: succ: bool = False try: if not isinstance(task, Task): self._logger.error("Invalid task to_deliver") return if not isinstance(task._clientid, str) or task._clientid == "": self._logger.error( "Invalid clientid in task object while delivering task:\ntaskid:{}\nclientid:{}" .format(task.taskid, task._clientid)) return # 拿一下ip tmpclients = StatusMantainer.get_clientstatus_id_sorted() targetclient: Client = tmpclients.get(task._clientid, None) if not isinstance(targetclient, Client): self._logger.error( "Unknown client for task deliver:\nclientid:{}\ntaskid:{}\ntasktype:{}" .format(task._clientid, task.taskid, task.tasktype.name)) return # 传输给client ########## # 逻辑为: # 1. 事先并不知道分配给哪个采集端。 # 2. 从数据库读取一条子任务,task任务对象有其被分配到的采集端的clientid。 # 3. 根据task的clientid,和StatusMantainer的clients对象,找到目标client的clientip # 4. 根据clientip和当前TaskDeliver中配置的ip->目录配置,将任务task对象发送到 # 指定目录(走文件) # 5. 或根据配置若走直连传输,则通过clientid找到对应采集端的地址并发送。 ########## if not self._config._ipdir.__contains__( targetclient._statusbasic.ip): self._logger.error( "Client transfer folder not configured: clientip={}". format(targetclient._statusbasic.ip)) else: targetdir = self._config._ipdir[ targetclient._statusbasic.ip] succ = OutputManagement.output_to_file(task, targetdir) finally: with self._dbmanager.get_automic_locker( EDBAutomic.ReduplicateTask): self._update_to_db(task, targetclient, succ) self._merge_task_status(task) except Exception: self._logger.error("to_deliver error: taskid:{} error:{}".format( task.taskid, traceback.format_exc()))
def _to_deliver(self, task: IscoutTask): try: succ: bool = False targetclient = None try: if not isinstance(task, IscoutTask): self._logger.error( "Invalid iscouttask to_deliver: {}".format( type(task).__name__)) return if not isinstance(task._clientid, str) or task._clientid == "": self._logger.error( "Invalid clientid in IScanTask object while delivering task:\niscouttaskid:{}\nclientid:{}" .format(task.taskid, task._clientid)) return # 拿一下ip tmpclients = StatusMantainer.get_clientstatus_id_sorted() targetclient: Client = tmpclients.get(task._clientid, None) if not isinstance(targetclient, Client): self._logger.error( "Client may DOWN, periodic IScoutTask deliver failed:\niscouttaskid:{}\nclientid:{}" .format(task.taskid, task._clientid)) return succ # 传输分配 if not self._config._ipdir.__contains__( targetclient._statusbasic.ip): self._logger.error( "Client transfer folder not configured: clientip={}". format(targetclient._statusbasic.ip)) else: targetdir = self._config._ipdir[ targetclient._statusbasic.ip] succ = OutputManagement.output_to_file(task, targetdir) finally: with self._dbmanager.get_automic_locker( EDBAutomic.ReduplicateIScoutTask): self._update_to_db(task, targetclient, succ) self._merge_task_status(task) except Exception as ex: self._logger.error( "Deliver IscanTask err:\niscouttaskid:{}\nerr:{}".format( task.taskid, ex))
def _to_deliver(self, cmd: IdownCmd): try: succ: bool = False try: if not isinstance(cmd, IdownCmd): self._logger.error("Invalid cmd to_deliver: {}".format( type(cmd).__name__)) return if not isinstance(cmd._clientid, str) or cmd._clientid == "": self._logger.error( "Invalid clientid in cmd object while delivering task:\ncmdid:{}\nclientid:{}" .format(cmd.cmd_id, cmd._clientid)) return # 拿一下ip tmpclients = StatusMantainer.get_clientstatus_id_sorted() targetclient: Client = tmpclients.get(cmd._clientid, None) if not isinstance(targetclient, Client): self._logger.error( "Unknown client for cmd deliver:\ncmdid:{}\nclientid:{}" .format(cmd.cmd_id, cmd._clientid)) # 传输分配 if not self._config._ipdir.__contains__( targetclient._statusbasic.ip): self._logger.error( "Client transfer folder not configured: clientip={}". format(targetclient._statusbasic.ip)) else: targetdir = self._config._ipdir[ targetclient._statusbasic.ip] succ = OutputManagement.output_to_file(cmd, targetdir) finally: with self._dbmanager.get_automic_locker( EDBAutomic.ReduplicateTask): self._update_to_db(cmd, targetclient, succ) except Exception as ex: self._logger.error( "Deliver IDownCmd err:\ncmdid:{}\nerr:{}".format( cmd.cmd_id, ex))