Changelogs » Apache-manager

PyUp Safety actively tracks 232,000 Python packages for vulnerabilities and notifies you when to upgrade.



  - Make the command line interface compatible with the ``python -m
  apache_manager …`` command.
  - Added :ref:`Zabbix integration for apache-manager` to the online
  .. _Release 2.2:


  This release changes how logging is done:
  - When workers are killed this is now logged at the custom level ``NOTICE``
  where previously the level ``INFO`` was used (``NOTICE`` sits between
  ``INFO`` and ``WARNING``). The custom log level is implemented by
  - System logging has been reduced so that only killed workers, warnings and
  errors are logged. This is because when ``apache-manager`` is being run from
  a high frequency cron job it shouldn't spam the system logs.
  Additionally some changes were made to the test suite:
  - Use proper skipping so that :pypi:`pytest` is aware of skipped tests.
  - Use :pypi:`pytest-rerunfailures` to automate high level retrying of failed
  tests (duct taping away flaky tests). I'd love to make the test suite more
  robust in the near future but lack the time to do so now.
  .. _Release 2.1:


  **Backwards incompatible changes:**
  - Drop support for Python 2.6 and 3.4, start testing on Python 3.8.
  - Explicit command line options are now required to enable metrics collection
  and killing of workers. This was prompted by the following awkward
  - The command line interface was initially designed such that killing of
  workers was enabled when thresholds were given as command line options.
  - Since then support for configuration files was added, and given the
  presence of a configuration file thresholds would always be set so
  killing would happen implicitly and unconditionally.
  To solve these `explicit is better than implicit`_ contradictions all in one
  go I decided to make a backwards incompatible change to the command line
  interface, where both of the actions described above now need to be requested
  using command line options.
  - Parsing of sizes now uses binary multiples of bytes (base-2) for ambiguous
  unit symbols and names whereas previously decimal multiples of bytes
  (base-10) were used.
  - The custom initializer on the main :class:`~apache_manager.ApacheManager`
  class was removed because it was a historical artefact whose significance was
  lost in time.
  **Other significant changes:**
  - Make the :attr:`~apache_manager.ApacheManager.hanging_worker_threshold`
  option configurable.
  - Add support for configuration files to configure killing of workers (for
  details see the :attr:`~apache_manager.ApacheManager.config_loader`
  - Expose native and foreign worker count in data file to enable monitoring that
  detects configuration issues (like the native worker count being lower than
  the foreign worker count, causing the native workers to become saturated).
  **Miscellaneous changes:**
  - Document that Linux is required (`2`_).
  - Improve string representation of WSGI workers.
  - Use Python 3 for local development in ``Makefile``.
  .. _Release 2.0:
  .. _explicit is better than implicit:
  .. _2:


  - Added Python 3.6 and 3.7 to test suite and documented support for them (based
  on the fact that the test suite passes).
  - Bug fix to improve compatibility with newer Apache versions:
  In Ubuntu 18.04 the plain text server status page response contains multiple
  uptime entries and because the regular expressions used by apache-manager
  weren't anchored to the start of the line, this new status page contents
  confused apache-manager.
  On Ubuntu 14.04:
  .. code-block:: console
  $ curl -s http://localhost/server-status?auto | grep -i uptime
  Uptime: 96606
  On Ubuntu 18.04:
  .. code-block:: console
  $ curl -s http://localhost/server-status?auto | grep -i uptime
  ServerUptimeSeconds: 5163
  ServerUptime: 1 hour 26 minutes 3 seconds
  Uptime: 5163
  - Include documentation in source distributions (````).
  - Changed Sphinx documentation theme (to the 'nature' theme).
  - Added license=MIT to ```` script.
  .. _Release 1.2:


  - Added hanging worker detection based on hard coded five minute threshold (to
  be made configurable in a future release).
  - Made ``test_refresh()`` compatible with Ubuntu 16.04:
  I've just upgraded my personal and work laptops to Ubuntu 16.04 and noticed
  that several tests have started failing. Most noticeably the server uptime
  reported on the status page is no longer updated consistently. I'm changing
  this test to check a different status page item which should be more
  - Made worker kill tests compatible with Ubuntu 16.04 (Apache 2.4).
  .. _Release 1.1:


  - Refactor ``WorkerStatus`` class to properly use :pypi:`property-manager`.
  Strictly speaking this change set breaks backwards compatibility, however 99%
  percent of the functionality is the same, I've mostly just changed a whole
  lot of undocumented implementation details. Nevertheless I'm bumping the
  major version number because "explicit is better than implicit".
  - Use :pypi:`six` instead of homegrown ``apache_manager.compat`` module.
  Six was already included in the transitive requirements via :pypi:`executor`
  so there was really no point in not using it 🙂.
  - Refactor makefile & setup script (checkers, docs, wheels, twine, etc).
  - Improve test coverage of port discovery
  .. _Release 1.0:


  Make it easy to silence apache-manager in cron jobs.
  .. _Release 0.6:


  Enable Zabbix low level discovery of WSGI process groups.
  .. _Release 0.5:


  Expose Apache worker memory usage in data file.
  .. _Release 0.4:


  Properly parse ``Listen`` directives in ``/etc/apache2/ports.conf`` (not so
  much a bug fix but definitely a quality boost).
  .. _Release 0.3:


  Internal refactoring: Switch from :pypi:`cached-property` to :pypi:`property-manager`.
  .. _Release 0.2:


  Bug fix: Explicitly specify BeautifulSoup parser.
  This avoids BeautifulSoup from emitting the following warning:
  "No parser was explicitly specified, so I'm using the best available HTML
  parser for this system ("html.parser"). This usually isn't a problem, but if
  you run this code on another system, or in a different virtual environment, it
  may use a different parser and behave differently."
  About the choice for ``html.parser``: This is the only parser built into the
  Python standard library and it seems to work fine for Apache status pages
  (which makes sense because these pages don't contain arbitrary invalid HTML,
  they are fairly well formed and simple) so I don't see any point in pulling in
  another external dependency.
  .. _Release 0.1.1: