1*288bf522SAndroid Build Coastguard Worker //
2*288bf522SAndroid Build Coastguard Worker // Copyright (C) 2020 The Android Open Source Project
3*288bf522SAndroid Build Coastguard Worker //
4*288bf522SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
5*288bf522SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
6*288bf522SAndroid Build Coastguard Worker // You may obtain a copy of the License at
7*288bf522SAndroid Build Coastguard Worker //
8*288bf522SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0
9*288bf522SAndroid Build Coastguard Worker //
10*288bf522SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
11*288bf522SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
12*288bf522SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*288bf522SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
14*288bf522SAndroid Build Coastguard Worker // limitations under the License.
15*288bf522SAndroid Build Coastguard Worker //
16*288bf522SAndroid Build Coastguard Worker
17*288bf522SAndroid Build Coastguard Worker //! Daemon program to collect system traces.
18*288bf522SAndroid Build Coastguard Worker
19*288bf522SAndroid Build Coastguard Worker use anyhow::{bail, Result};
20*288bf522SAndroid Build Coastguard Worker use std::env;
21*288bf522SAndroid Build Coastguard Worker
22*288bf522SAndroid Build Coastguard Worker const HELP_MSG: &str = r#"
23*288bf522SAndroid Build Coastguard Worker profcollectd background daemon.
24*288bf522SAndroid Build Coastguard Worker usage: profcollectd [command]
25*288bf522SAndroid Build Coastguard Worker nostart Start daemon but do not schedule profile collection.
26*288bf522SAndroid Build Coastguard Worker "#;
27*288bf522SAndroid Build Coastguard Worker
main() -> Result<()>28*288bf522SAndroid Build Coastguard Worker fn main() -> Result<()> {
29*288bf522SAndroid Build Coastguard Worker libprofcollectd::init_logging();
30*288bf522SAndroid Build Coastguard Worker
31*288bf522SAndroid Build Coastguard Worker let args: Vec<String> = env::args().collect();
32*288bf522SAndroid Build Coastguard Worker if args.len() > 2 {
33*288bf522SAndroid Build Coastguard Worker bail!("This program only takes one or no argument{}", &HELP_MSG);
34*288bf522SAndroid Build Coastguard Worker }
35*288bf522SAndroid Build Coastguard Worker if args.len() == 1 {
36*288bf522SAndroid Build Coastguard Worker libprofcollectd::init_service(true)?;
37*288bf522SAndroid Build Coastguard Worker }
38*288bf522SAndroid Build Coastguard Worker
39*288bf522SAndroid Build Coastguard Worker let action = &args[1];
40*288bf522SAndroid Build Coastguard Worker match action.as_str() {
41*288bf522SAndroid Build Coastguard Worker "nostart" => libprofcollectd::init_service(false)?,
42*288bf522SAndroid Build Coastguard Worker "help" => println!("{}", &HELP_MSG),
43*288bf522SAndroid Build Coastguard Worker arg => bail!("Unknown argument: {}\n{}", &arg, &HELP_MSG),
44*288bf522SAndroid Build Coastguard Worker }
45*288bf522SAndroid Build Coastguard Worker Ok(())
46*288bf522SAndroid Build Coastguard Worker }
47