mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2025-09-30 18:42:05 +00:00
feat: Send notifications to systemd when a reload is triggered
This commit is contained in:
parent
f45ceedb8a
commit
fd6910558e
6 changed files with 17 additions and 6 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -1121,6 +1121,7 @@ dependencies = [
|
||||||
"reqwest",
|
"reqwest",
|
||||||
"ruma",
|
"ruma",
|
||||||
"rustyline-async",
|
"rustyline-async",
|
||||||
|
"sd-notify",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"serde_yml",
|
"serde_yml",
|
||||||
|
|
|
@ -156,6 +156,7 @@ sentry_telemetry = [
|
||||||
]
|
]
|
||||||
systemd = [
|
systemd = [
|
||||||
"conduwuit-router/systemd",
|
"conduwuit-router/systemd",
|
||||||
|
"conduwuit-service/systemd"
|
||||||
]
|
]
|
||||||
journald = [ # This is a stub on non-unix platforms
|
journald = [ # This is a stub on non-unix platforms
|
||||||
"dep:tracing-journald",
|
"dep:tracing-journald",
|
||||||
|
|
|
@ -40,7 +40,6 @@ io_uring = [
|
||||||
"conduwuit-admin/io_uring",
|
"conduwuit-admin/io_uring",
|
||||||
"conduwuit-api/io_uring",
|
"conduwuit-api/io_uring",
|
||||||
"conduwuit-service/io_uring",
|
"conduwuit-service/io_uring",
|
||||||
"conduwuit-api/io_uring",
|
|
||||||
]
|
]
|
||||||
jemalloc = [
|
jemalloc = [
|
||||||
"conduwuit-admin/jemalloc",
|
"conduwuit-admin/jemalloc",
|
||||||
|
|
|
@ -65,7 +65,7 @@ pub(crate) async fn start(server: Arc<Server>) -> Result<Arc<Services>> {
|
||||||
let services = Services::build(server).await?.start().await?;
|
let services = Services::build(server).await?.start().await?;
|
||||||
|
|
||||||
#[cfg(all(feature = "systemd", target_os = "linux"))]
|
#[cfg(all(feature = "systemd", target_os = "linux"))]
|
||||||
sd_notify::notify(true, &[sd_notify::NotifyState::Ready])
|
sd_notify::notify(false, &[sd_notify::NotifyState::Ready])
|
||||||
.expect("failed to notify systemd of ready state");
|
.expect("failed to notify systemd of ready state");
|
||||||
|
|
||||||
debug!("Started");
|
debug!("Started");
|
||||||
|
@ -78,7 +78,7 @@ pub(crate) async fn stop(services: Arc<Services>) -> Result<()> {
|
||||||
debug!("Shutting down...");
|
debug!("Shutting down...");
|
||||||
|
|
||||||
#[cfg(all(feature = "systemd", target_os = "linux"))]
|
#[cfg(all(feature = "systemd", target_os = "linux"))]
|
||||||
sd_notify::notify(true, &[sd_notify::NotifyState::Stopping])
|
sd_notify::notify(false, &[sd_notify::NotifyState::Stopping])
|
||||||
.expect("failed to notify systemd of stopping state");
|
.expect("failed to notify systemd of stopping state");
|
||||||
|
|
||||||
// Wait for all completions before dropping or we'll lose them to the module
|
// Wait for all completions before dropping or we'll lose them to the module
|
||||||
|
|
|
@ -67,6 +67,9 @@ release_max_log_level = [
|
||||||
"tracing/max_level_trace",
|
"tracing/max_level_trace",
|
||||||
"tracing/release_max_level_info",
|
"tracing/release_max_level_info",
|
||||||
]
|
]
|
||||||
|
systemd = [
|
||||||
|
"dep:sd-notify",
|
||||||
|
]
|
||||||
url_preview = [
|
url_preview = [
|
||||||
"dep:image",
|
"dep:image",
|
||||||
"dep:webpage",
|
"dep:webpage",
|
||||||
|
@ -119,5 +122,9 @@ blurhash.optional = true
|
||||||
recaptcha-verify = { version = "0.1.5", default-features = false }
|
recaptcha-verify = { version = "0.1.5", default-features = false }
|
||||||
ctor.workspace = true
|
ctor.workspace = true
|
||||||
|
|
||||||
|
[target.'cfg(all(unix, target_os = "linux"))'.dependencies]
|
||||||
|
sd-notify.workspace = true
|
||||||
|
sd-notify.optional = true
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
workspace = true
|
workspace = true
|
||||||
|
|
|
@ -45,13 +45,16 @@ impl Deref for Service {
|
||||||
fn handle_reload(&self) -> Result {
|
fn handle_reload(&self) -> Result {
|
||||||
if self.server.config.config_reload_signal {
|
if self.server.config.config_reload_signal {
|
||||||
#[cfg(all(feature = "systemd", target_os = "linux"))]
|
#[cfg(all(feature = "systemd", target_os = "linux"))]
|
||||||
sd_notify::notify(true, &[sd_notify::NotifyState::Reloading])
|
sd_notify::notify(false, &[
|
||||||
|
sd_notify::NotifyState::Reloading,
|
||||||
|
sd_notify::NotifyState::monotonic_usec_now().expect("Failed to read monotonic time"),
|
||||||
|
])
|
||||||
.expect("failed to notify systemd of reloading state");
|
.expect("failed to notify systemd of reloading state");
|
||||||
|
|
||||||
self.reload(iter::empty())?;
|
self.reload(iter::empty())?;
|
||||||
|
|
||||||
#[cfg(all(feature = "systemd", target_os = "linux"))]
|
#[cfg(all(feature = "systemd", target_os = "linux"))]
|
||||||
sd_notify::notify(true, &[sd_notify::NotifyState::Ready])
|
sd_notify::notify(false, &[sd_notify::NotifyState::Ready])
|
||||||
.expect("failed to notify systemd of ready state");
|
.expect("failed to notify systemd of ready state");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue