Skip to content

JOB 模块

Li Jiang edited this page Jun 16, 2017 · 6 revisions

POST /api/command/<machine>

执行一条命令,需要登录 , 异步执行

POST : {"command" : "COMMAND LINE " }

返回值 :

{u'status': u'调用状态', u'output': u'*', u'status_code': 状态码, u'error': u'出错信息'}

成功返回时 :  {u'status': u'OK', u'output': {u'output': u'程序output', u'retcode': 程序退出码, u'error': u'错误输出'}, u'status_code': 200, u'error': u''}

返回结果示例 :

{u'status': u'OK', u'output': {u'output': u'', u'retcode': 1, u'error': u"touch: cannot touch `/root/a': Permission denied\n"}, u'status_code': 200, u'error': u''}

{u'status': u'OK', u'output': {u'output': u'', u'retcode': 2, u'error': u'ls: cannot open directory /root: Permission denied\n'}, u'status_code': 200, u'error': u''}

GET /api/job

获取状态信息 , 尚未实现

结果类似 : { ‘ln3’ : { 'queue' : { 'PD': 1, 'R' : 1111, 'time' : 4 , 'health' : 0.8 , } , 'info' : { 'work' : { 'idle' : 22 , 'alloc' : '333' } } } }

实现 , 为保障GET 的效率 , WS 直接从 REDIS 数据库中读取数据 , 不同的worker 上运行不同的监控进程不停的执行测试程序往 REDIS 中写数据。这样既能保障API 的效率又能保障性能的及时可靠。 信息可附带时间戳以保障监管系统出错未工作时WS 可以探知到 。

POST /api/job/<machine>

提交作业,需要登录,异步执行

POST : {"jobscript" : 作业脚本内容 , "jobfilepath" : 作业脚本路径 , 'jobconf' : 作业参数 } 或 POST : { "jobfile" : 已经存在的作业脚本路径 , 'jobconf' : 作业参数 }

即如果已经上传了作业脚本,可以直接通过 "jobfile" 指定 , 否则则通过 jobscript 指定内容,通过 jobfilepath 指定生成路径, 如果不指定则会在 ~/newt 下创建 。

如果是新的 作业脚本内容 ,可以在 jobscript 中提供, 并通过 jobfilepath 指定创建脚本文件的位置 。

jobconf 是作业的控制参数,可以不提供或以json格式只提供需要的,可提供的参数如下 : 

  • "job_wdir" ,  工作路径
  • "job_name" ,  作业名称
  • "time_limit" , 执行时间限制(min)
  • "partition" ,  作业分区
  • "scale_cores" ,  需要多少核
  • "scale_memGB" ,  需要多少内存
  • "scale_Nodes" , 需要多少节点
  • "jobfile_args", 作业脚本附加参数   一个提交例子如下:
mc.open("/job/" + machine_name + '/' , data = {"jobscript" : test_batchstr , "jobfilepath" : '/HOME/%s/project/testjob/job.sh' % login_data["username"]  , 'jobconf' : json.dumps({ 'job_name' : 'hello' , 'time_limit' : 10 }) } )

返回值 : 

成功提交返回如下 :

{u'status': u'OK', u'output': {u'jobid': u'4816214'}, u'status_code': 200, u'error': u''}

可以从output 中获取成功提交后作业系统分配的jobid .

GET /api/job/<machine>

获取当前自己的作业队列的信息,需要登录,异步执行

已经结束的作业无法从此获得信息。

成功返回结果如下:

{u'status': u'OK', u'output': {u'status': {u'4816213': u'Pending', u'4816214': u'Pending'}, u'nodelist': {u'4816213': u'(Priority)', u'4816214': u'(Priority)'}, u'name': {u'4816213': u'job.sh', u'4816214': u'hello'}, u'partition': {u'4816213': u'work', u'4816214': u'work'}, u'user': {u'4816213': u'sysu_hpc_dwu_1', u'4816214': u'sysu_hpc_dwu_1'}, u'time': {u'4816213': u'0:00', u'4816214': u'0:00'}, u'nodes': {u'4816213': 2, u'4816214': 2}, u'id': {u'4816213': u'4816213', u'4816214': u'4816214'}}, u'status_code': 200, u'error': u''}

GET /api/job/<machine>/<jobid>

获取当前自己的指定作业的信息,需要登录,异步执行

成功返回结果如下:

{u'status': u'OK', u'output': {u'status': {u'4816216': u'Pending'}, u'tasks': {u'4816216': u''}, u'name': {u'4816216': u'newt_k8lm3_pc'}, u'partition': {u'4816216': u'work'}, u'time': {u'4816216': u'00:00:00'}, u'nodes': {u'4816216': 2.0}, u'id': {u'4816216': u'4816216'}, u'exitcode': {u'4816216': u'0:0'}}, u'status_code': 200, u'error': u''}

一个作业可能会有多个作业步,这里可以看到作业步的信息。

DELETE /api/job/<machine>

杀掉某个作业,需要登录,异步执行

成功返回:

{u'status': u'OK', u'output': u'', u'status_code': 200, u'error': u''}