diff options
author | Toby Vincent <tobyv@tobyvin.dev> | 2024-10-01 13:15:24 -0500 |
---|---|---|
committer | Toby Vincent <tobyv@tobyvin.dev> | 2024-10-01 13:15:24 -0500 |
commit | fe16a923190243dfde5db6ceff2ef0bcf9158926 (patch) | |
tree | 9b8b616e1972ca3ef6e28d29c980899af3ddde49 /src/service | |
parent | e1d9c956beb6921b0d549248bea3a6853fde5f46 (diff) |
feat: simplify service status type
Diffstat (limited to 'src/service')
-rw-r--r-- | src/service/http.rs | 12 | ||||
-rw-r--r-- | src/service/systemd.rs | 17 | ||||
-rw-r--r-- | src/service/tcp.rs | 10 |
3 files changed, 16 insertions, 23 deletions
diff --git a/src/service/http.rs b/src/service/http.rs index 7c875b9..8950096 100644 --- a/src/service/http.rs +++ b/src/service/http.rs @@ -32,14 +32,10 @@ impl ServiceSpawner for Http { .try_clone() .expect("Clone with no body should never fail"); let resp = client.execute(req).await; - let status = match resp.map(|r| r.status().as_u16()) { - Ok(code) if code == self.status_code => Status::Pass, - Ok(code) => Status::Fail(Some(format!("Status code: {code}"))), - Err(err) => { - tracing::error!("HTTP request error: {err}"); - Status::Unknown - } - }; + let status = resp.map_or_else(Into::into, |r| match r.status().as_u16() { + c if c == self.status_code => Status::Ok, + c => Status::Error(Some(format!("Status code: {c}"))), + }); tx.send_if_modified(|s| s.update(status)); } diff --git a/src/service/systemd.rs b/src/service/systemd.rs index 90213a0..ee220b8 100644 --- a/src/service/systemd.rs +++ b/src/service/systemd.rs @@ -21,17 +21,14 @@ impl ServiceSpawner for Systemd { loop { interval.tick().await; - let status = match command.output() { - Ok(output) if output.status.success() => Status::Pass, - Ok(output) => { - let stdout = String::from_utf8_lossy(&output.stdout).trim().to_string(); - Status::Fail(Some(format!("Service state: {}", stdout))) + let status = command.output().map_or_else(Into::into, |o| { + if o.status.success() { + Status::Ok + } else { + let stdout = String::from_utf8_lossy(&o.stdout).trim().to_string(); + Status::Error(Some(format!("Service state: {}", stdout))) } - Err(err) => { - tracing::error!("Failed to spawn process: {err}"); - Status::Unknown - } - }; + }); tx.send_if_modified(|s| s.update(status)); } diff --git a/src/service/tcp.rs b/src/service/tcp.rs index 42791bc..7b79afd 100644 --- a/src/service/tcp.rs +++ b/src/service/tcp.rs @@ -32,7 +32,7 @@ impl ServiceSpawner for Tcp { Ok(conn) => { // TODO: figure out how to wait for connection to close conn.ready(Interest::READABLE).await?; - tx.send_if_modified(|s| s.update(Status::Pass)); + tx.send_if_modified(|s| s.update(Status::Ok)); } Err(err) => { tx.send_if_modified(|s| s.update(err.into())); @@ -50,18 +50,18 @@ mod tests { #[tracing_test::traced_test] #[ignore] async fn test_tcp_watch() { - let (tx, mut rx) = tokio::sync::watch::channel(Status::default()); + let (tx, mut rx) = tokio::sync::watch::channel(Status::Error(None)); let tests = tokio::spawn(async move { - assert!(matches!(*rx.borrow_and_update(), Status::Unknown)); + assert!(matches!(*rx.borrow_and_update(), Status::Error(None))); rx.changed().await.unwrap(); - assert!(matches!(*rx.borrow_and_update(), Status::Pass)); + assert!(matches!(*rx.borrow_and_update(), Status::Ok)); rx.changed().await.unwrap(); assert_eq!( *rx.borrow_and_update(), - Status::Fail(Some(String::from("Disconnected"))) + Status::Error(Some(String::from("Disconnected"))) ); }); |