check-patroni/docs/make_readme.sh
benoit d99faeba15 Add tests for the output of the script and support pre/post 3.0.4
* Change all replica status from `running` to `streaming`
* Add an option to pytest to change the state back to `running`
* Also tests the output of the script
* Add a quick test script for live clusters
2023-08-23 10:53:09 +02:00

166 lines
4.4 KiB
Bash
Executable file

#!/bin/bash
if ! command -v check_patroni &>/dev/null; then
echo "check_partroni must be installed to generate the documentation"
exit 1
fi
top_srcdir="$(readlink -m "$0/../..")"
README="${top_srcdir}/README.md"
function readme(){
echo "$1" >> $README
}
function helpme(){
readme
readme '```'
check_patroni $1 --help >> $README
readme '```'
readme
}
cat << '_EOF_' > $README
# check_patroni
A nagios plugin for patroni.
## Features
- Check presence of leader, replicas, node counts.
- Check each node for replication status.
_EOF_
helpme
cat << '_EOF_' >> $README
## Install
check_patroni is licensed under PostgreSQL license.
```
$ pip install git+https://github.com/dalibo/check_patroni.git
```
Links:
* [pip & centos 7](https://linuxize.com/post/how-to-install-pip-on-centos-7/)
* [pip & debian10](https://linuxize.com/post/how-to-install-pip-on-debian-10/)
## Support
If you hit a bug or need help, open a [GitHub
issue](https://github.com/dalibo/check_patroni/issues/new). Dalibo has no
commitment on response time for public free support. Thanks for you
contribution !
## Config file
All global and service specific parameters can be specified via a config file has follows:
```
[options]
endpoints = https://10.20.199.3:8008, https://10.20.199.4:8008,https://10.20.199.5:8008
cert_file = ./ssl/my-cert.pem
key_file = ./ssl/my-key.pem
ca_file = ./ssl/CA-cert.pem
timeout = 0
[options.node_is_replica]
lag=100
```
## Thresholds
The format for the threshold parameters is `[@][start:][end]`.
* `start:` may be omitted if `start == 0`
* `~:` means that start is negative infinity
* If `end` is omitted, infinity is assumed
* To invert the match condition, prefix the range expression with `@`.
A match is found when: `start <= VALUE <= end`.
For example, the following command will raise:
* a warning if there is less than 1 nodes, wich can be translated to outside of range [2;+INF[
* a critical if there are no nodes, wich can be translated to outside of range [1;+INF[
```
check_patroni -e https://10.20.199.3:8008 cluster_has_replica --warning 2: --critical 1:
```
## SSL
Several options are available:
* the server's CA certificate is not available or trusted by the client system:
* `--ca_cert`: your certification chain `cat CA-certificate server-certificate > cabundle`
* you have a client certificate for authenticating with Patroni's REST API:
* `--cert_file`: your certificate or the concatenation of your certificate and private key
* `--key_file`: your private key (optional)
## Tests
The tests are located in `./tests`. For ease of coding, they are mocked. The
json files are in `./tests/json`. There is an evident drawback, if the json is
wrong or modifications have been made in patroni but not reported here: the
tests still work fine.
To run the tests:
1) download check_patroni, create a virtual env and install the script:
```bash
git clone https://github.com/dalibo/check_patroni.git
cd check_patroni
python -m venv .venv
. .venv/bin/activate
pip install -e check_patroni[test]
```
2) run the tests
```bash
pytest ./tests # nominal replica state is streaming (since v3.0.4)
pytest --use-old-replica-state ./tests # nominal replica state is running
```
Note: for any service that checks the state of a node in the `cluster` endpoint,
the json test file must be added in `./test/tools.py`.
A bash script is provided to perform all tests on a patroni endpoint
(`./vagrant/check_patroni.sh`), it takes one parameter: the endpoint
we give to the `-e/--endpoints` of check_patroni. Nothing fancy, it's
just a list of all service calls in a bash script.
```bash
./vagrant/check_patroni.sh http://10.20.30.51:8008
```
_EOF_
readme
readme "## Cluster services"
readme
readme "### cluster_config_has_changed"
helpme cluster_config_has_changed
readme "### cluster_has_leader"
helpme cluster_has_leader
readme "### cluster_has_replica"
helpme cluster_has_replica
readme "### cluster_is_in_maintenance"
helpme cluster_is_in_maintenance
readme "### cluster_node_count"
helpme cluster_node_count
readme "## Node services"
readme
readme "### node_is_alive"
helpme node_is_alive
readme "### node_is_pending_restart"
helpme node_is_pending_restart
readme "### node_is_primary"
helpme node_is_primary
readme "### node_is_replica"
helpme node_is_replica
readme "### node_patroni_version"
helpme node_patroni_version
readme "### node_tl_has_changed"
helpme node_tl_has_changed
cat << _EOF_ >> $README
_EOF_