]>
Commit | Line | Data |
---|---|---|
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 | 7 | use anyhow::{format_err, Error}; |
a68768cf TL |
8 | use lazy_static::lazy_static; |
9 | use nix::unistd::Pid; | |
fca1cef2 | 10 | use serde_json::Value; |
a68768cf TL |
11 | |
12 | use proxmox::sys::linux::procfs::PidStat; | |
13 | ||
af06decd | 14 | use pbs_buildcfg; |
a68768cf TL |
15 | |
16 | lazy_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 | ||
21 | pub fn pid() -> i32 { | |
22 | *PID | |
23 | } | |
24 | ||
25 | pub fn pstart() -> u64 { | |
26 | *PSTART | |
27 | } | |
28 | ||
04b053d8 TL |
29 | pub 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 | ||
35 | pub 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 | 41 | pub 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 | ||
45 | pub fn our_ctrl_sock() -> String { | |
46 | ctrl_sock_from_pid(*PID) | |
47 | } | |
48 | ||
882594c5 DM |
49 | mod environment; |
50 | pub use environment::*; | |
51 | ||
634132fe DM |
52 | mod upid; |
53 | pub use upid::*; | |
54 | ||
7a630df7 DM |
55 | mod state; |
56 | pub use state::*; | |
57 | ||
78a39e05 DM |
58 | mod command_socket; |
59 | pub use command_socket::*; | |
60 | ||
882594c5 DM |
61 | mod worker_task; |
62 | pub use worker_task::*; | |
7a630df7 | 63 | |
42a87f7b DM |
64 | mod h2service; |
65 | pub use h2service::*; | |
66 | ||
e57e1cd8 DM |
67 | pub mod config; |
68 | pub use config::*; | |
69 | ||
882594c5 | 70 | pub mod formatter; |
7a630df7 | 71 | |
882594c5 DM |
72 | #[macro_use] |
73 | pub mod rest; | |
74 | ||
1298618a DM |
75 | pub mod jobstate; |
76 | ||
77 | mod verify_job; | |
78 | pub use verify_job::*; | |
b9e7bcc2 | 79 | |
b8d90798 HL |
80 | mod prune_job; |
81 | pub use prune_job::*; | |
82 | ||
3b707fbb DM |
83 | mod gc_job; |
84 | pub use gc_job::*; | |
85 | ||
b9e7bcc2 DM |
86 | mod email_notifications; |
87 | pub use email_notifications::*; | |
b0ef9631 HL |
88 | |
89 | mod report; | |
90 | pub use report::*; | |
027ef213 WB |
91 | |
92 | pub mod ticket; | |
ba39ab20 SR |
93 | |
94 | pub mod auth; | |
fca1cef2 WB |
95 | |
96 | pub(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 | |
104 | pub(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 | } |