The purpose of this document is to list all of the notable changes to this project. The format was inspired by Keep a Changelog. This project adheres to semantic versioning.
- Release 2.2 (2020-02-29)
- Release 2.1 (2020-02-27)
- Release 2.0 (2020-02-26)
- Release 1.2 (2019-03-28)
- Release 1.1 (2017-03-06)
- Release 1.0 (2017-02-15)
- Release 0.6 (2016-05-27)
- Release 0.5 (2016-05-27)
- Release 0.4 (2016-05-27)
- Release 0.3 (2016-05-27)
- Release 0.2 (2015-10-04)
- Release 0.1.1 (2015-09-27)
- Release 0.1 (2015-09-26)
Release 2.2 (2020-02-29)
- Make the command line interface compatible with the
python -m apache_manager …command. - Added :ref:`Zabbix integration for apache-manager` to the online documentation.
Release 2.1 (2020-02-27)
This release changes how logging is done:
- When workers are killed this is now logged at the custom level
NOTICEwhere previously the levelINFOwas used (NOTICEsits betweenINFOandWARNING). The custom log level is implemented by :pypi:`verboselogs`. - System logging has been reduced so that only killed workers, warnings and
errors are logged. This is because when
apache-manageris 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.0 (2020-02-26)
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 interaction:
- 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` property).
- 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 1.2 (2019-03-28)
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:
$ curl -s http://localhost/server-status?auto | grep -i uptime Uptime: 96606
On Ubuntu 18.04:
$ 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 (
MANIFEST.in).Changed Sphinx documentation theme (to the 'nature' theme).
Added license=MIT to
setup.pyscript.
Release 1.1 (2017-03-06)
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 reliable.
Made worker kill tests compatible with Ubuntu 16.04 (Apache 2.4).
Release 1.0 (2017-02-15)
Refactor
WorkerStatusclass 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.compatmodule.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 0.6 (2016-05-27)
Make it easy to silence apache-manager in cron jobs.
Release 0.5 (2016-05-27)
Enable Zabbix low level discovery of WSGI process groups.
Release 0.4 (2016-05-27)
Expose Apache worker memory usage in data file.
Release 0.3 (2016-05-27)
Properly parse Listen directives in /etc/apache2/ports.conf (not so
much a bug fix but definitely a quality boost).
Release 0.2 (2015-10-04)
Internal refactoring: Switch from :pypi:`cached-property` to :pypi:`property-manager`.
Release 0.1.1 (2015-09-27)
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 (2015-09-26)
Initial commit and release based on several years of experience monitoring Apache web servers at large.