- hosts: controller
  vars:
    osprofiler_traces_dir: '/opt/stack/osprofiler-traces'
  tasks:
    - name: Create directory for traces
      become: True
      become_user: stack
      file:
        path: '{{ osprofiler_traces_dir }}'
        state: directory
        owner: stack
        group: stack

    - name: Read connection string from a file
      command: "cat /opt/stack/.osprofiler_connection_string"
      register: osprofiler_connection_string

    - debug:
        msg: "OSProfiler connection string is: {{ osprofiler_connection_string.stdout }}"

    - name: Get list of traces
      command: "osprofiler trace list --connection-string {{ osprofiler_connection_string.stdout }}"
      become: True
      become_user: stack
      register: osprofiler_trace_list

    - debug:
        msg: "{{ osprofiler_trace_list }}"

    - name: Save traces to files
      shell: |
        osprofiler trace list --connection-string {{ osprofiler_connection_string.stdout }} > {{ osprofiler_traces_dir }}/trace_list.txt
        cat {{ osprofiler_traces_dir }}/trace_list.txt | tail -n +4 | head -n -1 | awk '{print $2}' > {{ osprofiler_traces_dir }}/trace_ids.txt

        while read p; do
          osprofiler trace show --connection-string {{ osprofiler_connection_string.stdout }} --html $p > {{ osprofiler_traces_dir }}/trace-$p.html
        done < {{ osprofiler_traces_dir }}/trace_ids.txt
      become: True
      become_user: stack

    - name: Gzip trace files
      become: yes
      become_user: stack
      shell: "gzip * -9 -q | true"
      args:
        chdir: '{{ osprofiler_traces_dir }}'

    - name: Sync trace files to Zuul
      become: yes
      synchronize:
        src: "{{ osprofiler_traces_dir }}"
        dest: "{{ zuul.executor.log_root }}"
        mode: pull
        copy_links: true
        verify_host: true
        rsync_opts:
          - "--include=/**"
          - "--include=*/"
