use super::ExportDiagnostic;
use super::analysis::*;
use crate::config::{ExportConfig, TlsConfig};
use crate::error::Result;
pub(super) fn check_mongo(
url: &str,
tls: Option<&TlsConfig>,
exports: &[&ExportConfig],
) -> Result<Vec<ExportDiagnostic>> {
super::collect_diagnostics(exports, |export| diagnose_mongo(url, tls, export))
}
pub(super) fn diagnose_export_mongo(
url: &str,
tls: Option<&TlsConfig>,
export: &ExportConfig,
) -> Result<ExportDiagnostic> {
diagnose_mongo(url, tls, export)
}
fn diagnose_mongo(
url: &str,
tls: Option<&TlsConfig>,
export: &ExportConfig,
) -> Result<ExportDiagnostic> {
let row_estimate = export
.table
.as_deref()
.and_then(|coll| crate::source::mongo::estimated_count(url, tls, coll));
let uses_index = false;
let strategy = derive_strategy(export);
let verdict = compute_verdict(row_estimate, uses_index, false, None, export.parallel);
let recommended_profile = recommend_profile(row_estimate, uses_index, export);
let recommended_parallel = recommend_parallelism(export, row_estimate, uses_index);
let warnings = collect_warnings(export, row_estimate, None, None, None, None);
Ok(ExportDiagnostic {
export_name: export.name.clone(),
strategy,
mode: "full".to_string(),
cursor_column: None,
row_estimate,
avg_row_bytes: None,
cursor_min: None,
cursor_max: None,
scan_type: Some("collection scan (full)".to_string()),
uses_index,
verdict,
recommended_profile,
recommended_parallel,
warnings,
suggestion: None,
})
}