{= include "templates.util.base_util"; include "templates.util.database"; include "templates.util.encoding"; include "templates.progress.get_progress_state_util"; debug_message("\n\n\n#### get_progress_state.cfv START \n\n"); string session_id = volatile.session_id; string page_token = v.sys.page_token; if (get_is_valid_page_token(session_id, "progress", page_token)) then ( string profile_name = internal.profile_name; string is_report_progress = v.sys.is_report_progress; string task_id = v.sys.task_id; string report_job_id = v.sys.report_job_id; string channel_id = v.sys.channel_id; # Only used by client, the variable is re-send to progress.js int count; string error_message; # # # # get progress info and task_state # # # node progress_info = get_progress_info_in_get_progress_state(task_id); bool progress_exists = if (progress_info?{"exists"} and @progress_info{"exists"}) then (true) else (false); bool is_active_task = get_is_active_task(task_id); debug_message("#### is_report_progress: " . is_report_progress . "\n"); debug_message("#### task_id: " . task_id . "\n"); debug_message("#### report_job_id: " . report_job_id . "\n"); debug_message("#### progress_exists: " . progress_exists . "\n"); debug_message("#### is_active_task: " . is_active_task . "\n"); # # # # get progress data # # # string progress_state; # progress | progress_prediction | complete | error if (is_report_progress) then ( # # # # handle report progress # # # progress_state = get_progress_state_for_reports( profile_name, session_id, report_job_id, is_active_task, progress_exists ); debug_message("#### progress_state: " . progress_state . "\n"); if (progress_state eq "") then ( # # We didn't get any valid progress_state. # There may be a race condition, get a fresh is_active_task, progress_exists and progress_state value # count = 0; while ((progress_state eq "") and (count < 10)) ( sleep_milliseconds(300); # Re-check is_active_task is_active_task = get_is_active_task(task_id); # Re-check progress_exists progress_info = get_progress_info_in_get_progress_state(task_id); progress_exists = if (progress_info?{"exists"} and @progress_info{"exists"}) then (true) else (false); # re-check progress_state progress_state = get_progress_state_for_reports( profile_name, session_id, report_job_id, is_active_task, progress_exists ); count++; ); # # If there is still no valid progress_state we have an error # if (progress_state eq "") then ( # Show error message of task or a general error message if no error message exists in the task. error_message = get_progress_error_message_via_task_id(task_id); if (error_message eq "") then ( # # There is no error for the task reported, so we compose a general error message # error_message = lang_stats.progress.error_in_get_progress_state . "\n"; error_message .= "report_job_id: " . report_job_id . "\n"; error_message .= "is_active_task: " . is_active_task . "\n"; error_message .= "progress_exists: " . progress_exists . "\n"; error_message .= "progress_state: " . progress_state . "\n\n"; # Add additional debug output generated by get_progress_info_check_all_report_elements_done() error_message .= "Report element(s) state:\n"; if (?("v.temp_debug_report_elements") and (num_subnodes("v.temp_debug_report_elements") > 0)) then ( node temp_item; foreach temp_item "v.temp_debug_report_elements" ( error_message .= "\n\n" . node_name(temp_item) . "\n"; error_message .= "report_element_id: " . @temp_item{"report_element_id"} . "\n"; error_message .= "report_element_file_name: " . @temp_item{"report_element_file_name"} . "\n"; error_message .= "raw_report_element_exists: " . @temp_item{"raw_report_element_exists"} . "\n"; error_message .= "html_report_element_exists: " . @temp_item{"html_report_element_exists"} . "\n\n"; ); ) else ( error_message .= "No report element(s) state available! Are there no report elements to generate?\n"; ); ); error(error_message); # progress_state = "error"; ); ); ) else ( # # # # handle database progress # # # debug_message("\n\n#### handle database progress \n"); progress_state = get_database_progress_state(profile_name, task_id, is_active_task, progress_exists); ); # # # # send response # # # string dat = "{"; dat .= add_json("channelId", channel_id, "string"); dat .= add_json("progressState", progress_state, "string"); if (progress_state eq "progress") then ( string progress_dat = get_progress_info_dat(progress_info, is_report_progress); dat .= add_json("progress", progress_dat, "obj"); ); dat = close_json(dat); debug_message("\n\n#### progress response dat:\n" . dat . "\n\n"); "progress.getProgressStateResponse(" . dat . ")\n"; ) else ( display_no_permission_html(); ); =}