cortex/frontend/
render.rs1use crate::backend::{TaskReportOptions, task_report as backend_task_report};
11use crate::frontend::params::ReportParams;
12use crate::models::{Corpus, Service};
13use diesel::PgConnection;
14use std::collections::HashMap;
15
16#[allow(clippy::too_many_arguments)]
20pub fn task_report(
21 connection: &mut PgConnection,
22 global: &mut HashMap<String, String>,
23 corpus: &Corpus,
24 service: &Service,
25 severity: Option<String>,
26 category: Option<String>,
27 what: Option<String>,
28 params: &Option<ReportParams>,
29) -> Vec<HashMap<String, String>> {
30 let all_messages = params.as_ref().and_then(|p| p.all).unwrap_or(false);
31 let offset = params
36 .as_ref()
37 .and_then(|p| p.offset)
38 .unwrap_or(0)
39 .clamp(0, crate::frontend::params::MAX_REPORT_OFFSET);
40 let page_size = params
41 .as_ref()
42 .and_then(|p| p.page_size)
43 .unwrap_or(100)
44 .clamp(1, crate::frontend::params::MAX_REPORT_PAGE_SIZE);
45
46 let fetched_report = backend_task_report(
47 connection,
48 TaskReportOptions {
49 corpus,
50 service,
51 severity_opt: severity,
52 category_opt: category,
53 what_opt: what,
54 all_messages,
55 offset,
56 page_size,
57 },
58 );
59
60 let from_offset = offset;
62 let to_offset = offset + page_size;
63 global.insert("from_offset".to_string(), from_offset.to_string());
64 if from_offset >= page_size {
65 global.insert("offset_min_false".to_string(), "true".to_string());
66 global.insert(
67 "prev_offset".to_string(),
68 (from_offset - page_size).to_string(),
69 );
70 }
71 let data_rows = fetched_report
75 .iter()
76 .filter(|row| {
77 let name = row.get("name").map(String::as_str).unwrap_or("");
78 name != "total" && name != "no_messages"
79 })
80 .count();
81 if data_rows >= page_size as usize {
82 global.insert("offset_max_false".to_string(), "true".to_string());
83 }
84 global.insert(
85 "next_offset".to_string(),
86 (from_offset + page_size).to_string(),
87 );
88 global.insert("offset".to_string(), offset.to_string());
89 global.insert("page_size".to_string(), page_size.to_string());
90 global.insert("to_offset".to_string(), to_offset.to_string());
91 global.insert(
92 "report_time".to_string(),
93 crate::frontend::helpers::report_timestamp(),
94 );
95
96 fetched_report
97}