use std::borrow::Cow;
use std::io;
use std::time::Duration;
use thiserror::Error;
use crate::CollectorError;
#[derive(Debug, Error)]
pub enum TerminationError {
#[error("Failed to send '{signal}' signal to process '{process_name}': {source}")]
SignallingFailed {
process_name: Cow<'static, str>,
source: io::Error,
signal: &'static str,
},
#[error(
"Failed to terminate process '{process_name}'. SIGINT failed: {sigint_error}. SIGTERM failed: {sigterm_error}. SIGKILL failed: {sigkill_error}"
)]
TerminationFailed {
process_name: Cow<'static, str>,
sigint_error: String,
sigterm_error: String,
#[source]
sigkill_error: io::Error,
},
}
#[derive(Debug, Error)]
pub enum WaitError {
#[error("IO error occurred while waiting for process '{process_name}': {source}")]
IoError {
process_name: Cow<'static, str>,
#[source]
source: io::Error,
},
#[error("Process '{process_name}' did not complete within {timeout:?}")]
Timeout {
process_name: Cow<'static, str>,
timeout: Duration,
},
#[error("Could not terminate process: {0}")]
TerminationError(#[from] TerminationError),
#[error("Collector failed to collect output: {0}")]
CollectorFailed(#[from] CollectorError),
}
#[derive(Debug, Error)]
pub enum SpawnError {
#[error("Failed to spawn process '{process_name}': {source}")]
SpawnFailed {
process_name: Cow<'static, str>,
#[source]
source: io::Error,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum WaitForLineResult {
Matched,
StreamClosed,
Timeout,
}