Skip to main content

MonitorConfig

Struct MonitorConfig 

Source
pub struct MonitorConfig {
    pub min_pause_duration: u64,
    pub pause_threshold: u64,
    pub poll_interval: u64,
    pub activity_threshold: u64,
    pub min_work_interval: u64,
    pub pause_merge_gap: u64,
}
Expand description

Activity monitor configuration settings.

Controls the behavior of the background activity monitoring system that tracks user presence, detects work patterns, and manages pause recording.

Fields§

§min_pause_duration: u64

Minimum pause duration in minutes to be recorded in the database.

Pauses shorter than this threshold are considered brief interruptions (like answering a quick question) rather than actual breaks and are not stored as separate pause records. This helps keep pause data meaningful and reduces database noise.

§pause_threshold: u64

Inactivity threshold in seconds before a pause is detected.

When user input (keyboard, mouse) is not detected for this duration, the monitor considers the user to be on a pause. This value should be long enough to avoid false positives during normal work (like reading or thinking) but short enough to capture actual breaks.

§poll_interval: u64

Poll interval in milliseconds for checking activity status.

This determines how frequently the monitor checks whether the user has been inactive long enough to trigger pause detection. Lower values provide more responsive detection but increase CPU usage. Values between 500-1000ms provide good balance of responsiveness and performance.

§activity_threshold: u64

Activity duration threshold in seconds for workday start detection.

Continuous activity must exceed this duration before the system considers a workday to have truly started. This prevents brief interactions (like checking time or messages) from incorrectly starting work time tracking, especially during off-hours.

§min_work_interval: u64

Minimum work interval in minutes for interval merging.

Work intervals shorter than this duration are merged with adjacent intervals to create more meaningful work blocks. This reduces fragmentation in work time reports caused by very brief pauses and helps present cleaner time tracking data.

§pause_merge_gap: u64

Maximum gap in seconds between two consecutive pauses to merge them.

When the activity monitor briefly registers a stray input between two otherwise continuous inactivity periods, it splits a single break into several adjacent pause records. Pauses separated by a gap no longer than this value are treated as one continuous pause so that sub-threshold segments are not dropped from calculations. The value should stay small (a few tens of seconds) so that genuine short work periods between pauses are preserved rather than swallowed into the break.

Trait Implementations§

Source§

impl Clone for MonitorConfig

Source§

fn clone(&self) -> MonitorConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MonitorConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for MonitorConfig

Source§

fn default() -> Self

Provides sensible defaults for monitor configuration.

These default values are carefully chosen based on typical work patterns and provide a good balance between accurate detection and minimal false positives. Users can adjust these values through the configuration system to match their specific work environment and preferences.

§Default Values Rationale
  • 20 minutes minimum pause: Captures meaningful breaks while ignoring brief interruptions
  • 60 seconds inactivity threshold: Allows for reading/thinking time while detecting real pauses
  • 500ms polling interval: Provides responsive detection with reasonable resource usage
  • 30 seconds activity threshold: Prevents false workday starts from brief interactions
  • 10 minutes minimum work interval: Reduces fragmentation in work reports

Default values:

  • 20 minutes minimum pause duration
  • 60 seconds inactivity threshold
  • 500ms polling interval
  • 30 seconds activity threshold
  • 10 minutes minimum work interval
Source§

impl<'de> Deserialize<'de> for MonitorConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for MonitorConfig

Source§

fn eq(&self, other: &MonitorConfig) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for MonitorConfig

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for MonitorConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> NoneValue for T
where T: Default,

Source§

type NoneType = T

Source§

fn null_value() -> T

The none-equivalent value.
Source§

impl<T> NoneValue for T
where T: Default,

Source§

type NoneType = T

Source§

fn null_value() -> T

The none-equivalent value.
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more