/* 生成调度
ntime 调度运行 环境时间 默认当前
joblist 生成 格式
{
"_id" : ObjectId("4bd55d4a6d623399d78fd793"),
"name" : "测试-1",
"timestamp" : "2010-04-22 00:00",
"active_stamp" : "",
"func_obj" : {
"_id" : "~",
"package" : "statistics",
"name" : "test_statistics",
"desc" : "测试 调度,没有实现用处",
"version" : "0.0",
"param" : {
"ab" : "100008",
"st" : "2010-04-21",
"et" : "2010-04-22"
},
"body" : function cf__24__f_cf__12__f_() {
sleep(15000);
return {ab:this.param.ab, st:this.param.st, et:this.param.et};
}
},
"running_time" : {
"dispatch_start" : "",
"start" : "",
"end" : ""
},
"level" : "3",
"run_status" : "init",
"result" : ""
}
*/
function joblist_create(ntime){
if(typeof ntime == "undefined") var nt = new Date ;
else if ( typeof ntime == "object" ) var nt = ntime ;
else var nt = parseDate(ntime);
var run_stat = {"all":0, "success":0,"error":0};
var dbs = 'fs';
var ds = db.getMongo().getDB(dbs).dispatch ;
var js = db.getMongo().getDB(dbs).joblist ;
var ff = ds.find({"is_use":"true"}) ;
//遍历出所有 可用 调度定义
while(ff.hasNext()){
run_stat.all += 1 ;
var disp = ff.next();
try{
//取得调度方法体
var fun = getf('statistics',disp.fun_name,disp.version);
//调度最晚生成 joblist 时间
if(typeof disp.last_run == "undefined" || disp.last_run=="" ) disp.last_run = formatDate(nt,'yyyy-MM-dd
HH:mm:ss');
//根据 调度 最晚生成 joblist 时间 和 当前ntime 时间,取得 job 运行时间
var tks = get_timestamps( disp.last_run , nt ,
disp.run_timing.minute,disp.run_timing.hour,disp.run_timing.day,disp.run_timing.weekday) ;
for(var i=0;i<tks.length;i++ ){
// 调度参数生成中的 隐含对象 生成
var dispatch_time = parseDate( tks[i] ) ;
fun = getf('statistics',disp.fun_name,disp.version);
var pks = [];
// 参数实例化
for(var pk in fun.param){
pks.push(pk);
var pv = disp.param[pk] ;
if( /@/.test(pv) ) fun.param[pk] = eval( pv.replace(/^@(.*)$/,"$1") );
else fun.param[pk]=pv ;
}
// 生成动作戳
var active_stamp = "" ;
var pkss = pks.sort();
for(var ii;ii<pkss.length;ii++){
active_stamp += pkss[ii]+fun.param[pkss[ii]];
}
if( js.count({ "name": disp.name,"active_stamp":active_stamp ,"timestamp":tks[i]}) != 0 )continue ;
js.save({
"name": disp.name ,
"timestamp" : tks[i] ,
"active_stamp":active_stamp,
"func_obj" : fun ,
"running_time":{
"dispatch_start" : "" ,
"start" : "" ,
"end" : ""
},
"level" : "3" ,
"run_status" : "init" ,//
初始等待 init ,计算等待 wait , 运行中 running , 异常结束 error ,正常结束 end
"result" : "" //
结果去向 - 扩展
});
run_stat.success += 1 ;
disp.last_run = tks[i] ;
}
ds.save( disp );
}catch(err){ print(err); run_stat.error += 1 ;}
}
return run_stat ;
}
|