Using Postgres Workload Report
==============================

Prerequisites
-------------

Postgres Workload Report can only provide reports for Postgres servers
where the ``edb_wait_states`` extension, version 1.2 or later, is
loaded. Furthermore, PWR can only provide query wait reports for
intervals of time when the ``edb_wait_states`` extension was loaded on
the server.

For more information, see `edb_wait_states <https://www.enterprisedb.com/docs/pg_extensions/wait_states/>`_  .

Source information for reports
------------------------------

After the ``edb-pwr`` and ``edb-lasso`` packages are installed on the
machine, and the server has been running with the ``edb_wait_states``
extension loaded for a long enough period of time, you can use Postgres
Workload Report to extract reports of wait states for the queries that
were running during the interval of time specified.

Alternatively, Postgres Workload Report can generate reports from an
existing Lasso report, assuming the report was executed on a server with
``edb_wait_states`` loaded. For this reason Postgres Workload Report has
a mandatory first argument, which can be either of the following two:

-  ``execute``

-  ``report``

The ``execute`` argument performs end-to-end execution, calling
``lasso`` with appropriate options and using the generated tarball
report as the input to generate an HTML, Markdown, DOCX, or PDF report.

The ``report`` argument uses the directory for stored ``lasso`` report
contents as input for processing and generating the wait states report.
To use the ``report`` argument, a decompressed and untarred ``lasso``
report must already exist.

Example for the ``execute`` option
----------------------------------

For this example we want to generate a report on query waits for the
Postgres server ``myserver`` for the interval between January 10th at
9:00 and January 10th at 13:00. An incident happened around that time
which must be investigated to provide a root cause. The main database on
the server where ``edb_wait_states`` is installed is ``my-oltp`` .

To get such a report in HTML format we would use the following command:

.. code:: shell

   pwr execute --host-name myserver --sampling-start 2024-01-10 09:00+00 \
       --sampling-end 2024-01-10 13:00+00 --html \
       --report-name Jan10_incident my-oltp postgres 

We can run ``pwr execute -h`` to get the full output of options
available.

Example for the ``report`` option
---------------------------------

In some cases you may already have a Lasso report and would like PWR to
use the Lasso report as the source and build a report based on it. For
these cases, the ``pwr report`` option is useful.

For this example we can use the same scenario already described but we
use a Lasso report that has already been executed using the time
boundaries shared above. Let’s suppose that the Lasso report’s name is
``edb-lasso-Jan10-incident.tar.bz2`` and it is located in the home
directory of the machine where ``pwr report`` will be executed.

The following command executions generate an HTML report saved in
``~/pwr_output/Jan10_incident.html`` :

.. code:: shell

   cd ~/
   mkdir -p pwr_tmp/
   tar jxf ../edb-lasso-Jan10-incident.tar.bz2 -C ~/pwr_tmp/ --strip-components=1
   pwr report \
       --input-dir ~/pwr_tmp/postgresql/dbs/my-oltp/edb_wait_states/ \
       --html --output-dir ~/pwr_output/ --report-name Jan10_incident

We can run ``pwr report -h`` to get the full output for the options
available.
