Skip to content

Commit cf6ae27

Browse files
committed
update time.rs
1 parent 0e56e18 commit cf6ae27

File tree

1 file changed

+42
-32
lines changed
  • src/append/rolling_file/policy/compound/trigger

1 file changed

+42
-32
lines changed

src/append/rolling_file/policy/compound/trigger/time.rs

Lines changed: 42 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,22 @@ pub struct TimeTriggerConfig {
3232
max_random_delay: u64,
3333
}
3434

35+
#[cfg(not(feature = "config_parsing"))]
36+
/// Configuration for the time trigger.
37+
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug, Default)]
38+
pub struct TimeTriggerConfig {
39+
/// The date/time interval between log file rolls.Q
40+
pub interval: TimeTriggerInterval,
41+
/// Whether to modulate the interval.
42+
pub modulate: bool,
43+
/// The maximum random delay in seconds.
44+
pub max_random_delay: u64,
45+
}
46+
3547
/// A trigger which rolls the log once it has passed a certain time.
3648
#[derive(Debug)]
3749
pub struct TimeTrigger {
38-
/// The date/time interval between log file rolls.
39-
interval: TimeTriggerInterval,
40-
/// Whether to modulate the interval.
41-
modulate: bool,
42-
/// The maximum random delay in seconds.
43-
max_random_delay: u64,
50+
config: TimeTriggerConfig,
4451
next_roll_time: RwLock<DateTime<Local>>,
4552
initial: Once,
4653
}
@@ -74,7 +81,7 @@ impl Default for TimeTriggerInterval {
7481

7582
#[derive(Debug, Error)]
7683
enum TimeTrigerError {
77-
#[error("too large interval in time trigger {0:?}")]
84+
#[error("The integer value {0:?} for the specified time trigger interval is too large, it must be less than 9,223,372,036,854,775,807 seconds.")]
7885
TooLargeInterval(TimeTriggerInterval),
7986
}
8087

@@ -180,25 +187,18 @@ impl<'de> serde::Deserialize<'de> for TimeTriggerInterval {
180187
impl TimeTrigger {
181188
/// Returns a new trigger which rolls the log once it has passed the
182189
/// specified time.
183-
pub fn new(
184-
interval: TimeTriggerInterval,
185-
modulate: bool,
186-
max_random_delay: u64,
187-
) -> TimeTrigger {
190+
pub fn new(config: TimeTriggerConfig) -> TimeTrigger {
188191
TimeTrigger {
189-
interval,
190-
modulate,
191-
max_random_delay,
192+
config,
192193
next_roll_time: RwLock::default(),
193194
initial: Once::new(),
194195
}
195196
}
196197

197-
fn get_next_time(
198-
current: DateTime<Local>,
199-
interval: TimeTriggerInterval,
200-
modulate: bool,
201-
) -> anyhow::Result<DateTime<Local>> {
198+
fn get_next_time(&self, current: DateTime<Local>) -> Result<DateTime<Local>, TimeTrigerError> {
199+
let interval = self.config.interval;
200+
let modulate = self.config.modulate;
201+
202202
let year = current.year();
203203
if let TimeTriggerInterval::Year(n) = interval {
204204
let n = n as i32;
@@ -284,7 +284,7 @@ impl TimeTrigger {
284284
panic!("Should not reach here!");
285285
}
286286

287-
fn refresh_time(&self) -> anyhow::Result<()> {
287+
fn refresh_time(&self) -> Result<(), TimeTrigerError> {
288288
#[cfg(test)]
289289
let current = {
290290
let now: std::time::Duration = SystemTime::now()
@@ -299,9 +299,9 @@ impl TimeTrigger {
299299

300300
#[cfg(not(test))]
301301
let current = Local::now();
302-
let next_time = TimeTrigger::get_next_time(current, self.interval, self.modulate)?;
303-
let next_roll_time = if self.max_random_delay > 0 {
304-
let random_delay = rand::thread_rng().gen_range(0..self.max_random_delay);
302+
let next_time = self.get_next_time(current)?;
303+
let next_roll_time = if self.config.max_random_delay > 0 {
304+
let random_delay = rand::thread_rng().gen_range(0..self.config.max_random_delay);
305305
next_time
306306
+ Duration::try_seconds(random_delay as i64)
307307
.unwrap_or(Duration::try_milliseconds(i64::MAX).unwrap())
@@ -373,11 +373,7 @@ impl Deserialize for TimeTriggerDeserializer {
373373
config: TimeTriggerConfig,
374374
_: &Deserializers,
375375
) -> anyhow::Result<Box<dyn Trigger>> {
376-
Ok(Box::new(TimeTrigger::new(
377-
config.interval,
378-
config.modulate,
379-
config.max_random_delay,
380-
)))
376+
Ok(Box::new(TimeTrigger::new(config)))
381377
}
382378
}
383379

@@ -398,8 +394,13 @@ mod test {
398394
path: file.path(),
399395
len: 0,
400396
};
397+
let config = TimeTriggerConfig {
398+
interval,
399+
modulate,
400+
max_random_delay: 0,
401+
};
401402

402-
let trigger = TimeTrigger::new(interval, modulate, 0);
403+
let trigger = TimeTrigger::new(config);
403404
trigger.trigger(&logfile).unwrap();
404405

405406
MockClock::advance_system_time(Duration::from_millis(millis / 2));
@@ -531,8 +532,12 @@ mod test {
531532
path: file.path(),
532533
len: 0,
533534
};
535+
let config = TimeTriggerConfig {
536+
interval,
537+
..Debug::default()
538+
};
534539

535-
let trigger = TimeTrigger::new(interval, false, 0);
540+
let trigger = TimeTrigger::new(config);
536541
let error = trigger.trigger(&logfile).unwrap_err();
537542
let box_dyn = Box::<dyn StdError>::from(error);
538543
assert_eq!(
@@ -543,7 +548,12 @@ mod test {
543548

544549
#[test]
545550
fn pre_process() {
546-
let trigger = TimeTrigger::new(TimeTriggerInterval::Minute(2), true, 0);
551+
let config = TimeTriggerConfig {
552+
interval: TimeTriggerInterval::Minute(2),
553+
modulate: true,
554+
max_random_delay: 0,
555+
};
556+
let trigger = TimeTrigger::new(config);
547557
assert!(trigger.is_pre_process());
548558
}
549559
}

0 commit comments

Comments
 (0)