mirror of
https://github.com/rzuasti/oott.git
synced 2026-07-08 19:21:54 +02:00
Give the ARP scanner code defaults and make its config section optional
Add an ArpScanner Default impl (30m/1m/10m, enabled) and mark the arp_scanner field with serde default, so the [arp_scanner] section can now be omitted entirely and fall back to code defaults — matching the pattern used by the SNMP scanner. Previously these three durations were mandatory and the backend would not start without them. Reconcile the documentation to the canonical 30m/1m/10m: fix the README NixOS example (was 15m/20m/30m) and options table (was 15m), and note that the section is optional in both the README and sample TOML. The NixOS module and sample TOML already used these values. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
b283699b3c
commit
38158a4ffc
@@ -34,6 +34,17 @@ pub struct ArpScanner {
|
||||
pub scan_duration: DurationString,
|
||||
}
|
||||
|
||||
impl Default for ArpScanner {
|
||||
fn default() -> Self {
|
||||
ArpScanner {
|
||||
enabled: true,
|
||||
wait_between_scans: DurationString::try_from("30m".to_string()).unwrap(),
|
||||
sender_timeout: DurationString::try_from("1m".to_string()).unwrap(),
|
||||
scan_duration: DurationString::try_from("10m".to_string()).unwrap(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Clone)]
|
||||
pub struct MdnsScanner {
|
||||
#[serde(default = "default_true")]
|
||||
@@ -142,6 +153,7 @@ pub struct Settings {
|
||||
pub database: Database,
|
||||
pub networking: Networking,
|
||||
pub log: Log,
|
||||
#[serde(default)]
|
||||
pub arp_scanner: ArpScanner,
|
||||
pub notifications: Notifications,
|
||||
pub web_server: WebServer,
|
||||
@@ -258,6 +270,42 @@ mod tests {
|
||||
assert_eq!(settings.snmp_scanner.community, "public");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn arp_scanner_uses_code_defaults_when_section_omitted() {
|
||||
// A config without an `[arp_scanner]` section falls back to the code defaults.
|
||||
const NO_ARP_CONFIG: &str = r#"
|
||||
[database]
|
||||
path = "./oott.db"
|
||||
[networking]
|
||||
[log]
|
||||
level = "info"
|
||||
[notifications]
|
||||
method = "none"
|
||||
notify_when_not_seen_for = "1w"
|
||||
[notifications.pushover]
|
||||
token = ""
|
||||
user_key = ""
|
||||
[web_server]
|
||||
ip_address = "0.0.0.0"
|
||||
port = 3000
|
||||
api_key = "test"
|
||||
"#;
|
||||
let settings = parse(NO_ARP_CONFIG);
|
||||
assert!(settings.arp_scanner.enabled);
|
||||
assert_eq!(
|
||||
std::time::Duration::from(settings.arp_scanner.wait_between_scans),
|
||||
std::time::Duration::from_secs(30 * 60)
|
||||
);
|
||||
assert_eq!(
|
||||
std::time::Duration::from(settings.arp_scanner.sender_timeout),
|
||||
std::time::Duration::from_secs(60)
|
||||
);
|
||||
assert_eq!(
|
||||
std::time::Duration::from(settings.arp_scanner.scan_duration),
|
||||
std::time::Duration::from_secs(10 * 60)
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn scanners_can_be_disabled() {
|
||||
let toml = format!(
|
||||
|
||||
Reference in New Issue
Block a user