fix: add dynamic variables to report and allow v1, v2 dashboards in reports (#3574)

- [x] Add dynamic variables
- [x] Allow v1, v2 dashboards in reports
This commit is contained in:
Subhra264
2024-05-23 15:48:04 +05:30
committed by GitHub
parent 00cb1a168d
commit fca47ef225
2 changed files with 12 additions and 6 deletions
+4 -2
View File
@@ -32,10 +32,12 @@ pub enum ReportMediaType {
Pdf, // Supports Pdf only
}
#[derive(Serialize, Debug, Deserialize, Clone, ToSchema)]
#[derive(Serialize, Debug, Default, Deserialize, Clone, ToSchema)]
pub struct ReportDashboardVariable {
pub name: String,
pub key: String,
pub value: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
}
#[derive(Serialize, Debug, Deserialize, Clone, ToSchema)]
+8 -4
View File
@@ -128,7 +128,7 @@ pub async fn save(
Err(anyhow::anyhow!("Tab not found"))
}
} else {
Err(anyhow::anyhow!("Tab not found"))
Ok(())
}
});
}
@@ -377,6 +377,10 @@ async fn generate_report(
}
// Only one tab is supported for now
let tab_id = &dashboard.tabs[0];
let mut dashb_vars = "".to_string();
for variable in dashboard.variables.iter() {
dashb_vars = format!("{}&var-{}={}", dashb_vars, variable.key, variable.value);
}
log::info!("launching browser for dashboard {dashboard_id}");
let (mut browser, mut handler) =
@@ -430,7 +434,7 @@ async fn generate_report(
let period = &timerange.period;
let (time_duration, time_unit) = period.split_at(period.len() - 1);
let dashb_url = format!(
"{web_url}/dashboards/view?org_identifier={org_id}&dashboard={dashboard_id}&folder={folder_id}&tab={tab_id}&refresh=Off&period={period}&timezone={timezone}&var-Dynamic+filters=%255B%255D&print=true",
"{web_url}/dashboards/view?org_identifier={org_id}&dashboard={dashboard_id}&folder={folder_id}&tab={tab_id}&refresh=Off&period={period}&timezone={timezone}&var-Dynamic+filters=%255B%255D&print=true{dashb_vars}",
);
let time_duration: i64 = time_duration.parse()?;
@@ -474,13 +478,13 @@ async fn generate_report(
};
let email_dashb_url = format!(
"{web_url}/dashboards/view?org_identifier={org_id}&dashboard={dashboard_id}&folder={folder_id}&tab={tab_id}&refresh=Off&from={start_time}&to={end_time}&timezone={timezone}&var-Dynamic+filters=%255B%255D&print=true",
"{web_url}/dashboards/view?org_identifier={org_id}&dashboard={dashboard_id}&folder={folder_id}&tab={tab_id}&refresh=Off&from={start_time}&to={end_time}&timezone={timezone}&var-Dynamic+filters=%255B%255D&print=true{dashb_vars}",
);
(dashb_url, email_dashb_url)
}
ReportTimerangeType::Absolute => {
let url = format!(
"{web_url}/dashboards/view?org_identifier={org_id}&dashboard={dashboard_id}&folder={folder_id}&tab={tab_id}&refresh=Off&from={}&to={}&timezone={timezone}&var-Dynamic+filters=%255B%255D&print=true",
"{web_url}/dashboards/view?org_identifier={org_id}&dashboard={dashboard_id}&folder={folder_id}&tab={tab_id}&refresh=Off&from={}&to={}&timezone={timezone}&var-Dynamic+filters=%255B%255D&print=true{dashb_vars}",
&timerange.from, &timerange.to
);
(url.clone(), url)