]> git.proxmox.com Git - proxmox-backup.git/blame - src/server.rs
split out pbs-buildcfg module
[proxmox-backup.git] / src / server.rs
CommitLineData
882594c5
DM
1//! Proxmox Server/Service framework
2//!
3//! This code provides basic primitives to build our REST API
4//! services. We want async IO, so this is built on top of
5//! tokio/hyper.
6
04b053d8 7use anyhow::{format_err, Error};
a68768cf
TL
8use lazy_static::lazy_static;
9use nix::unistd::Pid;
fca1cef2 10use serde_json::Value;
a68768cf
TL
11
12use proxmox::sys::linux::procfs::PidStat;
13
af06decd 14use pbs_buildcfg;
a68768cf
TL
15
16lazy_static! {
17 static ref PID: i32 = unsafe { libc::getpid() };
18 static ref PSTART: u64 = PidStat::read_from_pid(Pid::from_raw(*PID)).unwrap().starttime;
19}
20
21pub fn pid() -> i32 {
22 *PID
23}
24
25pub fn pstart() -> u64 {
26 *PSTART
27}
28
04b053d8
TL
29pub fn write_pid(pid_fn: &str) -> Result<(), Error> {
30 let pid_str = format!("{}\n", *PID);
31 let opts = proxmox::tools::fs::CreateOptions::new();
32 proxmox::tools::fs::replace_file(pid_fn, pid_str.as_bytes(), opts)
33}
34
35pub fn read_pid(pid_fn: &str) -> Result<i32, Error> {
36 let pid = proxmox::tools::fs::file_get_contents(pid_fn)?;
37 let pid = std::str::from_utf8(&pid)?.trim();
38 pid.parse().map_err(|err| format_err!("could not parse pid - {}", err))
39}
40
a68768cf 41pub fn ctrl_sock_from_pid(pid: i32) -> String {
af06decd 42 format!("\0{}/control-{}.sock", pbs_buildcfg::PROXMOX_BACKUP_RUN_DIR, pid)
a68768cf
TL
43}
44
45pub fn our_ctrl_sock() -> String {
46 ctrl_sock_from_pid(*PID)
47}
48
882594c5
DM
49mod environment;
50pub use environment::*;
51
634132fe
DM
52mod upid;
53pub use upid::*;
54
7a630df7
DM
55mod state;
56pub use state::*;
57
78a39e05
DM
58mod command_socket;
59pub use command_socket::*;
60
882594c5
DM
61mod worker_task;
62pub use worker_task::*;
7a630df7 63
42a87f7b
DM
64mod h2service;
65pub use h2service::*;
66
e57e1cd8
DM
67pub mod config;
68pub use config::*;
69
882594c5 70pub mod formatter;
7a630df7 71
882594c5
DM
72#[macro_use]
73pub mod rest;
74
1298618a
DM
75pub mod jobstate;
76
77mod verify_job;
78pub use verify_job::*;
b9e7bcc2 79
b8d90798
HL
80mod prune_job;
81pub use prune_job::*;
82
3b707fbb
DM
83mod gc_job;
84pub use gc_job::*;
85
b9e7bcc2
DM
86mod email_notifications;
87pub use email_notifications::*;
b0ef9631
HL
88
89mod report;
90pub use report::*;
027ef213
WB
91
92pub mod ticket;
ba39ab20
SR
93
94pub mod auth;
fca1cef2
WB
95
96pub(crate) async fn reload_proxy_certificate() -> Result<(), Error> {
af06decd 97 let proxy_pid = crate::server::read_pid(pbs_buildcfg::PROXMOX_BACKUP_PROXY_PID_FN)?;
fca1cef2
WB
98 let sock = crate::server::ctrl_sock_from_pid(proxy_pid);
99 let _: Value = crate::server::send_raw_command(sock, "{\"command\":\"reload-certificate\"}\n")
100 .await?;
101 Ok(())
102}
062cf75c
DC
103
104pub(crate) async fn notify_datastore_removed() -> Result<(), Error> {
af06decd 105 let proxy_pid = crate::server::read_pid(pbs_buildcfg::PROXMOX_BACKUP_PROXY_PID_FN)?;
062cf75c
DC
106 let sock = crate::server::ctrl_sock_from_pid(proxy_pid);
107 let _: Value = crate::server::send_raw_command(sock, "{\"command\":\"datastore-removed\"}\n")
108 .await?;
109 Ok(())
110}