From 24518c5e7cbb167ad12927d938bef929588bab68 Mon Sep 17 00:00:00 2001 From: Abid Omar Date: Thu, 28 Apr 2022 01:10:28 +0100 Subject: [PATCH] refactor(cli): upgrade CLI to 0.5 --- pyroscope_cli/Cargo.lock | 83 +++++++++++++++++++++++------- pyroscope_cli/Cargo.toml | 8 +-- pyroscope_cli/src/core/profiler.rs | 18 ++++--- src/pyroscope.rs | 7 +++ 4 files changed, 86 insertions(+), 30 deletions(-) diff --git a/pyroscope_cli/Cargo.lock b/pyroscope_cli/Cargo.lock index 46d4007a..3843757a 100644 --- a/pyroscope_cli/Cargo.lock +++ b/pyroscope_cli/Cargo.lock @@ -442,6 +442,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" +[[package]] +name = "directories" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210" +dependencies = [ + "dirs-sys", +] + [[package]] name = "dirs-next" version = "2.0.0" @@ -452,6 +461,17 @@ dependencies = [ "dirs-sys-next", ] +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + [[package]] name = "dirs-sys-next" version = "0.1.2" @@ -952,6 +972,30 @@ dependencies = [ "str_stack", ] +[[package]] +name = "inferno" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89efa0d58cc7d17076d8fcaa4ea2b408a799eaed1682e1d60b8a9e03a061be82" +dependencies = [ + "ahash", + "atty", + "clap 3.1.6", + "crossbeam-channel", + "crossbeam-utils", + "dashmap", + "env_logger 0.9.0", + "indexmap", + "itoa 1.0.1", + "lazy_static", + "log", + "num-format", + "num_cpus", + "quick-xml", + "rgb", + "str_stack", +] + [[package]] name = "instant" version = "0.1.12" @@ -1024,9 +1068,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.121" +version = "0.2.124" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f" +checksum = "21a41fed9d98f27ab1c6d161da622a4fa35e8a54a8adc24bbf3ddd0ef70b0e50" [[package]] name = "libloading" @@ -1472,9 +1516,9 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "pprof" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c090facb9ab04a4fb15fe27f8861059f195dd0847e6f1042016244e129eddeb2" +checksum = "f2324292407eab69d4ace0eed1524fe612ac37c98aa22b0d868355b17fada530" dependencies = [ "backtrace", "cfg-if 1.0.0", @@ -1585,9 +1629,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" +checksum = "a07b0857a71a8cb765763950499cae2413c3f9cede1133478c43600d9e146890" dependencies = [ "bytes", "prost-derive", @@ -1595,9 +1639,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" +checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc" dependencies = [ "anyhow", "itertools", @@ -1621,7 +1665,7 @@ dependencies = [ "failure", "goblin", "indicatif", - "inferno", + "inferno 0.10.12", "lazy_static", "libc", "log", @@ -1642,7 +1686,7 @@ dependencies = [ [[package]] name = "pyroscope" -version = "0.4.0" +version = "0.5.0" dependencies = [ "libc", "log", @@ -1683,7 +1727,7 @@ dependencies = [ [[package]] name = "pyroscope_pprofrs" -version = "0.1.0" +version = "0.2.0" dependencies = [ "pprof", "pyroscope", @@ -1692,7 +1736,7 @@ dependencies = [ [[package]] name = "pyroscope_pyspy" -version = "0.1.0" +version = "0.2.0" dependencies = [ "py-spy", "pyroscope", @@ -1701,7 +1745,7 @@ dependencies = [ [[package]] name = "pyroscope_rbspy" -version = "0.1.0" +version = "0.2.0" dependencies = [ "anyhow", "log", @@ -1804,18 +1848,19 @@ dependencies = [ [[package]] name = "rbspy" -version = "0.11.1" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d05c4d9570aebe9cd2bd5bffec29b31b82e72a1ebdf7b24ce37bd78302a5450" +checksum = "bcbebdf0037de5a92722b0bca2965ce0a76cd5c962225cf355e31ac668ea653f" dependencies = [ "anyhow", "chrono", - "clap 2.34.0", + "clap 3.1.6", "ctrlc", + "directories", "elf", "env_logger 0.9.0", "flate2", - "inferno", + "inferno 0.11.2", "libc", "libproc", "log", @@ -1836,9 +1881,9 @@ dependencies = [ [[package]] name = "rbspy-ruby-structs" -version = "0.11.1" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ed28145d8e724457cc1b46a03d94398e8e569417081b5cc5db8f6ca8e106c4" +checksum = "321d7adbbd5dc84af13b4cacceb22973186ed1dc19d55248fa53d5277ae40e02" [[package]] name = "rdrand" diff --git a/pyroscope_cli/Cargo.toml b/pyroscope_cli/Cargo.toml index 8d76e498..3f9bf17a 100644 --- a/pyroscope_cli/Cargo.toml +++ b/pyroscope_cli/Cargo.toml @@ -33,10 +33,10 @@ slog-term = "2.8.0" slog-scope = "4.4.0" slog-async = "2.7.0" slog-stdlog = "4.1.0" -pyroscope = { version = "0.4", path = "../" } -pyroscope_pprofrs = {version = "0.1", path = "../pyroscope_backends/pyroscope_pprofrs" } -pyroscope_rbspy = {version = "0.1", path = "../pyroscope_backends/pyroscope_rbspy" } -pyroscope_pyspy = {version = "0.1", path = "../pyroscope_backends/pyroscope_pyspy" } +pyroscope = { version = "0.5", path = "../" } +pyroscope_pprofrs = {version = "0.2", path = "../pyroscope_backends/pyroscope_pprofrs" } +pyroscope_rbspy = {version = "0.2", path = "../pyroscope_backends/pyroscope_rbspy" } +pyroscope_pyspy = {version = "0.2", path = "../pyroscope_backends/pyroscope_pyspy" } [dependencies.clap] version = "=3.1.6" diff --git a/pyroscope_cli/src/core/profiler.rs b/pyroscope_cli/src/core/profiler.rs index c3f5991b..c6f85f28 100644 --- a/pyroscope_cli/src/core/profiler.rs +++ b/pyroscope_cli/src/core/profiler.rs @@ -1,4 +1,7 @@ -use pyroscope::PyroscopeAgent; +use pyroscope::{ + pyroscope::{PyroscopeAgentReady, PyroscopeAgentRunning, PyroscopeAgentState}, + PyroscopeAgent, +}; use pyroscope_pyspy::{pyspy_backend, PyspyConfig}; use pyroscope_rbspy::{rbspy_backend, RbspyConfig}; @@ -11,7 +14,7 @@ use crate::utils::{ /// Wrapper for the `pyroscope` library and the `pyroscope_pyspy` and `pyroscope_rbspy` backends. #[derive(Debug, Default)] pub struct Profiler { - agent: Option, + agent: Option>, } impl Profiler { @@ -36,7 +39,7 @@ impl Profiler { let tag_str = &AppConfig::get::("tag")?; let tags = tags_to_array(tag_str)?; - let mut agent = match AppConfig::get::("spy_name")? { + let agent = match AppConfig::get::("spy_name")? { Spy::Pyspy => { let config = PyspyConfig::new(pid) .sample_rate(sample_rate) @@ -64,17 +67,18 @@ impl Profiler { } }; - agent.start()?; + let agent_running = agent.start()?; - self.agent = Some(agent); + self.agent = Some(agent_running); Ok(()) } /// Stops the `pyroscope` library agent and the backend. pub fn stop(self) -> Result<()> { - if let Some(mut agent) = self.agent { - agent.stop()?; + if let Some(agent_running) = self.agent { + let agent_ready = agent_running.stop()?; + agent_ready.shutdown(); } Ok(()) diff --git a/src/pyroscope.rs b/src/pyroscope.rs index 8dcd1e12..c201016f 100644 --- a/src/pyroscope.rs +++ b/src/pyroscope.rs @@ -207,12 +207,19 @@ impl PyroscopeAgentBuilder { /// This trait is used to encode the state of the agent. pub trait PyroscopeAgentState {} + /// Marker struct for an Uninitialized state. +#[derive(Debug)] pub struct PyroscopeAgentBare; + /// Marker struct for a Ready state. +#[derive(Debug)] pub struct PyroscopeAgentReady; + /// Marker struct for a Running state. +#[derive(Debug)] pub struct PyroscopeAgentRunning; + impl PyroscopeAgentState for PyroscopeAgentBare {} impl PyroscopeAgentState for PyroscopeAgentReady {} impl PyroscopeAgentState for PyroscopeAgentRunning {}