[PATCH 3/6] monitoring: restructure monitor_collect_only.yml to use modular architecture

Daniel Gomez <[email protected]>
Newsgroups dev.linux.lists.kdevops
Message-ID <[email protected]>
From: Daniel Gomez <[email protected]>

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 <[email protected]>
---
 .../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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.