mirror of
https://github.com/rvalitov/zabbix-php-fpm.git
synced 2023-11-05 03:30:27 +01:00
Merge branch 'master' into feature/timeout
This commit is contained in:
commit
cd320cc5cf
48
.travis.yml
48
.travis.yml
@ -3,6 +3,54 @@ language: bash
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
include:
|
include:
|
||||||
|
- os: linux
|
||||||
|
dist: trusty
|
||||||
|
name: "Zabbix 4.0 @ Ubuntu 14 trusty, PHP default"
|
||||||
|
arch: amd64
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- sourceline: 'deb http://repo.zabbix.com/zabbix/4.0/ubuntu trusty main'
|
||||||
|
key_url: "https://repo.zabbix.com/zabbix-official-repo.key"
|
||||||
|
packages:
|
||||||
|
- ca-certificates
|
||||||
|
- curl
|
||||||
|
- grep
|
||||||
|
- sed
|
||||||
|
- gawk
|
||||||
|
- lsof
|
||||||
|
- jq
|
||||||
|
- libfcgi0ldbl
|
||||||
|
- unzip
|
||||||
|
- zabbix-agent
|
||||||
|
- zabbix-get
|
||||||
|
- php5-fpm
|
||||||
|
before_script:
|
||||||
|
- sudo curl -o /usr/local/bin/shunit2 https://raw.githubusercontent.com/kward/shunit2/master/shunit2
|
||||||
|
- os: linux
|
||||||
|
dist: xenial
|
||||||
|
name: "Zabbix 4.0 @ Ubuntu 16 xenial, PHP default"
|
||||||
|
arch: amd64
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- sourceline: 'deb http://repo.zabbix.com/zabbix/4.0/ubuntu xenial main'
|
||||||
|
key_url: "https://repo.zabbix.com/zabbix-official-repo.key"
|
||||||
|
packages:
|
||||||
|
- ca-certificates
|
||||||
|
- curl
|
||||||
|
- grep
|
||||||
|
- sed
|
||||||
|
- gawk
|
||||||
|
- lsof
|
||||||
|
- jq
|
||||||
|
- libfcgi0ldbl
|
||||||
|
- unzip
|
||||||
|
- zabbix-agent
|
||||||
|
- zabbix-get
|
||||||
|
- php-fpm
|
||||||
|
before_script:
|
||||||
|
- sudo curl -o /usr/local/bin/shunit2 https://raw.githubusercontent.com/kward/shunit2/master/shunit2
|
||||||
- os: linux
|
- os: linux
|
||||||
dist: bionic
|
dist: bionic
|
||||||
name: "Missing packages test"
|
name: "Missing packages test"
|
||||||
|
31
README.md
31
README.md
@ -123,14 +123,25 @@ Please refer to [Wiki](https://github.com/rvalitov/zabbix-php-fpm/wiki/Installat
|
|||||||
Please refer to [Wiki](https://github.com/rvalitov/zabbix-php-fpm/wiki/Testing-and-Troubleshooting).
|
Please refer to [Wiki](https://github.com/rvalitov/zabbix-php-fpm/wiki/Testing-and-Troubleshooting).
|
||||||
|
|
||||||
# Compatibility
|
# Compatibility
|
||||||
Should work with any version of PHP-FPM (starting with PHP 5.3.3), Zabbix 4.0.x and later.
|
|
||||||
Can work with any version of ISPConfig as long as you have a valid PHP-FPM status page configuration there.
|
|
||||||
|
|
||||||
Tested with:
|
### System requirements
|
||||||
- [Travis CI](https://travis-ci.com/rvalitov/zabbix-php-fpm)
|
|
||||||
- PHP 7.4, 7.3, 7.2, 7.1, 7.0
|
- **PHP**. Should work with any version of PHP-FPM (starting with PHP 5.3.3)
|
||||||
- Zabbix 5.0.1, 4.4.4, 4.2.5, 4.0.20, 4.0.16, 4.0.4
|
- **Zabbix** 4.0.x and later.
|
||||||
- Debian 10, 9
|
- **ISPConfig**. Can work with any version of ISPConfig as long as you have a valid PHP-FPM status page configuration there.
|
||||||
- Ubuntu 18
|
- Minimal `bash` version 4.
|
||||||
- CentOS 7
|
- **OS**
|
||||||
- ISPConfig v.3.1.14p2
|
- **Debian** 8 Jessie or newer
|
||||||
|
- **Ubuntu** 20 Focal, 18 Bionic, 16 Xenial, 14 Trusty. Other versions are supported if they are present in the [Zabbix repository](http://repo.zabbix.com/zabbix/4.0/ubuntu/dists/).
|
||||||
|
- **CentOS** 6 or newer
|
||||||
|
- **RHEL** 5 or newer
|
||||||
|
|
||||||
|
### Tested with:
|
||||||
|
|
||||||
|
- [**Travis CI**](https://travis-ci.com/rvalitov/zabbix-php-fpm)
|
||||||
|
- **PHP** 7.4, 7.3, 7.2, 7.1, 7.0
|
||||||
|
- **Zabbix** 5.0.1, 4.4.4, 4.2.5, 4.0.20, 4.0.16, 4.0.4
|
||||||
|
- **Debian** 10, 9
|
||||||
|
- **Ubuntu** 18 Bionic, 16 Xenial, 14 Trusty
|
||||||
|
- **CentOS** 7
|
||||||
|
- **ISPConfig** v.3.1.14p2
|
||||||
|
108
tests/all.sh
108
tests/all.sh
@ -30,13 +30,53 @@ function AddSleepToConfig() {
|
|||||||
sleep 2
|
sleep 2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getPHPVersion() {
|
||||||
|
TEST_STRING=$1
|
||||||
|
PHP_VERSION=$(echo "$TEST_STRING" | grep -oP "(\d\.\d)")
|
||||||
|
if [[ -z "$PHP_VERSION" ]]; then
|
||||||
|
PHP_VERSION=$(echo "$TEST_STRING" | grep -oP "php(\d)" | grep -oP "(\d)")
|
||||||
|
fi
|
||||||
|
echo "$PHP_VERSION"
|
||||||
|
}
|
||||||
|
|
||||||
|
function getEtcPHPDirectory() {
|
||||||
|
LIST_OF_DIRS=(
|
||||||
|
"/etc/php/"
|
||||||
|
"/etc/php5/"
|
||||||
|
)
|
||||||
|
for PHP_TEST_DIR in "${LIST_OF_DIRS[@]}"; do
|
||||||
|
if [[ -d "$PHP_TEST_DIR" ]]; then
|
||||||
|
echo "$PHP_TEST_DIR"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRunPHPDirectory() {
|
||||||
|
LIST_OF_DIRS=(
|
||||||
|
"/run/"
|
||||||
|
"/var/run/"
|
||||||
|
)
|
||||||
|
for PHP_TEST_DIR in "${LIST_OF_DIRS[@]}"; do
|
||||||
|
RESULT_DIR=$(find "$PHP_TEST_DIR" -name 'php*-fpm.sock' -type s -exec dirname {} \; 2>/dev/null | sort | head -n1)
|
||||||
|
if [[ -d "$RESULT_DIR" ]]; then
|
||||||
|
echo "$RESULT_DIR"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
copyPool() {
|
copyPool() {
|
||||||
ORIGINAL_FILE=$1
|
ORIGINAL_FILE=$1
|
||||||
POOL_NAME=$2
|
POOL_NAME=$2
|
||||||
POOL_SOCKET=$3
|
POOL_SOCKET=$3
|
||||||
POOL_TYPE=$4
|
POOL_TYPE=$4
|
||||||
POOL_DIR=$(dirname "${ORIGINAL_FILE}")
|
POOL_DIR=$(dirname "${ORIGINAL_FILE}")
|
||||||
PHP_VERSION=$(echo "$POOL_DIR" | grep -oP "(\d\.\d)")
|
PHP_VERSION=$(getPHPVersion "$POOL_DIR")
|
||||||
|
|
||||||
NEW_POOL_FILE="$POOL_DIR/${POOL_NAME}.conf"
|
NEW_POOL_FILE="$POOL_DIR/${POOL_NAME}.conf"
|
||||||
sudo cp "$ORIGINAL_FILE" "$NEW_POOL_FILE"
|
sudo cp "$ORIGINAL_FILE" "$NEW_POOL_FILE"
|
||||||
@ -58,15 +98,19 @@ copyPool() {
|
|||||||
setupPool() {
|
setupPool() {
|
||||||
POOL_FILE=$1
|
POOL_FILE=$1
|
||||||
POOL_DIR=$(dirname "${POOL_FILE}")
|
POOL_DIR=$(dirname "${POOL_FILE}")
|
||||||
PHP_VERSION=$(echo "$POOL_DIR" | grep -oP "(\d\.\d)")
|
PHP_VERSION=$(getPHPVersion "$POOL_DIR")
|
||||||
|
|
||||||
|
PHP_RUN_DIR=$(getRunPHPDirectory)
|
||||||
|
EXIT_CODE=$?
|
||||||
|
assertEquals "Failed to find PHP run directory" "0" "$EXIT_CODE"
|
||||||
|
|
||||||
#Delete all active pools except www.conf:
|
#Delete all active pools except www.conf:
|
||||||
sudo find "$POOL_DIR" -name '*.conf' -type f -not -name 'www.conf' -exec rm -rf {} \;
|
sudo find "$POOL_DIR" -name '*.conf' -type f -not -name 'www.conf' -exec rm -rf {} \;
|
||||||
|
|
||||||
#Create new socket pools
|
#Create new socket pools
|
||||||
for ((c = 1; c <= MAX_POOLS; c++)); do
|
for ((c = 1; c <= MAX_POOLS; c++)); do
|
||||||
POOL_NAME="static$c"
|
POOL_NAME="socket$c"
|
||||||
POOL_SOCKET="/run/php/php${PHP_VERSION}-fpm-${POOL_NAME}.sock"
|
POOL_SOCKET="${PHP_RUN_DIR}php${PHP_VERSION}-fpm-${POOL_NAME}.sock"
|
||||||
copyPool "$POOL_FILE" "$POOL_NAME" "$POOL_SOCKET" "static"
|
copyPool "$POOL_FILE" "$POOL_NAME" "$POOL_SOCKET" "static"
|
||||||
if [[ -z $TEST_SOCKET ]]; then
|
if [[ -z $TEST_SOCKET ]]; then
|
||||||
TEST_SOCKET="$POOL_SOCKET"
|
TEST_SOCKET="$POOL_SOCKET"
|
||||||
@ -116,13 +160,16 @@ setupPool() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setupPools() {
|
setupPools() {
|
||||||
PHP_LIST=$(sudo find /etc/php/ -name 'www.conf' -type f)
|
PHP_DIR=$(getEtcPHPDirectory)
|
||||||
|
EXIT_CODE=$?
|
||||||
|
assertEquals "Failed to find PHP directory" "0" "$EXIT_CODE"
|
||||||
|
PHP_LIST=$(sudo find "$PHP_DIR" -name 'www.conf' -type f)
|
||||||
|
|
||||||
#First we need to stop all PHP-FPM
|
#First we need to stop all PHP-FPM
|
||||||
while IFS= read -r pool; do
|
while IFS= read -r pool; do
|
||||||
if [[ -n $pool ]]; then
|
if [[ -n $pool ]]; then
|
||||||
POOL_DIR=$(dirname "$pool")
|
POOL_DIR=$(dirname "$pool")
|
||||||
PHP_VERSION=$(echo "$POOL_DIR" | grep -oP "(\d\.\d)")
|
PHP_VERSION=$(getPHPVersion "$POOL_DIR")
|
||||||
sudo service "php${PHP_VERSION}-fpm" stop
|
sudo service "php${PHP_VERSION}-fpm" stop
|
||||||
fi
|
fi
|
||||||
done <<<"$PHP_LIST"
|
done <<<"$PHP_LIST"
|
||||||
@ -136,30 +183,42 @@ setupPools() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getNumberOfPHPVersions() {
|
getNumberOfPHPVersions() {
|
||||||
PHP_COUNT=$(sudo find /etc/php/ -name 'www.conf' -type f | wc -l)
|
PHP_DIR=$(getEtcPHPDirectory)
|
||||||
|
EXIT_CODE=$?
|
||||||
|
assertEquals "Failed to find PHP directory" "0" "$EXIT_CODE"
|
||||||
|
|
||||||
|
PHP_COUNT=$(find "$PHP_DIR" -name 'www.conf' -type f | wc -l)
|
||||||
echo "$PHP_COUNT"
|
echo "$PHP_COUNT"
|
||||||
}
|
}
|
||||||
|
|
||||||
function startOndemandPoolsCache() {
|
function startOndemandPoolsCache() {
|
||||||
|
PHP_DIR=$(getEtcPHPDirectory)
|
||||||
|
EXIT_CODE=$?
|
||||||
|
assertEquals "Failed to find PHP directory" "0" "$EXIT_CODE"
|
||||||
|
|
||||||
|
PHP_RUN_DIR=$(getRunPHPDirectory)
|
||||||
|
EXIT_CODE=$?
|
||||||
|
assertEquals "Failed to find PHP run directory" "0" "$EXIT_CODE"
|
||||||
|
|
||||||
# We must start all the pools
|
# We must start all the pools
|
||||||
POOL_URL="/php-fpm-status"
|
POOL_URL="/php-fpm-status"
|
||||||
|
|
||||||
PHP_LIST=$(sudo find /etc/php/ -name 'www.conf' -type f)
|
PHP_LIST=$(sudo find "$PHP_DIR" -name 'www.conf' -type f)
|
||||||
while IFS= read -r pool; do
|
while IFS= read -r pool; do
|
||||||
if [[ -n $pool ]]; then
|
if [[ -n $pool ]]; then
|
||||||
POOL_DIR=$(dirname "$pool")
|
POOL_DIR=$(dirname "$pool")
|
||||||
PHP_VERSION=$(echo "$POOL_DIR" | grep -oP "(\d\.\d)")
|
PHP_VERSION=$(getPHPVersion "$POOL_DIR")
|
||||||
|
|
||||||
for ((c = 1; c <= MAX_POOLS; c++)); do
|
for ((c = 1; c <= MAX_POOLS; c++)); do
|
||||||
POOL_NAME="ondemand$c"
|
POOL_NAME="ondemand$c"
|
||||||
POOL_SOCKET="/run/php/php${PHP_VERSION}-fpm-${POOL_NAME}.sock"
|
POOL_SOCKET="${PHP_RUN_DIR}php${PHP_VERSION}-fpm-${POOL_NAME}.sock"
|
||||||
|
|
||||||
PHP_STATUS=$(
|
PHP_STATUS=$(
|
||||||
SCRIPT_NAME=$POOL_URL \
|
SCRIPT_NAME=$POOL_URL \
|
||||||
SCRIPT_FILENAME=$POOL_URL \
|
SCRIPT_FILENAME=$POOL_URL \
|
||||||
QUERY_STRING=json \
|
QUERY_STRING=json \
|
||||||
REQUEST_METHOD=GET \
|
REQUEST_METHOD=GET \
|
||||||
sudo cgi-fcgi -bind -connect "$POOL_SOCKET" 2>/dev/null
|
sudo cgi-fcgi -bind -connect "$POOL_SOCKET" 2>/dev/null
|
||||||
)
|
)
|
||||||
assertNotNull "Failed to connect to $POOL_SOCKET" "$PHP_STATUS"
|
assertNotNull "Failed to connect to $POOL_SOCKET" "$PHP_STATUS"
|
||||||
done
|
done
|
||||||
@ -167,6 +226,25 @@ function startOndemandPoolsCache() {
|
|||||||
done <<<"$PHP_LIST"
|
done <<<"$PHP_LIST"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getAnySocket() {
|
||||||
|
PHP_DIR=$(getEtcPHPDirectory)
|
||||||
|
EXIT_CODE=$?
|
||||||
|
assertEquals "Failed to find PHP directory" "0" "$EXIT_CODE"
|
||||||
|
|
||||||
|
PHP_RUN_DIR=$(getRunPHPDirectory)
|
||||||
|
EXIT_CODE=$?
|
||||||
|
assertEquals "Failed to find PHP run directory" "0" "$EXIT_CODE"
|
||||||
|
|
||||||
|
#Get any socket of PHP-FPM:
|
||||||
|
PHP_FIRST=$(find "$PHP_DIR" -name 'www.conf' -type f | sort | head -n1)
|
||||||
|
assertNotNull "Failed to get PHP conf" "$PHP_FIRST"
|
||||||
|
PHP_VERSION=$(getPHPVersion "$PHP_FIRST")
|
||||||
|
assertNotNull "Failed to get PHP version for $PHP_FIRST" "$PHP_VERSION"
|
||||||
|
PHP_POOL=$(find "$PHP_RUN_DIR" -name "php${PHP_VERSION}*.sock" -type s 2>/dev/null | sort | head -n1)
|
||||||
|
assertNotNull "Failed to get PHP${PHP_VERSION} socket" "$PHP_POOL"
|
||||||
|
echo "$PHP_POOL"
|
||||||
|
}
|
||||||
|
|
||||||
getAnyPort() {
|
getAnyPort() {
|
||||||
PHP_PORT=$(sudo netstat -tulpn | grep -F "LISTEN" | grep -F "php-fpm" | head -n1 | awk '{print $4}' | rev | cut -d: -f1 | rev)
|
PHP_PORT=$(sudo netstat -tulpn | grep -F "LISTEN" | grep -F "php-fpm" | head -n1 | awk '{print $4}' | rev | cut -d: -f1 | rev)
|
||||||
assertNotNull "Failed to get PHP port" "$PHP_PORT"
|
assertNotNull "Failed to get PHP port" "$PHP_PORT"
|
||||||
@ -183,7 +261,7 @@ oneTimeSetUp() {
|
|||||||
#Install files:
|
#Install files:
|
||||||
sudo cp "$TRAVIS_BUILD_DIR/zabbix/zabbix_php_fpm_discovery.sh" "/etc/zabbix"
|
sudo cp "$TRAVIS_BUILD_DIR/zabbix/zabbix_php_fpm_discovery.sh" "/etc/zabbix"
|
||||||
sudo cp "$TRAVIS_BUILD_DIR/zabbix/zabbix_php_fpm_status.sh" "/etc/zabbix"
|
sudo cp "$TRAVIS_BUILD_DIR/zabbix/zabbix_php_fpm_status.sh" "/etc/zabbix"
|
||||||
sudo cp "$TRAVIS_BUILD_DIR/zabbix/userparameter_php_fpm.conf" "$(sudo find /etc/zabbix/ -name 'zabbix_agentd*.d' -type d | head -n1)"
|
sudo cp "$TRAVIS_BUILD_DIR/zabbix/userparameter_php_fpm.conf" "$(find /etc/zabbix/ -name 'zabbix_agentd*.d' -type d | sort | head -n1)"
|
||||||
sudo chmod +x /etc/zabbix/zabbix_php_fpm_discovery.sh
|
sudo chmod +x /etc/zabbix/zabbix_php_fpm_discovery.sh
|
||||||
sudo chmod +x /etc/zabbix/zabbix_php_fpm_status.sh
|
sudo chmod +x /etc/zabbix/zabbix_php_fpm_status.sh
|
||||||
|
|
||||||
|
@ -113,6 +113,11 @@ if [[ ! -x $S_FCGI ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ "${BASH_VERSINFO:-0}" -lt 4 ]]; then
|
||||||
|
${S_ECHO} "This script requires bash version 4.x or newer. Older version detected."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
#Local directory
|
#Local directory
|
||||||
LOCAL_DIR=$(${S_DIRNAME} "$0")
|
LOCAL_DIR=$(${S_DIRNAME} "$0")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user