diff --git a/socktop/build.rs b/socktop/build.rs index 0cf4635..a79719b 100644 --- a/socktop/build.rs +++ b/socktop/build.rs @@ -1,8 +1,14 @@ fn main() { + // Vendored protoc for reproducible builds (works on crates.io build machines) let protoc = protoc_bin_vendored::protoc_bin_path().expect("protoc"); - std::env::set_var("PROTOC", protoc); + std::env::set_var("PROTOC", &protoc); + + // Tell Cargo when to re-run + println!("cargo:rerun-if-changed=proto/processes.proto"); + let mut cfg = prost_build::Config::new(); cfg.out_dir(std::env::var("OUT_DIR").unwrap()); - cfg.compile_protos(&["../proto/processes.proto"], &["../proto"]) + // Use in-crate relative path so `cargo package` includes the file + cfg.compile_protos(&["proto/processes.proto"], &["proto"]) // paths relative to CARGO_MANIFEST_DIR .expect("compile protos"); } diff --git a/socktop/proto/processes.proto b/socktop/proto/processes.proto new file mode 100644 index 0000000..631e162 --- /dev/null +++ b/socktop/proto/processes.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; +package socktop; + +// All running processes. Sorting is done client-side. +message Processes { + uint64 process_count = 1; // total processes in the system + repeated Process rows = 2; // all processes +} + +message Process { + uint32 pid = 1; + string name = 2; + float cpu_usage = 3; // 0..100 + uint64 mem_bytes = 4; // RSS bytes +} diff --git a/socktop_agent/build.rs b/socktop_agent/build.rs index 366d490..f931d80 100644 --- a/socktop_agent/build.rs +++ b/socktop_agent/build.rs @@ -1,11 +1,14 @@ fn main() { - // Ensure protoc exists (vendored for reproducible builds) + // Vendored protoc for reproducible builds let protoc = protoc_bin_vendored::protoc_bin_path().expect("protoc"); - std::env::set_var("PROTOC", protoc); + std::env::set_var("PROTOC", &protoc); + + println!("cargo:rerun-if-changed=proto/processes.proto"); // Compile protobuf definitions for processes let mut cfg = prost_build::Config::new(); cfg.out_dir(std::env::var("OUT_DIR").unwrap()); - cfg.compile_protos(&["../proto/processes.proto"], &["../proto"]) + // Use local path (ensures file is inside published crate tarball) + cfg.compile_protos(&["proto/processes.proto"], &["proto"]) // relative to CARGO_MANIFEST_DIR .expect("compile protos"); } diff --git a/socktop_agent/proto/processes.proto b/socktop_agent/proto/processes.proto new file mode 100644 index 0000000..631e162 --- /dev/null +++ b/socktop_agent/proto/processes.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; +package socktop; + +// All running processes. Sorting is done client-side. +message Processes { + uint64 process_count = 1; // total processes in the system + repeated Process rows = 2; // all processes +} + +message Process { + uint32 pid = 1; + string name = 2; + float cpu_usage = 3; // 0..100 + uint64 mem_bytes = 4; // RSS bytes +}