#[non_exhaustive]pub struct StepExecution {Show 17 fields
pub id: Uuid,
pub name: String,
pub status: StepStatus,
pub start_time: Option<Instant>,
pub end_time: Option<Instant>,
pub duration: Option<Duration>,
pub read_count: usize,
pub write_count: usize,
pub read_error_count: usize,
pub process_count: usize,
pub process_error_count: usize,
pub filter_count: usize,
pub write_error_count: usize,
pub read_duration: Duration,
pub process_duration: Duration,
pub write_duration: Duration,
pub flush_duration: Duration,
}Expand description
Represents the execution context and metrics for a step.
StepExecution tracks all relevant information about a step’s execution, including timing, item counts, error counts, and current status.
§Construction
This type is #[non_exhaustive], so it cannot be built with a struct literal from
outside the crate — use StepExecution::new. Fields stay public and freely
readable; the attribute exists so that new metrics can be added in a minor release
rather than a breaking one.
§Examples
use spring_batch_rs::core::step::{StepExecution, StepStatus};
let mut step_execution = StepExecution::new("data-processing-step");
assert_eq!(step_execution.status, StepStatus::Starting);
assert_eq!(step_execution.read_count, 0);
assert_eq!(step_execution.write_count, 0);
assert_eq!(step_execution.filter_count, 0);Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.id: UuidUnique identifier for this step instance
name: StringHuman-readable name for the step
status: StepStatusCurrent status of the step execution
start_time: Option<Instant>Timestamp when the step started execution
end_time: Option<Instant>Timestamp when the step completed execution
duration: Option<Duration>Total duration of step execution
read_count: usizeNumber of items successfully read from the source
write_count: usizeNumber of items successfully written to the destination
read_error_count: usizeNumber of errors encountered during reading
process_count: usizeNumber of items successfully processed and passed to the writer (excludes filtered items)
process_error_count: usizeNumber of errors encountered during processing
filter_count: usizeNumber of items filtered by the processor (processor returned Ok(None))
write_error_count: usizeNumber of errors encountered during writing
read_duration: DurationCumulative time spent in the read phase across all chunks. Covers the whole
per-chunk read loop, including the framework’s buffering, not just ItemReader::read.
Only chunk-oriented steps populate this; tasklet steps leave it at zero.
process_duration: DurationCumulative time spent in the process phase across all chunks. Covers the whole
per-chunk process loop, including collecting the results, not just ItemProcessor::process.
Only chunk-oriented steps populate this; tasklet steps leave it at zero.
write_duration: DurationCumulative time spent in ItemWriter::write across all chunks, excluding the flush
that follows it. Only chunk-oriented steps populate this; tasklet steps leave it at zero.
flush_duration: DurationCumulative time spent in ItemWriter::flush across all chunks, measured separately
from StepExecution::write_duration so the cost of flushing once per chunk can be
quantified. Only chunk-oriented steps populate this; tasklet steps leave it at zero.
Implementations§
Source§impl StepExecution
impl StepExecution
Sourcepub fn new(name: &str) -> Self
pub fn new(name: &str) -> Self
Creates a new StepExecution with the specified name.
Initializes all counters to zero and sets the status to Starting.
A unique UUID is generated for this execution instance.
§Parameters
name: Human-readable name for the step
§Examples
use spring_batch_rs::core::step::{StepExecution, StepStatus};
let step_execution = StepExecution::new("my-step");
assert_eq!(step_execution.name, "my-step");
assert_eq!(step_execution.status, StepStatus::Starting);
assert!(!step_execution.id.is_nil());Sourcepub fn phase_summary(&self) -> String
pub fn phase_summary(&self) -> String
Formats the per-phase timing breakdown as a single human-readable line.
Percentages are relative to the step’s total StepExecution::duration.
When duration is None or zero — for instance before the step has run —
every percentage is reported as 0% rather than NaN.
The four phases will not sum to exactly 100%. The remainder holds the writer’s
open() and close() calls — which is where the CSV, JSON and XML writers perform
their final flush — the teardown of each processed chunk, and the framework’s own
bookkeeping. A large remainder is itself a useful signal.
Only chunk-oriented steps populate the four phase fields. Calling this on a tasklet
step’s execution yields a line whose phases all read 0.0s (0%).
§Examples
use spring_batch_rs::core::step::StepExecution;
use std::time::Duration;
let mut step_execution = StepExecution::new("load-postgres");
step_execution.duration = Some(Duration::from_secs(10));
step_execution.read_duration = Duration::from_secs(5);
let summary = step_execution.phase_summary();
assert!(summary.contains("read 5.0s (50%)"));Trait Implementations§
Source§impl Clone for StepExecution
impl Clone for StepExecution
Source§fn clone(&self) -> StepExecution
fn clone(&self) -> StepExecution
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for StepExecution
impl RefUnwindSafe for StepExecution
impl Send for StepExecution
impl Sync for StepExecution
impl Unpin for StepExecution
impl UnsafeUnpin for StepExecution
impl UnwindSafe for StepExecution
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.