Skip to content

需求说明

如下利用python实现下载任务的监控和投递,具体需求如下: 1、每次监测开始的时候会加载worker_list.txt以及run_list.txt,worker_list.txt中包含了所有需要监控的worker,每行一个(分为三列,第一列为worker name,第二列为下载方法,第三列为下载路径),run_list.txt则包含了需要下载的run,每行一个run worker_list示例如下:

pc3_mu01_download prefetch /public/idata/tmp/download/pc3_mu01
ssxie1_mu01_download prefetch /home/yhfu/idata/tmp/Download
run_list示例如下:
SRR13179575
SRR14292755
SRR23479452
DRR055572
SRR13827889
SRR23498671
SRR14885976
SRR14885975
SRR14292760

考虑到监控程序可能会出现异常终止的情况,可以在程序初次启动(status.json不存在)时创建一个保存各节点和任务状态的文件status.json,可以记录监控程序执行的开始时间,run_list,worker_list等信息(同时输出监控程序执行的开始时间,run_list中run的数量以及worker_list中的worker name到日志文件)。如果是不是初次启动(已经存在status.json),利用worker_list.txt中的信息覆盖status.json,将run_list.txt和status.json中的run_list合并,同时输出status.json中记录的监控程序执行的开始时间(注意不是本轮监测的开始时间,是监测程序第一次运行的时间)及其到当前的持续时间格式为xx天xx小时xx分、run_list中run的数量以及worker_list中的worker name到日志文件

2、通过调用get_workers接口[[接口说明]]获取当前所有woker状态,对于不在worker_list中的worker标记为未关注的worker;对于status为True的worker,如果active不为0则认为是正在工作的woker,如果为0则标记为待投递任务的worker;其他状态的worker标记为异常worker。根据状态分类将worker状态输出到日志文件中(即未关注的worker、正在工作的woker、待投递任务的worker、异常worker)。 3、将run_list中未分配的run通过download_runs接口[[接口说明]]分配给待投递任务的worker,一次可以给每个worker分配多个run(例如50个,该值最好存在配置文件中)。如果是第一个次给该worker分配任务(status.json未包含相关信息),则应该记录当前时间为该worker的监控起始时间,同时记录该worker分配到的run。如果不是第一次给该worker分配任务,将新分配run和记录中的run合并为一个列表

4、遍历status.json中所有的worker,更新任务执行情况相关信息: a、调用run_download_status接口[[接口说明]]统计每个worker总共分配了多少run,有多少已经完成,多少未完成。输出至日志文件(仅数量即可)同时保存到status.json(数量和具体的run list都要保存)。 b、调用run_filesize接口[[接口说明]]获取该worker已下载run的大小,并根据其开始时间计算下载速度,输出到日志文件同时保存到status.json 在该遍历过程当应该统计所有worker总共分配了多少run,其中多少已经完成,多少未完成,总下载速度为多少,最后计算当前还有多少run未分配到任何节点,相关信息输出到日志文件并更新到status.json

5、考虑到需要持续监控,可以每隔一段时间检测一次(例如10分钟,写到配置文件),每次监测日志保存到一个独立的文件(以当前时间为文件名),即每个日志文件都从第1点需求的记录开始,第4点需求的记录结束。同理每次监测都需要包含1-4 共4个步骤

本文阅读量  次
本站总访问量  次
Authors: Wind