Skip to main content

atomcode_telemetry/queue/
roll.rs

1//! Segment rolling decisions. Pure logic (no I/O) — easy to unit-test.
2//!
3//! Roll when current segment reaches **500 events OR 512 KB**.
4
5pub const MAX_EVENTS_PER_SEGMENT: u32 = 500;
6pub const MAX_BYTES_PER_SEGMENT: u64 = 512 * 1024;
7
8pub const MAX_SEGMENT_FILES: usize = 50;
9pub const MAX_TOTAL_BYTES: u64 = 5 * 1024 * 1024;
10
11pub fn should_roll(events_in_segment: u32, bytes_in_segment: u64) -> bool {
12    events_in_segment >= MAX_EVENTS_PER_SEGMENT || bytes_in_segment >= MAX_BYTES_PER_SEGMENT
13}
14
15pub fn over_cap(segment_count: usize, total_bytes: u64) -> bool {
16    segment_count > MAX_SEGMENT_FILES || total_bytes > MAX_TOTAL_BYTES
17}
18
19#[cfg(test)]
20mod tests {
21    use super::*;
22    #[test]
23    fn rolls_on_count() {
24        assert!(should_roll(500, 0));
25        assert!(!should_roll(499, 0));
26    }
27    #[test]
28    fn rolls_on_bytes() {
29        assert!(should_roll(0, 512 * 1024));
30        assert!(!should_roll(0, 512 * 1024 - 1));
31    }
32    #[test]
33    fn cap_detection() {
34        assert!(over_cap(51, 0));
35        assert!(over_cap(1, 5 * 1024 * 1024 + 1));
36        assert!(!over_cap(1, 100));
37    }
38}