From 256df0651f9f0b83a9dbc960155ced92f9414d31 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Fri, 14 Mar 2025 18:53:12 +0000 Subject: [PATCH 01/12] initial commit --- opentelemetry-user-events-logs/src/lib.rs | 19 ++++----------- scripts/setup_perf_decoder.sh | 28 +++++++++++++++++++++++ scripts/test.sh | 3 +++ 3 files changed, 35 insertions(+), 15 deletions(-) create mode 100644 scripts/setup_perf_decoder.sh diff --git a/opentelemetry-user-events-logs/src/lib.rs b/opentelemetry-user-events-logs/src/lib.rs index 9cf4ccd38..452da3edf 100644 --- a/opentelemetry-user-events-logs/src/lib.rs +++ b/opentelemetry-user-events-logs/src/lib.rs @@ -30,7 +30,7 @@ mod tests { #[test] fn integration_test_basic() { // Run using the below command - // sudo -E ~/.cargo/bin/cargo test integration_test_basic -- --nocapture --ignored + // sudo ./scripts/setup_perf_decoder.sh && sudo -E ~/.cargo/bin/cargo test integration_test_basic -- --nocapture --ignored // Basic check if user_events are available check_user_events_available().expect("Kernel does not support user_events. Verify your distribution/kernel supports user_events: https://docs.kernel.org/trace/user_events.html."); @@ -319,21 +319,10 @@ mod tests { } } - // Change permissions on perf.data (which is the default file perf records to) to allow reading - let chmod_status = Command::new("sudo") - .args(["chmod", "uog+r", "./perf.data"]) - .status()?; - - if !chmod_status.success() { - panic!("chmod failed with exit code: {:?}", chmod_status.code()); - } - // Decode the performance data and return it directly - // Note: This tool must be installed on the machine - // git clone https://github.com/microsoft/LinuxTracepoints && - // cd LinuxTracepoints && mkdir build && cd build && cmake .. && make && - // sudo cp bin/perf-decode /usr/local/bin && - let decode_output = Command::new("perf-decode").args(["./perf.data"]).output()?; + let decode_output = Command::new("sudo") + .args(["perf-decode", "./perf.data"]) + .output()?; if !decode_output.status.success() { panic!( diff --git a/scripts/setup_perf_decoder.sh b/scripts/setup_perf_decoder.sh new file mode 100644 index 000000000..522155c19 --- /dev/null +++ b/scripts/setup_perf_decoder.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +set -e # Exit immediately if a command exits with a non-zero status +set -x # Print commands and their arguments as they are executed + +# Update package lists +sudo apt-get update + +# Install required dependencies +sudo apt-get install -y git build-essential cmake flex bison linux-tools-generic + +# Clone and build LinuxTracepoints +git clone https://github.com/microsoft/LinuxTracepoints +cd LinuxTracepoints +mkdir build && cd build +cmake .. && make + +# Install perf-decode +sudo cp bin/perf-decode /usr/local/bin + +# Cleanup +cd ../.. +rm -rf LinuxTracepoints + +# Verify installation +perf --version +perf-decode --help + diff --git a/scripts/test.sh b/scripts/test.sh index e553b199f..539c7724f 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -15,3 +15,6 @@ cargo test --manifest-path=opentelemetry-user-events-logs/Cargo.toml --all-featu cargo test --manifest-path=opentelemetry-user-events-metrics/Cargo.toml --all-features cargo test --manifest-path=opentelemetry-resource-detectors/Cargo.toml --all-features + +sudo -E ~/.cargo/bin/cargo test --manifest-path=opentelemetry-user-events-logs/Cargo.toml -- --nocapture --ignored + From 73b1b411cfef480c0c4109ba2807b78a238c8d99 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Fri, 14 Mar 2025 18:59:55 +0000 Subject: [PATCH 02/12] fix --- .github/workflows/ci.yml | 4 ++++ opentelemetry-user-events-logs/src/lib.rs | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 016ce3211..b2f0b2030 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,6 +32,10 @@ jobs: - uses: arduino/setup-protoc@v3 with: repo-token: ${{ secrets.GITHUB_TOKEN }} + - name: Setup-perf-decode + run: | + chmod +x scripts/setup_perf_decode.sh + sudo ./scripts/setup_perf_decode.sh - name: Test run: ./scripts/test.sh lint: diff --git a/opentelemetry-user-events-logs/src/lib.rs b/opentelemetry-user-events-logs/src/lib.rs index 452da3edf..e526a6700 100644 --- a/opentelemetry-user-events-logs/src/lib.rs +++ b/opentelemetry-user-events-logs/src/lib.rs @@ -321,8 +321,8 @@ mod tests { // Decode the performance data and return it directly let decode_output = Command::new("sudo") - .args(["perf-decode", "./perf.data"]) - .output()?; + .args(["perf-decode", "./perf.data"]) + .output()?; if !decode_output.status.success() { panic!( From ec9f6ff4f0f81174931a34a15574da9f7ed8422c Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Fri, 14 Mar 2025 19:01:50 +0000 Subject: [PATCH 03/12] script name --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b2f0b2030..04c83f88d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,8 +34,8 @@ jobs: repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Setup-perf-decode run: | - chmod +x scripts/setup_perf_decode.sh - sudo ./scripts/setup_perf_decode.sh + chmod +x scripts/setup_perf_decoder.sh + sudo ./scripts/setup_perf_decoder.sh - name: Test run: ./scripts/test.sh lint: From 1be124ae016c9e61a4677ef4c41d6c69f233caaa Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Fri, 14 Mar 2025 19:08:27 +0000 Subject: [PATCH 04/12] return 0 as success from script --- scripts/setup_perf_decoder.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/setup_perf_decoder.sh b/scripts/setup_perf_decoder.sh index 522155c19..7962e5283 100644 --- a/scripts/setup_perf_decoder.sh +++ b/scripts/setup_perf_decoder.sh @@ -25,4 +25,5 @@ rm -rf LinuxTracepoints # Verify installation perf --version perf-decode --help +return 0 From 3b201e14ccb3ed2022d3c84744650feca0777a06 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Fri, 14 Mar 2025 19:32:51 +0000 Subject: [PATCH 05/12] fix perf path, and sleep --- opentelemetry-user-events-logs/src/lib.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/opentelemetry-user-events-logs/src/lib.rs b/opentelemetry-user-events-logs/src/lib.rs index e526a6700..0a1563193 100644 --- a/opentelemetry-user-events-logs/src/lib.rs +++ b/opentelemetry-user-events-logs/src/lib.rs @@ -297,14 +297,16 @@ mod tests { // Run perf record for duration_secs seconds let perf_status = Command::new("sudo") .args([ - "timeout", - "-s", - "SIGINT", &duration_secs.to_string(), "perf", "record", + "-o", + "/tmp/perf.data", "-e", event, + "--", + "sleep", + &duration_secs.to_string(), ]) .status()?; From 4e22d0fd90ba29bcf1ce0587e7732f00ca467f39 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Fri, 14 Mar 2025 19:37:21 +0000 Subject: [PATCH 06/12] check for perf decoder --- opentelemetry-user-events-logs/src/lib.rs | 2 +- scripts/setup_perf_decoder.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/opentelemetry-user-events-logs/src/lib.rs b/opentelemetry-user-events-logs/src/lib.rs index 0a1563193..cbb340138 100644 --- a/opentelemetry-user-events-logs/src/lib.rs +++ b/opentelemetry-user-events-logs/src/lib.rs @@ -323,7 +323,7 @@ mod tests { // Decode the performance data and return it directly let decode_output = Command::new("sudo") - .args(["perf-decode", "./perf.data"]) + .args(["perf-decode", "/tmp/perf.data"]) .output()?; if !decode_output.status.success() { diff --git a/scripts/setup_perf_decoder.sh b/scripts/setup_perf_decoder.sh index 7962e5283..3059e7040 100644 --- a/scripts/setup_perf_decoder.sh +++ b/scripts/setup_perf_decoder.sh @@ -24,6 +24,6 @@ rm -rf LinuxTracepoints # Verify installation perf --version -perf-decode --help +test -x /usr/local/bin/perf-decode && echo "perf-decode is executable" return 0 From 7f1b8d65b4437d8b1f79762431b2dc3b81892095 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Fri, 14 Mar 2025 19:39:53 +0000 Subject: [PATCH 07/12] check for perf decoder --- scripts/setup_perf_decoder.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/setup_perf_decoder.sh b/scripts/setup_perf_decoder.sh index 3059e7040..fe36eeb70 100644 --- a/scripts/setup_perf_decoder.sh +++ b/scripts/setup_perf_decoder.sh @@ -25,5 +25,4 @@ rm -rf LinuxTracepoints # Verify installation perf --version test -x /usr/local/bin/perf-decode && echo "perf-decode is executable" -return 0 - +exit 0 From 97514ce132629e2fcd50a4e576e68f2b33d16741 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Fri, 14 Mar 2025 20:52:45 +0000 Subject: [PATCH 08/12] check for perf decoder --- opentelemetry-user-events-logs/src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/opentelemetry-user-events-logs/src/lib.rs b/opentelemetry-user-events-logs/src/lib.rs index cbb340138..ebbbf860f 100644 --- a/opentelemetry-user-events-logs/src/lib.rs +++ b/opentelemetry-user-events-logs/src/lib.rs @@ -297,7 +297,6 @@ mod tests { // Run perf record for duration_secs seconds let perf_status = Command::new("sudo") .args([ - &duration_secs.to_string(), "perf", "record", "-o", From 070bfc7c33973f0e5899fe718597ba71fb14a873 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Fri, 14 Mar 2025 21:43:21 +0000 Subject: [PATCH 09/12] add debug --- opentelemetry-user-events-logs/src/lib.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/opentelemetry-user-events-logs/src/lib.rs b/opentelemetry-user-events-logs/src/lib.rs index ebbbf860f..10f25636d 100644 --- a/opentelemetry-user-events-logs/src/lib.rs +++ b/opentelemetry-user-events-logs/src/lib.rs @@ -100,6 +100,9 @@ mod tests { .as_array() .expect("Events for perf.data is not an array"); + // display the events for debugging + println!("Events: {:#?}", events); + // Find the specific event. Its named providername:eventname format. let event = events .iter() From 5c56e1a69007185fe84b9522e108a6c966313f6a Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Fri, 14 Mar 2025 21:56:27 +0000 Subject: [PATCH 10/12] add debug --- opentelemetry-user-events-logs/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-user-events-logs/src/lib.rs b/opentelemetry-user-events-logs/src/lib.rs index 10f25636d..2259c6a02 100644 --- a/opentelemetry-user-events-logs/src/lib.rs +++ b/opentelemetry-user-events-logs/src/lib.rs @@ -58,7 +58,7 @@ mod tests { // Start perf recording in a separate thread and emit logs in parallel. let perf_thread = - std::thread::spawn(|| run_perf_and_decode(5, "user_events:myprovider_L2K1")); + std::thread::spawn(|| run_perf_and_decode(20, "user_events:myprovider_L2K1")); // Give a little time for perf to start recording std::thread::sleep(std::time::Duration::from_millis(1000)); From 0a1d3ee26f8b26f03975e2a3649a2ee613a702fb Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Tue, 6 May 2025 10:26:11 -0700 Subject: [PATCH 11/12] Update ci.yml --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 923aef3b1..75983b876 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -56,7 +56,7 @@ jobs: run: rustup set profile minimal - uses: arduino/setup-protoc@c65c819552d16ad3c9b72d9dfd5ba5237b9c906b # v3.0.0 with: - repo-token: ${{ secrets.GITHUB_TOKEN }} + repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Setup-perf-decode if: ${{ matrix.os != 'windows-latest' }} run: | From 13513bb2852eca01acd54730bb519e3d356c0b44 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Tue, 6 May 2025 10:35:14 -0700 Subject: [PATCH 12/12] more changes --- .github/workflows/ci.yml | 5 ++++- scripts/test.sh | 2 -- scripts/test_user_events.sh | 4 ++++ 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 scripts/test_user_events.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 75983b876..9ff70958d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,7 +58,7 @@ jobs: with: repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Setup-perf-decode - if: ${{ matrix.os != 'windows-latest' }} + if: ${{ matrix.os == 'ubuntu-latest' }} run: | chmod +x scripts/setup_perf_decoder.sh sudo ./scripts/setup_perf_decoder.sh @@ -69,6 +69,9 @@ jobs: - name: Test (Unix) if: ${{ matrix.os != 'windows-latest'}} run: bash ./scripts/test.sh + - name: Test user_events + if: ${{ matrix.os == 'ubuntu-latest'}} + run: bash ./scripts/test_user_events.sh lint: strategy: matrix: diff --git a/scripts/test.sh b/scripts/test.sh index 0b3501b16..0245f4184 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -8,5 +8,3 @@ cargo test --workspace --all-features --tests echo "Running doctests for all packages in workspace with --all-features" cargo test --workspace --all-features --doc -echo "Running user_events tests" -sudo -E ~/.cargo/bin/cargo test --manifest-path=opentelemetry-user-events-logs/Cargo.toml -- --nocapture --ignored diff --git a/scripts/test_user_events.sh b/scripts/test_user_events.sh new file mode 100644 index 000000000..9bc1086b0 --- /dev/null +++ b/scripts/test_user_events.sh @@ -0,0 +1,4 @@ +set -eu + +echo "Running user_events tests" +sudo -E ~/.cargo/bin/cargo test --manifest-path=opentelemetry-user-events-logs/Cargo.toml -- --nocapture --ignored \ No newline at end of file