summaryrefslogtreecommitdiff
path: root/profcollectd/libprofcollectd/config.rs
diff options
context:
space:
mode:
Diffstat (limited to 'profcollectd/libprofcollectd/config.rs')
-rw-r--r--profcollectd/libprofcollectd/config.rs140
1 files changed, 0 insertions, 140 deletions
diff --git a/profcollectd/libprofcollectd/config.rs b/profcollectd/libprofcollectd/config.rs
deleted file mode 100644
index e8afb37f..00000000
--- a/profcollectd/libprofcollectd/config.rs
+++ /dev/null
@@ -1,140 +0,0 @@
-//
-// Copyright (C) 2021 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-//! ProfCollect configurations.
-
-use anyhow::Result;
-use lazy_static::lazy_static;
-use macaddr::MacAddr6;
-use rand::Rng;
-use serde::{Deserialize, Serialize};
-use std::error::Error;
-use std::path::Path;
-use std::str::FromStr;
-use std::time::Duration;
-
-const PROFCOLLECT_CONFIG_NAMESPACE: &str = "profcollect_native_boot";
-const PROFCOLLECT_NODE_ID_PROPERTY: &str = "persist.profcollectd.node_id";
-
-pub const REPORT_RETENTION_SECS: u64 = 14 * 24 * 60 * 60; // 14 days.
-
-lazy_static! {
- pub static ref TRACE_OUTPUT_DIR: &'static Path = Path::new("/data/misc/profcollectd/trace/");
- pub static ref PROFILE_OUTPUT_DIR: &'static Path = Path::new("/data/misc/profcollectd/output/");
- pub static ref REPORT_OUTPUT_DIR: &'static Path = Path::new("/data/misc/profcollectd/report/");
- pub static ref BETTERBUG_CACHE_DIR_PREFIX: &'static Path = Path::new("/data/user/");
- pub static ref BETTERBUG_CACHE_DIR_SUFFIX: &'static Path =
- Path::new("com.google.android.apps.internal.betterbug/cache/");
- pub static ref CONFIG_FILE: &'static Path =
- Path::new("/data/misc/profcollectd/output/config.json");
-}
-
-#[derive(Clone, PartialEq, Eq, Serialize, Deserialize, Debug)]
-pub struct Config {
- /// Version of config file scheme, always equals to 1.
- version: u32,
- /// Application specific node ID.
- pub node_id: MacAddr6,
- /// Device build fingerprint.
- pub build_fingerprint: String,
- /// Interval between collections.
- pub collection_interval: Duration,
- /// Length of time each collection lasts for.
- pub sampling_period: Duration,
- /// An optional filter to limit which binaries to or not to profile.
- pub binary_filter: String,
-}
-
-impl Config {
- pub fn from_env() -> Result<Self> {
- Ok(Config {
- version: 1,
- node_id: get_or_initialise_node_id()?,
- build_fingerprint: get_build_fingerprint()?,
- collection_interval: Duration::from_secs(get_device_config(
- "collection_interval",
- 600,
- )?),
- sampling_period: Duration::from_millis(get_device_config("sampling_period", 500)?),
- binary_filter: get_device_config("binary_filter", "".to_string())?,
- })
- }
-}
-
-impl ToString for Config {
- fn to_string(&self) -> String {
- serde_json::to_string(self).expect("Failed to deserialise configuration.")
- }
-}
-
-impl FromStr for Config {
- type Err = serde_json::Error;
- fn from_str(s: &str) -> Result<Self, Self::Err> {
- serde_json::from_str::<Config>(s)
- }
-}
-
-fn get_or_initialise_node_id() -> Result<MacAddr6> {
- let mut node_id = get_property(&PROFCOLLECT_NODE_ID_PROPERTY, MacAddr6::nil())?;
- if node_id.is_nil() {
- node_id = generate_random_node_id();
- set_property(&PROFCOLLECT_NODE_ID_PROPERTY, node_id);
- }
-
- Ok(node_id)
-}
-
-fn get_build_fingerprint() -> Result<String> {
- get_property("ro.build.fingerprint", "unknown".to_string())
-}
-
-fn get_device_config<T>(key: &str, default_value: T) -> Result<T>
-where
- T: FromStr + ToString,
- T::Err: Error + Send + Sync + 'static,
-{
- let default_value = default_value.to_string();
- let config = profcollect_libflags_rust::GetServerConfigurableFlag(
- &PROFCOLLECT_CONFIG_NAMESPACE,
- &key,
- &default_value,
- );
- Ok(T::from_str(&config)?)
-}
-
-fn get_property<T>(key: &str, default_value: T) -> Result<T>
-where
- T: FromStr + ToString,
- T::Err: Error + Send + Sync + 'static,
-{
- let default_value = default_value.to_string();
- let value = profcollect_libbase_rust::GetProperty(&key, &default_value);
- Ok(T::from_str(&value)?)
-}
-
-fn set_property<T>(key: &str, value: T)
-where
- T: ToString,
-{
- let value = value.to_string();
- profcollect_libbase_rust::SetProperty(&key, &value);
-}
-
-fn generate_random_node_id() -> MacAddr6 {
- let mut node_id = rand::thread_rng().gen::<[u8; 6]>();
- node_id[0] |= 0x1;
- MacAddr6::from(node_id)
-}