function update_running_tasks($browser_save, &$runing_items, $task_items) { //检查是否需要清理任务 $items_del = array_diff_key($runing_items, $task_items); if (!empty($items_del)) { $names = []; foreach ($items_del as $key => $item) { unset($runing_items[$key]); $names[] = $item['name']; } omp_trace(implode(',', $names) . ' tasks del'); } //如果对比任务列表并没有发生变化,就不用颁发了 $new_tasks = array_diff_key($task_items, $runing_items); if (empty($new_tasks)) { omp_trace('no new tasks'); return $task_items; } //逐个分析新出现任务,检查UA相关规则,不符合就不用颁发了 foreach ($new_tasks as $key => $item) { //所谓颁发,就是生成一个初始化的任务数组 $task_info = array(); $task_info['name'] = $key; $task_info['bypass'] = false; $task_info['run_times'] = 0; $task_info['last_time'] = 0; $task_info['pageviews'] = 0; $conf_targets = $item['targets']; if (count($conf_targets)) { $is_matched = false; foreach ($conf_targets as $conf_target) { //检查对这个任务的分析结果 if (targets_matched($conf_targets, $browser_save)) { $is_matched = true; break; } } if (!$is_matched) { //不符合条件的,设置一个bypass标志 $task_info['bypass'] = true; omp_trace('pass ' . $item['name']); } } $runing_items[$key] = $task_info; omp_trace($key . ' new task'); } return $task_items; }
function general_match_tasks($list_name, $browser_save, $task_id, &$task_info, $task) { $result = array(false, false); $task_print = $task_info['name'] . '(' . $task_info['run_times'] . '/' . $task['times'] . ')'; //忽略不是自己的任务 if ($task_info['bypass'] === true) { omp_trace($task_print . ' not mine'); return $result; } //任务是否被用户停止 $status = $task['status']; if ($status === 'stop') { omp_trace($task_print . ' stopped '); return $result; } //判断任务的时间状态 $task_info['pageviews'] += 1; $now = time(); $run_status = $now < $task['start_time'] ? 'waiting' : ($now > $task['finish_time'] ? 'timeout' : 'running'); //纠正任务列表中显示的状态 if ($run_status !== $status) { async_timer("/data.php?cmd=status&list={$list_name}&key={$task_id}&val={$run_status}", 10); } //记录超时 if ($run_status === 'timeout') { omp_trace($task_print . ' expired'); $result[1] = true; return $result; } //检查是否在时间区间内,否则忽略 if ($run_status !== 'running') { omp_trace($task_print . ' not time rigion '); return $result; } //检查执行次数是否已经达到 if ($task['times'] !== -1) { if ($task_info['run_times'] >= $task['times']) { omp_trace($task_print . ' times exceed (' . $task['times'] . ')'); return $result; } } //详细再查条件 $matched_target = targets_matched($task['targets'], $browser_save, true); if (!$matched_target) { omp_trace($task_print . ' target not match'); return $result; } $result[0] = true; return $result; }
function general_match_tasks($browser_save, $task_id, &$task_info, $task) { $result = array(false, false); $task_info['pageviews'] += 1; $task_print = $task_info['name'] . '(' . $task_info['run_times'] . '/' . $task['times'] . ')'; //忽略不是自己的任务 if ($task_info['bypass'] === true) { omp_trace($task_print . ' not mine'); return $result; } //判读是否过期 $now = time(); $run_status = $now < $task['start_time'] ? 'waiting' : ($now > $task['finish_time'] ? 'timeout' : 'running'); $result[1] = $run_status === 'timeout'; //任务是否被用户停止 $status = $task['status']; if ($status === 'inactive') { omp_trace($task_print . ' inactive'); return $result; } //记录超时 if ($run_status === 'timeout') { $task['status'] = 'inactive'; omp_trace($task_print . ' expired'); return $result; } //检查是否在时间区间内,否则忽略 if ($run_status !== 'running') { omp_trace($task_print . ' not time rigion '); return $result; } //检查执行次数是否已经达到 if ($task['times'] !== -1) { if ($task_info['run_times'] >= $task['times']) { omp_trace($task_print . ' times exceed (' . $task['times'] . ')'); return $result; } } //详细再查条件 $matched_target = targets_matched($task['targets'], $browser_save, true); if (!$matched_target) { omp_trace($task_print . ' target not match'); return $result; } $result[0] = true; return $result; }