]> git.proxmox.com Git - proxmox-backup.git/blob - src/bin/proxmox-backup-api.rs
use crate log and syslog
[proxmox-backup.git] / src / bin / proxmox-backup-api.rs
1 extern crate proxmox_backup;
2
3 use std::sync::Arc;
4
5 use proxmox_backup::api::schema::*;
6 use proxmox_backup::api::router::*;
7 use proxmox_backup::api::config::*;
8 use proxmox_backup::server::rest::*;
9 use proxmox_backup::getopts;
10
11 //use failure::*;
12 use lazy_static::lazy_static;
13
14 use futures::future::Future;
15
16 use hyper;
17
18 fn main() {
19
20 if let Err(err) = syslog::init(
21 syslog::Facility::LOG_DAEMON,
22 log::LevelFilter::Info,
23 Some("proxmox-backup-api")) {
24 eprintln!("unable to inititialize syslog: {}", err);
25 std::process::exit(-1);
26 }
27
28 let command : Arc<Schema> = StringSchema::new("Command.")
29 .format(Arc::new(ApiStringFormat::Enum(vec![
30 "start".into(),
31 "status".into(),
32 "stop".into()
33 ])))
34 .into();
35
36 let schema = ObjectSchema::new("Parameters.")
37 .required("command", command);
38
39 let args: Vec<String> = std::env::args().skip(1).collect();
40
41 let options = match getopts::parse_arguments(&args, &vec!["command"], &schema) {
42 Ok((options, rest)) => {
43 if !rest.is_empty() {
44 eprintln!("Error: got additional arguments: {:?}", rest);
45 std::process::exit(-1);
46 }
47 options
48 }
49 Err(err) => {
50 eprintln!("Error: unable to parse arguments:\n{}", err);
51 std::process::exit(-1);
52 }
53 };
54
55 let command = options["command"].as_str().unwrap();
56
57 match command {
58 "start" => {
59 println!("Starting server.");
60 },
61 "stop" => {
62 println!("Stopping server.");
63 std::process::exit(0);
64 },
65 "status" => {
66 println!("Server status.");
67 std::process::exit(0);
68 },
69 _ => {
70 eprintln!("got unexpected command {}", command);
71 std::process::exit(-1);
72 },
73 }
74
75 let addr = ([0,0,0,0,0,0,0,0], 8007).into();
76
77 lazy_static!{
78 static ref ROUTER: Router = proxmox_backup::api2::router();
79 }
80
81 let mut config = ApiConfig::new("/usr/share/javascript/proxmox-backup", &ROUTER);
82
83 // add default dirs which includes jquery and bootstrap
84 // my $base = '/usr/share/libpve-http-server-perl';
85 // add_dirs($self->{dirs}, '/css/' => "$base/css/");
86 // add_dirs($self->{dirs}, '/js/' => "$base/js/");
87 // add_dirs($self->{dirs}, '/fonts/' => "$base/fonts/");
88 config.add_alias("novnc", "/usr/share/novnc-pve");
89 config.add_alias("extjs", "/usr/share/javascript/extjs");
90 config.add_alias("fontawesome", "/usr/share/fonts-font-awesome");
91 config.add_alias("xtermjs", "/usr/share/pve-xtermjs");
92 config.add_alias("widgettoolkit", "/usr/share/javascript/proxmox-widget-toolkit");
93
94 let rest_server = RestServer::new(config);
95
96 let server = hyper::Server::bind(&addr)
97 .serve(rest_server)
98 .map_err(|e| eprintln!("server error: {}", e));
99
100
101 // Run this server for... forever!
102 hyper::rt::run(server);
103 }