function main() { $db = connect(); $data = ensure_privileged_api_data_and_token_or_slave($db); $author = remote_user_name($data); $name = array_get($data, 'name'); $start_run_id = array_get($data, 'startRun'); $end_run_id = array_get($data, 'endRun'); $segmentation_name = array_get($data, 'segmentationStrategy'); $test_range_name = array_get($data, 'testRangeStrategy'); if (!$name) { exit_with_error('MissingName', array('name' => $name)); } $range = array('startRunId' => $start_run_id, 'endRunId' => $end_run_id); if (!$start_run_id || !$end_run_id) { exit_with_error('MissingRange', $range); } $start_run = ensure_row_by_id($db, 'test_runs', 'run', $start_run_id, 'InvalidStartRun', $range); $end_run = ensure_row_by_id($db, 'test_runs', 'run', $end_run_id, 'InvalidEndRun', $range); $config = ensure_config_from_runs($db, $start_run, $end_run); $start_run_time = time_for_run($db, $start_run_id); $end_run_time = time_for_run($db, $end_run_id); if (!$start_run_time || !$end_run_time) { exit_with_error('InvalidTimeRange', array('startTime' => $start_run_time, 'endTime' => $end_run_time)); } $db->begin_transaction(); $segmentation_id = NULL; if ($segmentation_name) { $segmentation_id = $db->select_or_insert_row('analysis_strategies', 'strategy', array('name' => $segmentation_name)); if (!$segmentation_id) { $db->rollback_transaction(); exit_with_error('CannotFindOrInsertSegmentationStrategy', array('segmentationStrategy' => $segmentation_name)); } } $test_range_id = NULL; if ($test_range_name) { $test_range_id = $db->select_or_insert_row('analysis_strategies', 'strategy', array('name' => $test_range_name)); if (!$test_range_id) { $db->rollback_transaction(); exit_with_error('CannotFindOrInsertTestRangeStrategy', array('testRangeStrategy' => $test_range_name)); } } $duplicate = $db->select_first_row('analysis_tasks', 'task', array('start_run' => $start_run_id, 'end_run' => $end_run_id)); if ($duplicate) { $db->rollback_transaction(); exit_with_error('DuplicateAnalysisTask', array('duplicate' => $duplicate)); } $task_id = $db->insert_row('analysis_tasks', 'task', array('name' => $name, 'author' => $author, 'platform' => $config['config_platform'], 'metric' => $config['config_metric'], 'start_run' => $start_run_id, 'start_run_time' => $start_run_time, 'end_run' => $end_run_id, 'end_run_time' => $end_run_time, 'segmentation' => $segmentation_id, 'test_range' => $test_range_id)); $db->commit_transaction(); exit_with_success(array('taskId' => $task_id)); }
function main() { $db = connect(); $data = ensure_privileged_api_data_and_token_or_slave($db); $author = remote_user_name($data); $task_id = array_get($data, 'task'); $name = array_get($data, 'name'); $root_sets = array_get($data, 'rootSets'); $repetition_count = intval(array_get($data, 'repetitionCount', 1)); if (!$name) { exit_with_error('MissingName'); } if (!$root_sets) { exit_with_error('MissingRootSets'); } if ($repetition_count < 1) { exit_with_error('InvalidRepetitionCount', array('repetitionCount' => $repetition_count)); } $task = $db->select_first_row('analysis_tasks', 'task', array('id' => $task_id)); if (!$task) { exit_with_error('InvalidTask', array('task' => $task_id)); } $triggerable = find_triggerable_for_task($db, $task_id); if (!$triggerable) { exit_with_error('TriggerableNotFoundForTask', array('task' => $task_id)); } $commit_sets = commit_sets_from_root_sets($db, $root_sets); $db->begin_transaction(); $root_set_id_list = array(); foreach ($commit_sets as $commit_list) { $root_set_id = $db->insert_row('root_sets', 'rootset', array()); foreach ($commit_list as $commit) { $db->insert_row('roots', 'root', array('set' => $root_set_id, 'commit' => $commit), 'commit'); } array_push($root_set_id_list, $root_set_id); } $group_id = $db->insert_row('analysis_test_groups', 'testgroup', array('task' => $task['task_id'], 'name' => $name, 'author' => $author)); $order = 0; for ($i = 0; $i < $repetition_count; $i++) { foreach ($root_set_id_list as $root_set_id) { $db->insert_row('build_requests', 'request', array('triggerable' => $triggerable['id'], 'platform' => $triggerable['platform'], 'test' => $triggerable['test'], 'group' => $group_id, 'order' => $order, 'root_set' => $root_set_id)); $order++; } } $db->commit_transaction(); exit_with_success(array('testGroupId' => $group_id)); }