* [PATCH 1/6] monitoring: restructure tasks into modular architecture
2025-09-16 12:17 [PATCH 0/6] monitoring: restructure into modular architecture and extend workflow coverage Daniel Gomez
@ 2025-09-16 12:17 ` Daniel Gomez
2025-09-16 12:17 ` [PATCH 2/6] blktests: add monitoring framework integration Daniel Gomez
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Daniel Gomez @ 2025-09-16 12:17 UTC (permalink / raw)
To: Luis Chamberlain; +Cc: kdevops, Daniel Gomez
From: Daniel Gomez <da.gomez@samsung.com>
Split monolithic monitor_run.yml and monitor_collect.yml into modular
structure with individual monitor subdirectories:
- Extract folio migration tasks to monitors/folio_migration/
- Create common tasks directory for shared functionality
- Move conditions to import level to reduce code duplication
- Convert orchestrator files to use import_tasks pattern
- Fix variable scope issues and remove cross-module dependencies
- Each monitor now handles its own matplotlib availability checking
This provides better separation of concerns and easier maintenance
for adding new monitoring capabilities.
Generated-by: Claude AI
Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
playbooks/roles/monitoring/tasks/common/setup.yml | 29 +++
.../roles/monitoring/tasks/monitor_collect.yml | 207 +--------------------
playbooks/roles/monitoring/tasks/monitor_run.yml | 83 +--------
.../tasks/monitors/folio_migration/collect.yml | 147 +++++++++++++++
.../folio_migration}/files/plot_migration_stats.py | 0
.../tasks/monitors/folio_migration/run.yml | 68 +++++++
6 files changed, 254 insertions(+), 280 deletions(-)
diff --git a/playbooks/roles/monitoring/tasks/common/setup.yml b/playbooks/roles/monitoring/tasks/common/setup.yml
new file mode 100644
index 00000000..e3e8501d
--- /dev/null
+++ b/playbooks/roles/monitoring/tasks/common/setup.yml
@@ -0,0 +1,29 @@
+---
+# Common monitoring setup tasks
+
+- name: Debug monitoring collection start
+ ansible.builtin.debug:
+ msg: |
+ Starting monitoring collection
+ monitor_developmental_stats: {{ monitor_developmental_stats | default(false) }}
+ monitor_folio_migration: {{ monitor_folio_migration | default(false) }}
+ enable_monitoring: {{ enable_monitoring | default(false) }}
+ kdevops_run_fstests: {{ kdevops_run_fstests | default(false) }}
+
+- name: Set workflow-appropriate monitoring results path
+ ansible.builtin.set_fact:
+ monitoring_results_path: "{{ topdir_path }}/workflows/{{ kdevops_workflow_name | default('unknown') }}/results/monitoring"
+ when:
+ - enable_monitoring|default(false)|bool
+ - monitoring_results_path is not defined
+
+- name: Create local monitoring results directory
+ ansible.builtin.file:
+ path: "{{ monitoring_results_path }}"
+ state: directory
+ mode: '0755'
+ delegate_to: localhost
+ run_once: true
+ become: false
+ when:
+ - monitoring_results_path is defined
diff --git a/playbooks/roles/monitoring/tasks/monitor_collect.yml b/playbooks/roles/monitoring/tasks/monitor_collect.yml
index 5432fc87..79f2d7ae 100644
--- a/playbooks/roles/monitoring/tasks/monitor_collect.yml
+++ b/playbooks/roles/monitoring/tasks/monitor_collect.yml
@@ -1,208 +1,13 @@
---
-# Tasks to stop monitoring services and collect data after test execution
+# Monitoring orchestrator - includes individual collection modules
-- name: Check if folio migration monitoring was started
- become: true
- become_method: sudo
- ansible.builtin.stat:
- path: /root/monitoring/folio_migration.pid
- register: folio_migration_pid_file
+# Import common monitoring setup tasks
+- ansible.builtin.import_tasks: common/setup.yml
when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
-
-- name: Stop folio migration monitoring
- become: true
- become_method: sudo
- ansible.builtin.shell: |
- if [ -f /root/monitoring/folio_migration.pid ]; then
- pid=$(cat /root/monitoring/folio_migration.pid)
- if ps -p $pid > /dev/null 2>&1; then
- kill $pid
- echo "Stopped monitoring process $pid"
- else
- echo "Monitoring process $pid was not running"
- fi
- rm -f /root/monitoring/folio_migration.pid
- fi
- register: stop_monitor
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_pid_file.stat.exists|default(false)
-
-- name: Display stop monitoring status
- ansible.builtin.debug:
- msg: "{{ stop_monitor.stdout }}"
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - stop_monitor is defined
- - stop_monitor.changed|default(false)
-
-- name: Check if monitoring data was collected
- become: true
- become_method: sudo
- ansible.builtin.stat:
- path: /root/monitoring/folio_migration_stats.txt
- register: folio_migration_data_file
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
-
-- name: Copy plot_migration_stats.py to target
- become: true
- become_method: sudo
- ansible.builtin.copy:
- src: "{{ playbook_dir }}/roles/monitoring/files/plot_migration_stats.py"
- dest: /root/monitoring/plot_migration_stats.py
- mode: "0755"
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_data_file.stat.exists|default(false)
-
-- name: Check if matplotlib is available for plotting
- become: true
- become_method: sudo
- ansible.builtin.command: python3 -c "import matplotlib.pyplot"
- register: matplotlib_check
- ignore_errors: true
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_data_file.stat.exists|default(false)
-
-- name: Generate folio migration plots
- become: true
- become_method: sudo
- ansible.builtin.command: |
- python3 /root/monitoring/plot_migration_stats.py
- /root/monitoring/folio_migration_stats.txt
- /root/monitoring/folio_migration_plot.png
- args:
- chdir: /root/monitoring
- register: plot_generation
- ignore_errors: true
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_data_file.stat.exists|default(false)
- - matplotlib_check.rc == 0
-
-- name: Log plot generation skip if matplotlib not available
- ansible.builtin.debug:
- msg: "Skipping plot generation - matplotlib not available on target system"
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_data_file.stat.exists|default(false)
- - matplotlib_check.rc != 0
-
-- name: Debug monitoring collection start
- ansible.builtin.debug:
- msg: |
- Starting monitoring collection
- monitor_developmental_stats: {{ monitor_developmental_stats | default(false) }}
- monitor_folio_migration: {{ monitor_folio_migration | default(false) }}
- enable_monitoring: {{ enable_monitoring | default(false) }}
- kdevops_run_fstests: {{ kdevops_run_fstests | default(false) }}
-
-- name: Set monitoring results path
- ansible.builtin.set_fact:
- monitoring_results_path: "{{ monitoring_results_base_path | default(topdir_path + '/workflows/fstests/results/monitoring') }}"
-
-- name: Create local monitoring results directory
- ansible.builtin.file:
- path: "{{ monitoring_results_path }}"
- state: directory
- delegate_to: localhost
- run_once: true
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
-
-- name: Copy folio migration stats data to localhost
- become: true
- become_method: sudo
- ansible.builtin.fetch:
- src: /root/monitoring/folio_migration_stats.txt
- dest: "{{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats.txt"
- flat: true
- validate_checksum: false
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_data_file.stat.exists|default(false)
-
-- name: Check if plot was generated
- become: true
- become_method: sudo
- ansible.builtin.stat:
- path: /root/monitoring/folio_migration_plot.png
- register: folio_migration_plot_file
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
-
-- name: Copy folio migration plot to localhost
- become: true
- become_method: sudo
- ansible.builtin.fetch:
- src: /root/monitoring/folio_migration_plot.png
- dest: "{{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_plot.png"
- flat: true
- validate_checksum: false
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_plot_file.stat.exists|default(false)
-
-- name: Display monitoring data collection summary
- ansible.builtin.debug:
- msg: |
- Folio migration monitoring collection complete.
- Data saved to: {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats.txt
- {% if folio_migration_plot_file.stat.exists | default(false) %}
- Plot saved to: {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_plot.png
- {% endif %}
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_data_file.stat.exists|default(false)
-
-# Generate plots on localhost after collecting data
-- name: Check if matplotlib is available on localhost
- ansible.builtin.command: python3 -c "import matplotlib.pyplot"
- delegate_to: localhost
- register: localhost_matplotlib_check
- ignore_errors: true
- run_once: true
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
-
-- name: Generate folio migration plots on localhost
- ansible.builtin.command: "python3 {{ playbook_dir }}/roles/monitoring/files/plot_migration_stats.py\n -o {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_plot.png\n\
- \ {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats.txt\n"
- delegate_to: localhost
- register: localhost_plot_generation
- ignore_errors: true
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_data_file.stat.exists|default(false)
- - localhost_matplotlib_check.rc == 0
+ - enable_monitoring|default(false)|bool
-- name: Log localhost plot generation status
- ansible.builtin.debug:
- msg: |
- {% if localhost_matplotlib_check.rc != 0 %}
- Skipping plot generation - matplotlib not available on localhost
- {% else %}
- Plot generated: {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_plot.png
- {% endif %}
+# Import folio migration collection tasks
+- ansible.builtin.import_tasks: monitors/folio_migration/collect.yml
when:
- monitor_developmental_stats|default(false)|bool
- monitor_folio_migration|default(false)|bool
- - folio_migration_data_file.stat.exists|default(false)
diff --git a/playbooks/roles/monitoring/tasks/monitor_run.yml b/playbooks/roles/monitoring/tasks/monitor_run.yml
index f56d06e4..a2055f89 100644
--- a/playbooks/roles/monitoring/tasks/monitor_run.yml
+++ b/playbooks/roles/monitoring/tasks/monitor_run.yml
@@ -1,83 +1,8 @@
---
-# Tasks to start monitoring services before test execution
+# Monitoring orchestrator - includes individual monitor modules
-- name: Check if folio migration stats are available
- become: true
- become_method: sudo
- ansible.builtin.stat:
- path: /sys/kernel/debug/mm/migrate/stats
- register: folio_migration_stats_file
+# Import folio migration monitoring tasks
+- ansible.builtin.import_tasks: monitors/folio_migration/run.yml
when:
- monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
-
-- name: Create monitoring directory
- become: true
- become_method: sudo
- ansible.builtin.file:
- path: /root/monitoring
- state: directory
- mode: "0755"
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_stats_file.stat.exists|default(false)
-
-- name: Start folio migration monitoring in background
- become: true
- become_method: sudo
- ansible.builtin.shell: |
- nohup bash -c 'while true; do
- echo "$(date +"%Y-%m-%d %H:%M:%S")" >> /root/monitoring/folio_migration_stats.txt
- cat /sys/kernel/debug/mm/migrate/stats >> /root/monitoring/folio_migration_stats.txt
- echo "" >> /root/monitoring/folio_migration_stats.txt
- sleep {{ monitor_folio_migration_interval|default(60) }}
- done' > /root/monitoring/folio_migration.log 2>&1 &
- echo $! > /root/monitoring/folio_migration.pid
- async: 86400 # Run for up to 24 hours
- poll: 0
- register: folio_migration_monitor
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_stats_file.stat.exists|default(false)
-
-- name: Save async job ID for later termination
- ansible.builtin.set_fact:
- folio_migration_monitor_job: "{{ folio_migration_monitor.ansible_job_id }}"
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_stats_file.stat.exists|default(false)
- - folio_migration_monitor is defined
-
-- name: Verify monitoring started successfully
- become: true
- become_method: sudo
- ansible.builtin.shell: |
- if [ -f /root/monitoring/folio_migration.pid ]; then
- pid=$(cat /root/monitoring/folio_migration.pid)
- if ps -p $pid > /dev/null 2>&1; then
- echo "Monitoring process $pid is running"
- else
- echo "ERROR: Monitoring process $pid is not running" >&2
- exit 1
- fi
- else
- echo "ERROR: PID file not found" >&2
- exit 1
- fi
- register: monitor_status
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_stats_file.stat.exists|default(false)
-
-- name: Display monitoring status
- ansible.builtin.debug:
- msg: "{{ monitor_status.stdout }}"
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_stats_file.stat.exists|default(false)
- - monitor_status is defined
+ - monitor_folio_migration|default(false)|bool
\ No newline at end of file
diff --git a/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect.yml b/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect.yml
new file mode 100644
index 00000000..bd04ebe2
--- /dev/null
+++ b/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect.yml
@@ -0,0 +1,147 @@
+---
+# Folio migration monitoring data collection tasks
+# Conditions are checked at import level in monitor_collect.yml
+
+- name: Check if folio migration monitoring was started
+ become: true
+ become_method: sudo
+ ansible.builtin.stat:
+ path: /root/monitoring/folio_migration.pid
+ register: folio_migration_pid_file
+
+- name: Stop folio migration monitoring
+ become: true
+ become_method: sudo
+ ansible.builtin.shell: |
+ if [ -f /root/monitoring/folio_migration.pid ]; then
+ pid=$(cat /root/monitoring/folio_migration.pid)
+ if ps -p $pid > /dev/null 2>&1; then
+ kill $pid
+ echo "Stopped monitoring process $pid"
+ else
+ echo "Monitoring process $pid was not running"
+ fi
+ rm -f /root/monitoring/folio_migration.pid
+ fi
+ register: stop_monitor
+ when: folio_migration_pid_file.stat.exists|default(false)
+
+- name: Display stop monitoring status
+ ansible.builtin.debug:
+ msg: "{{ stop_monitor.stdout }}"
+ when:
+ - stop_monitor is defined
+ - stop_monitor.changed|default(false)
+
+- name: Check if monitoring data was collected
+ become: true
+ become_method: sudo
+ ansible.builtin.stat:
+ path: /root/monitoring/folio_migration_stats.txt
+ register: folio_migration_data_file
+
+- name: Copy plot_migration_stats.py to target
+ become: true
+ become_method: sudo
+ ansible.builtin.copy:
+ src: "{{ playbook_dir }}/roles/monitoring/files/plot_migration_stats.py"
+ dest: /root/monitoring/plot_migration_stats.py
+ mode: "0755"
+ when: folio_migration_data_file.stat.exists|default(false)
+
+- name: Check if matplotlib is available for plotting
+ become: true
+ become_method: sudo
+ ansible.builtin.command: python3 -c "import matplotlib.pyplot"
+ register: matplotlib_check
+ ignore_errors: true
+ when: folio_migration_data_file.stat.exists|default(false)
+
+- name: Generate folio migration plots
+ become: true
+ become_method: sudo
+ ansible.builtin.command: |
+ python3 /root/monitoring/plot_migration_stats.py
+ /root/monitoring/folio_migration_stats.txt
+ /root/monitoring/folio_migration_plot.png
+ args:
+ chdir: /root/monitoring
+ register: plot_generation
+ ignore_errors: true
+ when:
+ - folio_migration_data_file.stat.exists|default(false)
+ - matplotlib_check.rc == 0
+
+- name: Log plot generation skip if matplotlib not available
+ ansible.builtin.debug:
+ msg: "Skipping plot generation - matplotlib not available on target system"
+ when:
+ - folio_migration_data_file.stat.exists|default(false)
+ - matplotlib_check.rc != 0
+
+- name: Copy folio migration stats data to localhost
+ become: true
+ become_method: sudo
+ ansible.builtin.fetch:
+ src: /root/monitoring/folio_migration_stats.txt
+ dest: "{{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats.txt"
+ flat: true
+ validate_checksum: false
+ when: folio_migration_data_file.stat.exists|default(false)
+
+- name: Check if plot was generated
+ become: true
+ become_method: sudo
+ ansible.builtin.stat:
+ path: /root/monitoring/folio_migration_plot.png
+ register: folio_migration_plot_file
+
+- name: Copy folio migration plot to localhost
+ become: true
+ become_method: sudo
+ ansible.builtin.fetch:
+ src: /root/monitoring/folio_migration_plot.png
+ dest: "{{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_plot.png"
+ flat: true
+ validate_checksum: false
+ when: folio_migration_plot_file.stat.exists|default(false)
+
+- name: Display monitoring data collection summary
+ ansible.builtin.debug:
+ msg: |
+ Folio migration monitoring collection complete.
+ Data saved to: {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats.txt
+ {% if folio_migration_plot_file.stat.exists | default(false) %}
+ Plot saved to: {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_plot.png
+ {% endif %}
+ when: folio_migration_data_file.stat.exists|default(false)
+
+- name: Check if matplotlib is available on localhost for folio migration
+ ansible.builtin.command: python3 -c "import matplotlib.pyplot"
+ delegate_to: localhost
+ register: folio_localhost_matplotlib_check
+ ignore_errors: true
+ run_once: true
+ when: folio_migration_data_file.stat.exists|default(false)
+
+- name: Generate folio migration plots on localhost
+ ansible.builtin.command: |
+ python3 {{ playbook_dir }}/roles/monitoring/files/plot_migration_stats.py
+ -o {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_plot.png
+ {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats.txt
+ delegate_to: localhost
+ register: localhost_plot_generation
+ ignore_errors: true
+ when:
+ - folio_migration_data_file.stat.exists|default(false)
+ - folio_localhost_matplotlib_check.rc == 0
+
+- name: Log localhost plot generation status
+ ansible.builtin.debug:
+ msg: |
+ {% if folio_localhost_matplotlib_check.rc != 0 %}
+ Skipping plot generation - matplotlib not available on localhost
+ {% else %}
+ Plot generated: {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_plot.png
+ {% endif %}
+ when: folio_migration_data_file.stat.exists|default(false)
\ No newline at end of file
diff --git a/playbooks/roles/monitoring/files/plot_migration_stats.py b/playbooks/roles/monitoring/tasks/monitors/folio_migration/files/plot_migration_stats.py
similarity index 100%
rename from playbooks/roles/monitoring/files/plot_migration_stats.py
rename to playbooks/roles/monitoring/tasks/monitors/folio_migration/files/plot_migration_stats.py
diff --git a/playbooks/roles/monitoring/tasks/monitors/folio_migration/run.yml b/playbooks/roles/monitoring/tasks/monitors/folio_migration/run.yml
new file mode 100644
index 00000000..40ffc918
--- /dev/null
+++ b/playbooks/roles/monitoring/tasks/monitors/folio_migration/run.yml
@@ -0,0 +1,68 @@
+---
+# Folio migration monitoring startup tasks
+# Conditions are checked at import level in monitor_run.yml
+
+- name: Check if folio migration stats are available
+ become: true
+ become_method: sudo
+ ansible.builtin.stat:
+ path: /sys/kernel/debug/mm/migrate/stats
+ register: folio_migration_stats_file
+
+- name: Create monitoring directory
+ become: true
+ become_method: sudo
+ ansible.builtin.file:
+ path: /root/monitoring
+ state: directory
+ mode: "0755"
+ when: folio_migration_stats_file.stat.exists|default(false)
+
+- name: Start folio migration monitoring in background
+ become: true
+ become_method: sudo
+ ansible.builtin.shell: |
+ nohup bash -c 'while true; do
+ echo "$(date +"%Y-%m-%d %H:%M:%S")" >> /root/monitoring/folio_migration_stats.txt
+ cat /sys/kernel/debug/mm/migrate/stats >> /root/monitoring/folio_migration_stats.txt
+ echo "" >> /root/monitoring/folio_migration_stats.txt
+ sleep {{ monitor_folio_migration_interval|default(60) }}
+ done' > /root/monitoring/folio_migration.log 2>&1 &
+ echo $! > /root/monitoring/folio_migration.pid
+ async: 86400 # Run for up to 24 hours
+ poll: 0
+ register: folio_migration_monitor
+ when: folio_migration_stats_file.stat.exists|default(false)
+
+- name: Save async job ID for later termination
+ ansible.builtin.set_fact:
+ folio_migration_monitor_job: "{{ folio_migration_monitor.ansible_job_id }}"
+ when:
+ - folio_migration_stats_file.stat.exists|default(false)
+ - folio_migration_monitor is defined
+
+- name: Verify monitoring started successfully
+ become: true
+ become_method: sudo
+ ansible.builtin.shell: |
+ if [ -f /root/monitoring/folio_migration.pid ]; then
+ pid=$(cat /root/monitoring/folio_migration.pid)
+ if ps -p $pid > /dev/null 2>&1; then
+ echo "Monitoring process $pid is running"
+ else
+ echo "ERROR: Monitoring process $pid is not running" >&2
+ exit 1
+ fi
+ else
+ echo "ERROR: PID file not found" >&2
+ exit 1
+ fi
+ register: monitor_status
+ when: folio_migration_stats_file.stat.exists|default(false)
+
+- name: Display monitoring status
+ ansible.builtin.debug:
+ msg: "{{ monitor_status.stdout }}"
+ when:
+ - folio_migration_stats_file.stat.exists|default(false)
+ - monitor_status is defined
\ No newline at end of file
--
2.50.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 2/6] blktests: add monitoring framework integration
2025-09-16 12:17 [PATCH 0/6] monitoring: restructure into modular architecture and extend workflow coverage Daniel Gomez
2025-09-16 12:17 ` [PATCH 1/6] monitoring: restructure tasks into modular architecture Daniel Gomez
@ 2025-09-16 12:17 ` Daniel Gomez
2025-09-16 12:17 ` [PATCH 3/6] monitoring: restructure monitor_collect_only.yml to use modular architecture Daniel Gomez
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Daniel Gomez @ 2025-09-16 12:17 UTC (permalink / raw)
To: Luis Chamberlain; +Cc: kdevops, Daniel Gomez
From: Daniel Gomez <da.gomez@samsung.com>
Add monitoring support to blktests workflow following fstests pattern:
- Start monitoring before tests, stop and collect data after
- Use import_tasks for proper variable scoping with modular structure
- Add vars tag to Makefile targets for variable loading
- Set blktests-specific monitoring results path
- Update documentation to include blktests support
Enables system monitoring during block device testing.
Works with the new modular monitoring architecture.
Generated-by: Claude AI
Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
docs/monitoring.md | 1 +
playbooks/roles/blktests/tasks/main.yml | 14 ++++++++++++++
playbooks/roles/monitoring/tasks/common/setup.yml | 1 +
workflows/blktests/Makefile | 8 ++++----
4 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/docs/monitoring.md b/docs/monitoring.md
index 7102db5d..1e05bbd5 100644
--- a/docs/monitoring.md
+++ b/docs/monitoring.md
@@ -49,6 +49,7 @@ make menuconfig
### Currently Supported Workflows
- **fstests**: Filesystem testing framework
+- **blktests**: Block layer testing framework
### How Workflows Integrate Monitoring
diff --git a/playbooks/roles/blktests/tasks/main.yml b/playbooks/roles/blktests/tasks/main.yml
index f4e53e9c..1f9838e5 100644
--- a/playbooks/roles/blktests/tasks/main.yml
+++ b/playbooks/roles/blktests/tasks/main.yml
@@ -265,6 +265,13 @@
- kdevops_run_blktests|bool
run_once: true
+# Start monitoring services before running tests
+- ansible.builtin.import_tasks: ../../monitoring/tasks/monitor_run.yml
+ when:
+ - kdevops_run_blktests|bool
+ - enable_monitoring|default(false)|bool
+ tags: ["blktests", "run_tests", "monitoring", "monitor_run"]
+
- name: Enable low-level messages on console
become: true
become_flags: "su - -c"
@@ -386,6 +393,13 @@
- kdevops_run_blktests|bool
run_once: true
+# Stop monitoring services and collect data after running tests
+- ansible.builtin.import_tasks: ../../monitoring/tasks/monitor_collect.yml
+ when:
+ - kdevops_run_blktests|bool
+ - enable_monitoring|default(false)|bool
+ tags: ["blktests", "run_tests", "monitoring", "monitor_collect"]
+
- name: Clean up our localhost results/last-run directory
ansible.builtin.file:
path: "{{ blktests_results_target }}/{{ item }}"
diff --git a/playbooks/roles/monitoring/tasks/common/setup.yml b/playbooks/roles/monitoring/tasks/common/setup.yml
index e3e8501d..22a43a80 100644
--- a/playbooks/roles/monitoring/tasks/common/setup.yml
+++ b/playbooks/roles/monitoring/tasks/common/setup.yml
@@ -9,6 +9,7 @@
monitor_folio_migration: {{ monitor_folio_migration | default(false) }}
enable_monitoring: {{ enable_monitoring | default(false) }}
kdevops_run_fstests: {{ kdevops_run_fstests | default(false) }}
+ kdevops_run_blktests: {{ kdevops_run_blktests | default(false) }}
- name: Set workflow-appropriate monitoring results path
ansible.builtin.set_fact:
diff --git a/workflows/blktests/Makefile b/workflows/blktests/Makefile
index 12c0d933..6acb3a71 100644
--- a/workflows/blktests/Makefile
+++ b/workflows/blktests/Makefile
@@ -65,7 +65,7 @@ blktests-baseline:
$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
--limit 'baseline' \
playbooks/blktests.yml \
- --tags run_tests,copy_results \
+ --tags vars,run_tests,copy_results \
--extra-vars '{ $(BLKTESTS_DYNAMIC_RUNTIME_VARS) }' \
--extra-vars=@./extra_vars.yaml $(LIMIT_HOSTS)
@@ -74,7 +74,7 @@ blktests-baseline-skip-kdevops-update:
$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
--limit 'baseline' \
playbooks/blktests.yml \
- --tags run_tests,copy_results --skip-tags git_update \
+ --tags vars,run_tests,copy_results --skip-tags git_update \
--extra-vars '{ $(BLKTESTS_DYNAMIC_RUNTIME_VARS) }' \
--extra-vars=@./extra_vars.yaml $(LIMIT_HOSTS)
@@ -82,7 +82,7 @@ blktests-baseline-run-oscheck-only:
$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
--limit 'baseline' \
playbooks/blktests.yml \
- --tags run_tests,copy_results \
+ --tags vars,run_tests,copy_results \
--skip-tags git_update,reboot,clean_results \
--extra-vars '{ $(BLKTESTS_DYNAMIC_RUNTIME_VARS) }' \
--extra-vars=@./extra_vars.yaml $(LIMIT_HOSTS)
@@ -91,7 +91,7 @@ blktests-dev:
$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
--limit 'dev' \
playbooks/blktests.yml \
- --tags run_tests,copy_results \
+ --tags vars,run_tests,copy_results \
--extra-vars '{ $(BLKTESTS_DYNAMIC_RUNTIME_VARS) }' \
--extra-vars=@./extra_vars.yaml $(LIMIT_HOSTS)
--
2.50.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 3/6] monitoring: restructure monitor_collect_only.yml to use modular architecture
2025-09-16 12:17 [PATCH 0/6] monitoring: restructure into modular architecture and extend workflow coverage Daniel Gomez
2025-09-16 12:17 ` [PATCH 1/6] monitoring: restructure tasks into modular architecture Daniel Gomez
2025-09-16 12:17 ` [PATCH 2/6] blktests: add monitoring framework integration Daniel Gomez
@ 2025-09-16 12:17 ` Daniel Gomez
2025-09-16 12:17 ` [PATCH 4/6] blktests: add monitor-results support for interim monitoring Daniel Gomez
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Daniel Gomez @ 2025-09-16 12:17 UTC (permalink / raw)
To: Luis Chamberlain; +Cc: kdevops, Daniel Gomez
From: Daniel Gomez <da.gomez@samsung.com>
Restructure the interim monitoring collection system to use the same
modular architecture as the main monitoring framework. This fixes
several issues:
- Replace hardcoded folio migration logic with modular import_tasks
pattern
- Fix broken matplotlib plotting tasks with proper parameters
- Eliminate code duplication by leveraging common/setup.yml
- Ensure consistent architecture across all monitoring tasks
The new structure mirrors the main monitoring system:
- monitors/folio_migration/collect_only.yml - Interim folio collection
- monitor_collect_only.yml - Orchestrator using import_tasks
This allows peeking at monitoring data during long-running tests without
stopping the monitoring services, now supporting all monitor types with
proper path resolution and plotting capabilities.
Generated-by: Claude AI
Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
.../monitoring/tasks/monitor_collect_only.yml | 169 +++------------------
playbooks/roles/monitoring/tasks/monitor_run.yml | 2 +-
.../tasks/monitors/folio_migration/collect.yml | 2 +-
.../monitors/folio_migration/collect_only.yml | 91 +++++++++++
.../tasks/monitors/folio_migration/run.yml | 2 +-
5 files changed, 114 insertions(+), 152 deletions(-)
diff --git a/playbooks/roles/monitoring/tasks/monitor_collect_only.yml b/playbooks/roles/monitoring/tasks/monitor_collect_only.yml
index 20e40a31..940661b6 100644
--- a/playbooks/roles/monitoring/tasks/monitor_collect_only.yml
+++ b/playbooks/roles/monitoring/tasks/monitor_collect_only.yml
@@ -1,164 +1,35 @@
---
-# Tasks to collect monitoring data WITHOUT stopping the monitoring services
+# Collect monitoring data WITHOUT stopping monitoring services
# This allows peeking at intermediate results during long-running tests
-- name: Check if monitoring data exists (without stopping monitoring)
- become: true
- become_method: sudo
- ansible.builtin.stat:
- path: /root/monitoring/folio_migration_stats.txt
- register: folio_migration_data_file
+# Import common monitoring setup tasks
+- ansible.builtin.import_tasks: common/setup.yml
when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
-
-# Note: We don't need matplotlib on target hosts - plots are generated on localhost
-
-- name: Create snapshot of monitoring data
- become: true
- become_method: sudo
- ansible.builtin.shell: |
- # Create a snapshot copy to avoid interfering with ongoing monitoring
- cp /root/monitoring/folio_migration_stats.txt /root/monitoring/folio_migration_stats_snapshot.txt
- args:
- chdir: /root/monitoring
- register: snapshot_creation
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_data_file.stat.exists|default(false)
-
-# Plot generation happens on localhost, not on target hosts
-
-- name: Debug monitoring collection status
- ansible.builtin.debug:
- msg: |
- Collecting monitoring data (without stopping monitoring)
- monitor_developmental_stats: {{ monitor_developmental_stats | default(false) }}
- monitor_folio_migration: {{ monitor_folio_migration | default(false) }}
- enable_monitoring: {{ enable_monitoring | default(false) }}
- Data file exists: {{ folio_migration_data_file.stat.exists | default(false) }}
-
-- name: Set monitoring results path
- ansible.builtin.set_fact:
- monitoring_results_path: "{{ monitoring_results_base_path | default(topdir_path + '/workflows/fstests/results/monitoring') }}"
-
-- name: Create local monitoring results directory
- ansible.builtin.file:
- delegate_to: localhost
- become: false
- run_once: true
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
-
-- name: Check if snapshot was created
- become: true
- become_method: sudo
- ansible.builtin.stat:
- path: /root/monitoring/folio_migration_stats_snapshot.txt
- register: folio_migration_snapshot_file
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
-
-- name: Copy folio migration stats snapshot to localhost
- become: true
- become_method: sudo
- ansible.builtin.fetch:
- src: /root/monitoring/folio_migration_stats_snapshot.txt
- dest: "{{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats_interim.txt"
- flat: true
- validate_checksum: false
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_snapshot_file.stat.exists|default(false)
-
-# Plots are generated on localhost, not fetched from targets
-
-- name: Display interim monitoring data collection summary
- ansible.builtin.debug:
- msg: |
- Interim folio migration monitoring data collected (monitoring still running).
- Data saved to: {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats_interim.txt
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - folio_migration_snapshot_file.stat.exists|default(false)
-
-# Generate plots on localhost from the collected data
-- name: Check if matplotlib is available on localhost
- ansible.builtin.command: python3 -c "import matplotlib.pyplot"
- delegate_to: localhost
- register: localhost_matplotlib_check
- ignore_errors: true
- changed_when: false
- failed_when: false
- run_once: true
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
-
-- name: Collect all monitoring data files
- ansible.builtin.find:
- delegate_to: localhost
- register: all_monitoring_files
- run_once: true
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - localhost_matplotlib_check.rc == 0
+ - enable_monitoring|default(false)|bool
-- name: Generate A/B comparison plots for each configuration
- ansible.builtin.command:
- delegate_to: localhost
- with_items: "{{ all_monitoring_files.files | map(attribute='path') | map('basename') | list }}"
- register: ab_plot_generation
- ignore_errors: true
- run_once: true
+# Import folio migration interim collection tasks
+- ansible.builtin.import_tasks: monitors/folio_migration/collect_only.yml
when:
- monitor_developmental_stats|default(false)|bool
- monitor_folio_migration|default(false)|bool
- - localhost_matplotlib_check.rc == 0
- - all_monitoring_files.files | length > 0
-- name: Generate comprehensive plot with all results
- ansible.builtin.command:
- delegate_to: localhost
- register: comprehensive_plot_generation
- ignore_errors: true
- run_once: true
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- - localhost_matplotlib_check.rc == 0
-
-- name: Log plot generation summary
+# Display comprehensive interim monitoring collection summary
+- name: Display interim monitoring collection summary
ansible.builtin.debug:
msg: |
- {% if localhost_matplotlib_check.rc != 0 %}
- Skipping plot generation - matplotlib not available on localhost
+ Interim monitoring data collection complete (monitoring still running).
+ Results available in: {{ monitoring_results_path }}
+ {% if monitor_developmental_stats|default(false)|bool and monitor_folio_migration|default(false)|bool %}
+ - Folio migration interim data collected
+ {% endif %}
+ {% if localhost_matplotlib_check is defined and localhost_matplotlib_check.rc is defined and localhost_matplotlib_check.rc == 0 %}
+ Plot generation status:
+ {% if folio_interim_plot_generation is defined and folio_interim_plot_generation.rc is defined and folio_interim_plot_generation.rc == 0 %}
+ - Folio migration interim plots generated
+ {% endif %}
{% else %}
- Plot generation complete:
- - A/B comparison plots generated for each configuration pair
- - Comprehensive plot generated: all_hosts_comprehensive.png
+ Plot generation skipped - matplotlib not available on localhost
{% endif %}
run_once: true
when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
-
-- name: Clean up snapshot files on target
- become: true
- become_method: sudo
- ansible.builtin.file:
- path: "{{ item }}"
- state: absent
- loop:
- - /root/monitoring/folio_migration_stats_snapshot.txt
- - /root/monitoring/folio_migration_plot_snapshot.png
- when:
- - monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
- ignore_errors: true
+ - enable_monitoring|default(false)|bool
diff --git a/playbooks/roles/monitoring/tasks/monitor_run.yml b/playbooks/roles/monitoring/tasks/monitor_run.yml
index a2055f89..9b1c056c 100644
--- a/playbooks/roles/monitoring/tasks/monitor_run.yml
+++ b/playbooks/roles/monitoring/tasks/monitor_run.yml
@@ -5,4 +5,4 @@
- ansible.builtin.import_tasks: monitors/folio_migration/run.yml
when:
- monitor_developmental_stats|default(false)|bool
- - monitor_folio_migration|default(false)|bool
\ No newline at end of file
+ - monitor_folio_migration|default(false)|bool
diff --git a/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect.yml b/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect.yml
index bd04ebe2..a0467bd1 100644
--- a/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect.yml
+++ b/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect.yml
@@ -144,4 +144,4 @@
{% else %}
Plot generated: {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_plot.png
{% endif %}
- when: folio_migration_data_file.stat.exists|default(false)
\ No newline at end of file
+ when: folio_migration_data_file.stat.exists|default(false)
diff --git a/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect_only.yml b/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect_only.yml
new file mode 100644
index 00000000..7696cc99
--- /dev/null
+++ b/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect_only.yml
@@ -0,0 +1,91 @@
+---
+# Folio migration interim data collection (without stopping monitoring)
+- name: Check if folio migration monitoring data exists
+ become: true
+ become_method: sudo
+ ansible.builtin.stat:
+ path: /root/monitoring/folio_migration_stats.txt
+ register: folio_migration_data_file
+ when:
+ - monitor_developmental_stats|default(false)|bool
+ - monitor_folio_migration|default(false)|bool
+
+- name: Create folio migration snapshot for interim collection
+ become: true
+ become_method: sudo
+ ansible.builtin.shell: |
+ cp /root/monitoring/folio_migration_stats.txt /root/monitoring/folio_migration_stats_snapshot.txt
+ when:
+ - monitor_developmental_stats|default(false)|bool
+ - monitor_folio_migration|default(false)|bool
+ - folio_migration_data_file.stat.exists|default(false)
+
+- name: Copy folio migration interim data to localhost
+ become: true
+ become_method: sudo
+ ansible.builtin.fetch:
+ src: /root/monitoring/folio_migration_stats_snapshot.txt
+ dest: "{{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats_interim.txt"
+ flat: true
+ validate_checksum: false
+ when:
+ - monitor_developmental_stats|default(false)|bool
+ - monitor_folio_migration|default(false)|bool
+ - folio_migration_data_file.stat.exists|default(false)
+
+- name: Clean up folio migration snapshot
+ become: true
+ become_method: sudo
+ ansible.builtin.file:
+ path: /root/monitoring/folio_migration_stats_snapshot.txt
+ state: absent
+ when:
+ - monitor_developmental_stats|default(false)|bool
+ - monitor_folio_migration|default(false)|bool
+ ignore_errors: true
+
+- name: Display folio migration interim collection status
+ ansible.builtin.debug:
+ msg: |
+ Folio migration interim data {% if folio_migration_data_file.stat.exists|default(false) %}collected{% else %}not available{% endif %}.
+ {% if folio_migration_data_file.stat.exists|default(false) %}
+ Data saved to: {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats_interim.txt
+ {% endif %}
+ when:
+ - monitor_developmental_stats|default(false)|bool
+ - monitor_folio_migration|default(false)|bool
+
+# Generate plots from interim data on localhost
+- name: Check if matplotlib is available on localhost
+ ansible.builtin.command: python3 -c "import matplotlib.pyplot"
+ delegate_to: localhost
+ register: localhost_matplotlib_check
+ ignore_errors: true
+ run_once: true
+ when:
+ - enable_monitoring|default(false)|bool
+
+- name: Find interim monitoring data files for plotting
+ ansible.builtin.find:
+ paths: "{{ monitoring_results_path }}"
+ patterns: "*_interim.txt"
+ delegate_to: localhost
+ register: interim_monitoring_files
+ run_once: true
+ when:
+ - enable_monitoring|default(false)|bool
+ - localhost_matplotlib_check.rc == 0
+
+- name: Generate folio migration interim plots on localhost
+ ansible.builtin.command: |
+ python3 {{ playbook_dir }}/roles/monitoring/files/plot_folio_migration_stats.py
+ -o {{ monitoring_results_path }}/interim_folio_migration_plot.png
+ {{ interim_monitoring_files.files | selectattr('path', 'match', '.*folio_migration.*') | map(attribute='path') | join(' ') }}
+ delegate_to: localhost
+ register: folio_interim_plot_generation
+ ignore_errors: true
+ run_once: true
+ when:
+ - enable_monitoring|default(false)|bool
+ - localhost_matplotlib_check.rc == 0
+ - interim_monitoring_files.files | selectattr('path', 'match', '.*folio_migration.*') | list | length > 0
diff --git a/playbooks/roles/monitoring/tasks/monitors/folio_migration/run.yml b/playbooks/roles/monitoring/tasks/monitors/folio_migration/run.yml
index 40ffc918..f38f54f1 100644
--- a/playbooks/roles/monitoring/tasks/monitors/folio_migration/run.yml
+++ b/playbooks/roles/monitoring/tasks/monitors/folio_migration/run.yml
@@ -65,4 +65,4 @@
msg: "{{ monitor_status.stdout }}"
when:
- folio_migration_stats_file.stat.exists|default(false)
- - monitor_status is defined
\ No newline at end of file
+ - monitor_status is defined
--
2.50.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 4/6] blktests: add monitor-results support for interim monitoring
2025-09-16 12:17 [PATCH 0/6] monitoring: restructure into modular architecture and extend workflow coverage Daniel Gomez
` (2 preceding siblings ...)
2025-09-16 12:17 ` [PATCH 3/6] monitoring: restructure monitor_collect_only.yml to use modular architecture Daniel Gomez
@ 2025-09-16 12:17 ` Daniel Gomez
2025-09-16 12:17 ` [PATCH 5/6] sysbench: add monitoring framework integration Daniel Gomez
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Daniel Gomez @ 2025-09-16 12:17 UTC (permalink / raw)
To: Luis Chamberlain; +Cc: kdevops, Daniel Gomez
From: Daniel Gomez <da.gomez@samsung.com>
Add monitor-results target to blktests workflow Makefile to support
interim monitoring data collection without stopping monitoring services.
This brings blktests in line with fstests workflow monitoring support.
The target uses the existing monitor-results.yml playbook with proper
extra_vars and host limiting support.
Generated-by: Claude AI
Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
workflows/blktests/Makefile | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/workflows/blktests/Makefile b/workflows/blktests/Makefile
index 6acb3a71..047aba3b 100644
--- a/workflows/blktests/Makefile
+++ b/workflows/blktests/Makefile
@@ -113,6 +113,12 @@ blktests-dev-results:
--extra-vars '{ kdevops_run_blktests: True }' \
--extra-vars=@./extra_vars.yaml $(LIMIT_HOSTS)
+monitor-results: $(KDEVOPS_EXTRA_VARS)
+ $(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+ playbooks/monitor-results.yml \
+ --extra-vars=@./extra_vars.yaml \
+ $(LIMIT_HOSTS)
+
blktests-help-menu:
@echo "blktests options:"
@echo "blktests - Git clones blktests, builds and install it"
@@ -122,6 +128,7 @@ blktests-help-menu:
@echo "blktests-dev-results - Only collect results for dev hosts"
@echo "blktests-baseline-skip-kdevops-update - Run blktests but skip updating kdevops"
@echo "blktests-baseline-run-oscheck-only - Only run oscheck"
+ @echo "monitor-results - Collect interim monitoring data without stopping monitoring"
@echo ""
HELP_TARGETS += blktests-help-menu
--
2.50.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 5/6] sysbench: add monitoring framework integration
2025-09-16 12:17 [PATCH 0/6] monitoring: restructure into modular architecture and extend workflow coverage Daniel Gomez
` (3 preceding siblings ...)
2025-09-16 12:17 ` [PATCH 4/6] blktests: add monitor-results support for interim monitoring Daniel Gomez
@ 2025-09-16 12:17 ` Daniel Gomez
2025-09-16 12:17 ` [PATCH 6/6] sysbench: add monitor-results support for interim monitoring Daniel Gomez
2025-09-16 22:40 ` [PATCH 0/6] monitoring: restructure into modular architecture and extend workflow coverage Luis Chamberlain
6 siblings, 0 replies; 8+ messages in thread
From: Daniel Gomez @ 2025-09-16 12:17 UTC (permalink / raw)
To: Luis Chamberlain; +Cc: kdevops, Daniel Gomez
From: Daniel Gomez <da.gomez@samsung.com>
Add monitoring support to sysbench workflow following fstests/blktests
pattern:
- Start monitoring before database tests, stop and collect data after
- Use import_tasks for proper variable scoping with modular structure
- Update documentation to include sysbench support
Enables system monitoring during database performance testing. Works
with the new modular monitoring architecture.
Generated-by: Claude AI
Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
docs/monitoring.md | 1 +
playbooks/roles/monitoring/tasks/common/setup.yml | 1 +
playbooks/roles/sysbench/tasks/main.yaml | 12 ++++++++++++
3 files changed, 14 insertions(+)
diff --git a/docs/monitoring.md b/docs/monitoring.md
index 1e05bbd5..9eb10da8 100644
--- a/docs/monitoring.md
+++ b/docs/monitoring.md
@@ -50,6 +50,7 @@ make menuconfig
- **fstests**: Filesystem testing framework
- **blktests**: Block layer testing framework
+- **sysbench**: Database performance testing framework
### How Workflows Integrate Monitoring
diff --git a/playbooks/roles/monitoring/tasks/common/setup.yml b/playbooks/roles/monitoring/tasks/common/setup.yml
index 22a43a80..aaea0796 100644
--- a/playbooks/roles/monitoring/tasks/common/setup.yml
+++ b/playbooks/roles/monitoring/tasks/common/setup.yml
@@ -10,6 +10,7 @@
enable_monitoring: {{ enable_monitoring | default(false) }}
kdevops_run_fstests: {{ kdevops_run_fstests | default(false) }}
kdevops_run_blktests: {{ kdevops_run_blktests | default(false) }}
+ kdevops_workflow_enable_sysbench: {{ kdevops_workflow_enable_sysbench | default(false) }}
- name: Set workflow-appropriate monitoring results path
ansible.builtin.set_fact:
diff --git a/playbooks/roles/sysbench/tasks/main.yaml b/playbooks/roles/sysbench/tasks/main.yaml
index 77c57d6a..4ce75f49 100644
--- a/playbooks/roles/sysbench/tasks/main.yaml
+++ b/playbooks/roles/sysbench/tasks/main.yaml
@@ -30,6 +30,12 @@
name: create_data_partition
tags: ["mkfs"]
+# Start monitoring services before running tests
+- ansible.builtin.import_tasks: ../../monitoring/tasks/monitor_run.yml
+ when:
+ - enable_monitoring|default(false)|bool
+ tags: ["sysbench", "run_sysbench", "monitoring", "monitor_run"]
+
- name: MySQL Docker
ansible.builtin.import_tasks: mysql-docker/main.yaml
when: sysbench_type_mysql_docker | bool
@@ -37,3 +43,9 @@
- name: PostgreSQL Native
ansible.builtin.import_tasks: postgresql-native/main.yaml
when: sysbench_type_postgresql_native | bool
+
+# Stop monitoring services and collect data after running tests
+- ansible.builtin.import_tasks: ../../monitoring/tasks/monitor_collect.yml
+ when:
+ - enable_monitoring|default(false)|bool
+ tags: ["sysbench", "results", "monitoring", "monitor_collect"]
--
2.50.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 6/6] sysbench: add monitor-results support for interim monitoring
2025-09-16 12:17 [PATCH 0/6] monitoring: restructure into modular architecture and extend workflow coverage Daniel Gomez
` (4 preceding siblings ...)
2025-09-16 12:17 ` [PATCH 5/6] sysbench: add monitoring framework integration Daniel Gomez
@ 2025-09-16 12:17 ` Daniel Gomez
2025-09-16 22:40 ` [PATCH 0/6] monitoring: restructure into modular architecture and extend workflow coverage Luis Chamberlain
6 siblings, 0 replies; 8+ messages in thread
From: Daniel Gomez @ 2025-09-16 12:17 UTC (permalink / raw)
To: Luis Chamberlain; +Cc: kdevops, Daniel Gomez
From: Daniel Gomez <da.gomez@samsung.com>
Add monitor-results target to sysbench workflow following the same
pattern as blktests and fstests implementation.
This enables users to collect interim monitoring data during
long-running sysbench tests without stopping ongoing monitoring.
Generated-by: Claude AI
Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
workflows/sysbench/Makefile | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/workflows/sysbench/Makefile b/workflows/sysbench/Makefile
index 66e594d3..19321fba 100644
--- a/workflows/sysbench/Makefile
+++ b/workflows/sysbench/Makefile
@@ -1,4 +1,4 @@
-PHONY += sysbench sysbench-test sysbench-telemetry sysbench-help-menu
+PHONY += sysbench sysbench-test sysbench-telemetry sysbench-help-menu monitor-results
TAGS_SYSBENCH_RUN := db_start
@@ -58,6 +58,12 @@ sysbench-plot:
playbooks/sysbench.yml \
--tags vars,plot
+monitor-results: $(KDEVOPS_EXTRA_VARS)
+ $(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+ playbooks/monitor-results.yml \
+ --extra-vars=@./extra_vars.yaml \
+ $(LIMIT_HOSTS)
+
# Help target to show available options
sysbench-help-menu:
@echo "Sysbench options:"
@@ -66,6 +72,7 @@ sysbench-help-menu:
@echo "sysbench-telemetry - Gather sysbench telemetry data on each node"
@echo "sysbench-results - Collect all sysbench results onto local host"
@echo "sysbench-clean - Remove any previous results on node and host"
+ @echo "monitor-results - Collect interim monitoring data without stopping monitoring"
@echo ""
HELP_TARGETS += sysbench-help-menu
--
2.50.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH 0/6] monitoring: restructure into modular architecture and extend workflow coverage
2025-09-16 12:17 [PATCH 0/6] monitoring: restructure into modular architecture and extend workflow coverage Daniel Gomez
` (5 preceding siblings ...)
2025-09-16 12:17 ` [PATCH 6/6] sysbench: add monitor-results support for interim monitoring Daniel Gomez
@ 2025-09-16 22:40 ` Luis Chamberlain
6 siblings, 0 replies; 8+ messages in thread
From: Luis Chamberlain @ 2025-09-16 22:40 UTC (permalink / raw)
To: Daniel Gomez; +Cc: kdevops, Daniel Gomez
On Tue, Sep 16, 2025 at 02:17:16PM +0200, Daniel Gomez wrote:
> This patch series restructures kdevops monitoring from a monolithic
> architecture into a modular, extensible framework, similar to the recent
> work done in other playbooks such as bootlinux or guestfs. Also, expand
> workflow coverage to include blktests and sysbench support.
>
> The modular design allows to have dedicated monitor Ansible code which
> makes it easier to maintain in the long run. Use the top level role
> files as orchestrators for the individual monitors.
>
> Note: I have a new monitor built on top of this refactor using the
> same pattern. However, I realized that we can make it even easier if
> we switch to systemd services. We get journal support as well as proper
> service lifecycle management, etc. I think, this would simplify the
> implementations significantly and provide more robust monitoring
> infrastructure for production environments.
>
> I'm not planning to send a conversion yet but I figured I'd mentioned it
> for discussion and future possible work path.
>
> Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
Applied and pushed, thanks!
Luis
^ permalink raw reply [flat|nested] 8+ messages in thread